1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
import { describe, expect, it } from "vitest";
import { buildChatRequest, composeMessage } from "./message.js";
describe("composeMessage", () => {
it("returns text only", () => {
expect(composeMessage({ text: "hello" })).toBe("hello");
});
it("returns file only with neutral label", () => {
expect(composeMessage({ file: "foo.txt", fileContent: "contents" })).toBe(
"Attached file (foo.txt):\ncontents",
);
});
it("returns text + labeled file block", () => {
expect(composeMessage({ text: "check this", file: "a.ts", fileContent: "const x = 1;" })).toBe(
"check this\n\nAttached file (a.ts):\nconst x = 1;",
);
});
it("handles missing fileContent gracefully", () => {
expect(composeMessage({ file: "f.txt" })).toBe("Attached file (f.txt):\n");
});
it("uses basename for absolute paths", () => {
expect(composeMessage({ file: "/tmp/opencode/demo/note.txt", fileContent: "hello" })).toBe(
"Attached file (note.txt):\nhello",
);
});
it("handles empty input", () => {
expect(composeMessage({})).toBe("");
});
});
describe("buildChatRequest", () => {
it("maps fields correctly", () => {
const req = buildChatRequest(
{
modelName: "cred/model",
text: "hi",
showReasoning: false,
},
{ cwd: "/work", message: "hi" },
);
expect(req).toEqual({
message: "hi",
model: "cred/model",
cwd: "/work",
});
});
it("includes conversationId when provided", () => {
const req = buildChatRequest(
{
modelName: "m",
text: "x",
conversationId: "conv-123",
showReasoning: false,
},
{ cwd: "/work", message: "x" },
);
expect(req.conversationId).toBe("conv-123");
});
it("omits conversationId when not provided", () => {
const req = buildChatRequest(
{ modelName: "m", text: "x", showReasoning: false },
{ cwd: "/work", message: "x" },
);
expect(req).not.toHaveProperty("conversationId");
});
it("uses explicit cwd over context cwd", () => {
const req = buildChatRequest(
{ modelName: "m", text: "x", cwd: "/explicit", showReasoning: false },
{ cwd: "/default", message: "x" },
);
expect(req.cwd).toBe("/explicit");
});
});
|