import { describe, test, expect } from "bun:test"; import { getMode, isValidMode } from "../../src/modes/registry"; import { agentMode } from "../../src/modes/agent"; import { reviewMode } from "../../src/modes/review"; import { createMockContext, createMockAutomationContext } from "../mockContext"; describe("Mode Registry", () => { const mockContext = createMockContext({ eventName: "issue_comment", }); const mockWorkflowDispatchContext = createMockAutomationContext({ eventName: "workflow_dispatch", }); const mockScheduleContext = createMockAutomationContext({ eventName: "schedule", }); test("getMode auto-detects tag mode for issue_comment", () => { const mode = getMode(mockContext); // Issue comment without trigger won't activate tag mode, defaults to agent expect(mode).toBe(agentMode); expect(mode.name).toBe("agent"); }); test("getMode auto-detects agent mode for workflow_dispatch", () => { const mode = getMode(mockWorkflowDispatchContext); expect(mode).toBe(agentMode); expect(mode.name).toBe("agent"); }); test("getMode can use explicit mode override for review", () => { const mode = getMode(mockContext, "review"); expect(mode).toBe(reviewMode); expect(mode.name).toBe("review"); }); test("getMode auto-detects agent for workflow_dispatch", () => { const mode = getMode(mockWorkflowDispatchContext); expect(mode).toBe(agentMode); expect(mode.name).toBe("agent"); }); test("getMode auto-detects agent for schedule event", () => { const mode = getMode(mockScheduleContext); expect(mode).toBe(agentMode); expect(mode.name).toBe("agent"); }); test("getMode supports legacy experimental-review mode name", () => { const mode = getMode(mockContext, "experimental-review"); expect(mode).toBe(reviewMode); expect(mode.name).toBe("review"); }); test("getMode auto-detects review mode for PR opened", () => { const prContext = createMockContext({ eventName: "pull_request", payload: { action: "opened" } as any, isPR: true, }); const mode = getMode(prContext); expect(mode).toBe(reviewMode); expect(mode.name).toBe("agent"); }); test("getMode throws error for invalid mode override", () => { expect(() => getMode(mockContext, "invalid")).toThrow( "Mode 'agent' not found. This should not happen. Please report this issue.", ); }); test("isValidMode returns true for all valid modes", () => { expect(isValidMode("tag")).toBe(true); expect(isValidMode("agent")).toBe(true); expect(isValidMode("experimental-review")).toBe(true); }); test("isValidMode returns false for invalid mode", () => { expect(isValidMode("invalid")).toBe(false); }); });