Major features: - Mode auto-detection based on GitHub event type - Unified prompt field replacing override_prompt and direct_prompt - Slash command system with pre-built commands - Full backward compatibility with v0.x Key changes: - Add mode detector for automatic mode selection - Implement slash command loader with YAML frontmatter support - Update action.yml with new prompt input - Create pre-built slash commands for common tasks - Update all tests for v1.0 compatibility Breaking changes (with compatibility): - Mode input now optional (auto-detected) - override_prompt deprecated (use prompt) - direct_prompt deprecated (use prompt)
84 lines
2.7 KiB
TypeScript
84 lines
2.7 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",
|
|
});
|
|
|
|
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);
|
|
});
|
|
});
|