mirror of
https://github.com/anthropics/claude-code-action.git
synced 2026-01-22 22:44:13 +08:00
91 lines
2.9 KiB
TypeScript
91 lines
2.9 KiB
TypeScript
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",
|
|
payload: {
|
|
action: "created",
|
|
comment: {
|
|
body: "Test comment without trigger",
|
|
},
|
|
} as any,
|
|
});
|
|
|
|
const mockWorkflowDispatchContext = createMockAutomationContext({
|
|
eventName: "workflow_dispatch",
|
|
});
|
|
|
|
const mockScheduleContext = createMockAutomationContext({
|
|
eventName: "schedule",
|
|
});
|
|
|
|
test("getMode auto-detects agent mode for issue_comment without trigger", () => {
|
|
const mode = getMode(mockContext);
|
|
// Agent mode is the default when no trigger is found
|
|
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("experimental-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("experimental-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("experimental-review");
|
|
});
|
|
|
|
test("getMode falls back to auto-detection for invalid mode override", () => {
|
|
const mode = getMode(mockContext, "invalid");
|
|
// Should fall back to auto-detection, which returns agent for issue_comment without trigger
|
|
expect(mode).toBe(agentMode);
|
|
expect(mode.name).toBe("agent");
|
|
});
|
|
|
|
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);
|
|
});
|
|
});
|