1import { describe, expect, it } from "@effect/vitest";
2
3import {
4 resolvePendingTaskInteractionMode,
5 resolveProviderInteractionMode,
6} from "./legacy-plan-mode";
7
8describe("resolveProviderInteractionMode", () => {
9 it("clears saved plan mode when the provider cannot use T3 interaction modes", () => {
10 expect(resolveProviderInteractionMode({ showInteractionModeToggle: false }, "plan")).toBe(
11 "default",
12 );
13 });
14
15 it("keeps supported choices and remains compatible with older server status", () => {
16 expect(resolveProviderInteractionMode({ showInteractionModeToggle: true }, "plan")).toBe(
17 "plan",
18 );
19 expect(resolveProviderInteractionMode({}, "plan")).toBe("plan");
20 expect(resolveProviderInteractionMode(null, "plan")).toBe("plan");
21 expect(resolveProviderInteractionMode(undefined, undefined)).toBe("default");
22 });
23});
24
25describe("resolvePendingTaskInteractionMode", () => {
26 it.each([false, true])(
27 "clears a queued unsupported plan mode with preferenceLoaded=%s",
28 (preferenceLoaded) => {
29 expect(
30 resolvePendingTaskInteractionMode({
31 preferenceLoaded,
32 planModeEnabled: true,
33 draftInteractionMode: "plan",
34 queuedInteractionMode: "plan",
35 provider: { showInteractionModeToggle: false },
36 }),
37 ).toBe("default");
38 },
39 );
40
41 it("preserves a queued plan task while the preference is still loading", () => {
42 expect(
43 resolvePendingTaskInteractionMode({
44 preferenceLoaded: false,
45 planModeEnabled: false,
46 draftInteractionMode: "plan",
47 queuedInteractionMode: "plan",
48 }),
49 ).toBe("plan");
50 });
51
52 it("forces build mode once the disabled preference has loaded", () => {
53 expect(
54 resolvePendingTaskInteractionMode({
55 preferenceLoaded: true,
56 planModeEnabled: false,
57 draftInteractionMode: "plan",
58 queuedInteractionMode: "plan",
59 }),
60 ).toBe("default");
61 });
62
63 it("keeps a fresh draft in build mode while the preference is loading", () => {
64 expect(
65 resolvePendingTaskInteractionMode({
66 preferenceLoaded: false,
67 planModeEnabled: false,
68 draftInteractionMode: "plan",
69 queuedInteractionMode: undefined,
70 }),
71 ).toBe("default");
72 });
73
74 it("honors the draft's mode when the plan preference is enabled", () => {
75 expect(
76 resolvePendingTaskInteractionMode({
77 preferenceLoaded: true,
78 planModeEnabled: true,
79 draftInteractionMode: "plan",
80 queuedInteractionMode: undefined,
81 }),
82 ).toBe("plan");
83 expect(
84 resolvePendingTaskInteractionMode({
85 preferenceLoaded: true,
86 planModeEnabled: true,
87 draftInteractionMode: undefined,
88 queuedInteractionMode: "plan",
89 }),
90 ).toBe("default");
91 });
92});