-
Notifications
You must be signed in to change notification settings - Fork 61
Expand file tree
/
Copy pathsendPromptToAgent.test.ts
More file actions
123 lines (104 loc) · 3.55 KB
/
Copy pathsendPromptToAgent.test.ts
File metadata and controls
123 lines (104 loc) · 3.55 KB
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
import { toast } from "@posthog/ui/primitives/toast";
import { beforeEach, describe, expect, it, vi } from "vitest";
import { DEFAULT_TAB_IDS } from "../panels/panelConstants";
import { AGENT_PROMPT_SENDER } from "./agentPromptSender";
import { sendPromptToAgent } from "./sendPromptToAgent";
const { mockSender, reviewState, panelState, findTabInTree } = vi.hoisted(
() => ({
mockSender: vi.fn(),
reviewState: {
mode: "split" as "split" | "expanded",
setReviewMode: vi.fn(),
},
panelState: {
taskLayouts: {} as Record<string, { panelTree: unknown }>,
setActiveTab: vi.fn(),
},
findTabInTree: vi.fn(),
}),
);
vi.mock("@posthog/ui/primitives/toast", () => ({
toast: { error: vi.fn(), info: vi.fn(), success: vi.fn() },
}));
vi.mock("@posthog/di/container", () => ({
resolveService: (token: unknown) => {
if (token === AGENT_PROMPT_SENDER) return mockSender;
throw new Error(`resolveService: unmocked token ${String(token)}`);
},
}));
vi.mock("../code-review/reviewNavigationStore", () => ({
useReviewNavigationStore: {
getState: () => ({
getReviewMode: () => reviewState.mode,
setReviewMode: reviewState.setReviewMode,
}),
},
}));
vi.mock("../panels/panelLayoutStore", () => ({
usePanelLayoutStore: {
getState: () => ({
taskLayouts: panelState.taskLayouts,
setActiveTab: panelState.setActiveTab,
}),
},
}));
vi.mock("../panels/panelTree", () => ({ findTabInTree }));
describe("sendPromptToAgent", () => {
beforeEach(() => {
vi.clearAllMocks();
reviewState.mode = "split";
panelState.taskLayouts = {};
findTabInTree.mockReturnValue({ panelId: "panel-logs" });
});
it.each([
[
new Error("Agent server is not reachable"),
"Agent server is not reachable",
],
["boom", "Failed to send your message to the agent. Please try again."],
])(
"surfaces a rejected send as an error toast (%#)",
async (rejection, expectedMessage) => {
mockSender.mockRejectedValueOnce(rejection);
const success = await sendPromptToAgent("task-1", "hello");
expect(success).toBe(false);
expect(toast.error).toHaveBeenCalledWith(expectedMessage);
},
);
it("does not toast when the send resolves", async () => {
mockSender.mockResolvedValueOnce(undefined);
const success = await sendPromptToAgent("task-1", "hello");
expect(success).toBe(true);
expect(toast.error).not.toHaveBeenCalled();
});
it.each([
["resolves", () => mockSender.mockResolvedValueOnce(undefined)],
["rejects", () => mockSender.mockRejectedValueOnce(new Error("nope"))],
])(
"collapses review and switches to the logs tab when the send %s",
(_label, primeSender) => {
primeSender();
reviewState.mode = "expanded";
panelState.taskLayouts = { "task-1": { panelTree: {} } };
sendPromptToAgent("task-1", "hello");
expect(reviewState.setReviewMode).toHaveBeenCalledWith("task-1", "split");
expect(panelState.setActiveTab).toHaveBeenCalledWith(
"task-1",
"panel-logs",
DEFAULT_TAB_IDS.LOGS,
);
},
);
it("keeps expanded review open when requested", () => {
mockSender.mockResolvedValueOnce(undefined);
reviewState.mode = "expanded";
panelState.taskLayouts = { "task-1": { panelTree: {} } };
sendPromptToAgent("task-1", "hello", { keepReviewExpanded: true });
expect(reviewState.setReviewMode).not.toHaveBeenCalled();
expect(panelState.setActiveTab).toHaveBeenCalledWith(
"task-1",
"panel-logs",
DEFAULT_TAB_IDS.LOGS,
);
});
});