1import { describe, expect, it } from "vite-plus/test";
2
3import {
4 alternateComposerDispatchAction,
5 resolveComposerDispatchMode,
6} from "./composerDispatch.ts";
7
8describe("resolveComposerDispatchMode", () => {
9 it("starts an ordinary turn while idle", () => {
10 expect(resolveComposerDispatchMode({ running: false, alternateModifier: false })).toBe("auto");
11 });
12
13 it("steers by default and reserves Mod+Enter for queueing while running", () => {
14 expect(resolveComposerDispatchMode({ running: true, alternateModifier: false })).toBe("steer");
15 expect(resolveComposerDispatchMode({ running: true, alternateModifier: true })).toBe("queue");
16 });
17
18 it("queues as the alternate action when restarting is the default", () => {
19 expect(
20 resolveComposerDispatchMode({
21 running: true,
22 alternateModifier: false,
23 activeTurnDefault: "restart",
24 }),
25 ).toBe("restart");
26 expect(
27 resolveComposerDispatchMode({
28 running: true,
29 alternateModifier: true,
30 activeTurnDefault: "restart",
31 }),
32 ).toBe("queue");
33 });
34 it.each([
35 ["queue", "steer"],
36 ["steer", "queue"],
37 ] as const)(
38 "uses configured %s behavior only during a running turn",
39 (activeTurnDefault, alternateAction) => {
40 expect(
41 resolveComposerDispatchMode({
42 running: true,
43 alternateModifier: false,
44 activeTurnDefault,
45 }),
46 ).toBe(activeTurnDefault);
47 expect(
48 resolveComposerDispatchMode({
49 running: true,
50 alternateModifier: true,
51 activeTurnDefault,
52 }),
53 ).toBe(alternateAction);
54 expect(
55 resolveComposerDispatchMode({
56 running: false,
57 alternateModifier: false,
58 activeTurnDefault,
59 }),
60 ).toBe("auto");
61 expect(
62 resolveComposerDispatchMode({ running: false, alternateModifier: true, activeTurnDefault }),
63 ).toBe("auto");
64 },
65 );
66
67 it("names the alternate action so the affordance can be labelled", () => {
68 expect(alternateComposerDispatchAction("queue")).toBe("steer");
69 expect(alternateComposerDispatchAction("steer")).toBe("queue");
70 expect(alternateComposerDispatchAction()).toBe("queue");
71 });
72});