This commit is contained in:
km-anthropic
2025-07-28 11:49:30 -07:00
parent 999dd8a3b6
commit dfe00d37c1
3 changed files with 155 additions and 1 deletions

View File

@@ -1,6 +1,6 @@
export type CommonFields = { export type CommonFields = {
repository: string; repository: string;
claudeCommentId: string; claudeCommentId?: string;
triggerPhrase: string; triggerPhrase: string;
triggerUsername?: string; triggerUsername?: string;
customInstructions?: string; customInstructions?: string;

View File

@@ -713,6 +713,78 @@ describe("generatePrompt", () => {
); );
}); });
test("should generate prompt for workflow_dispatch event with null githubData", () => {
const envVars: PreparedContext = {
repository: "owner/repo",
triggerPhrase: "@claude",
eventData: {
eventName: "workflow_dispatch",
isPR: false,
baseBranch: "main",
},
};
const prompt = generatePrompt(envVars, null, false);
expect(prompt).toContain("<event_type>WORKFLOW_DISPATCH</event_type>");
expect(prompt).toContain("<is_pr>false</is_pr>");
expect(prompt).toContain(
"<trigger_context>workflow dispatch event</trigger_context>",
);
expect(prompt).toContain(
"You are running in an automated context without a specific issue or PR",
);
expect(prompt).not.toContain("<pr_number>");
expect(prompt).not.toContain("<issue_number>");
});
test("should generate prompt for schedule event with null githubData", () => {
const envVars: PreparedContext = {
repository: "owner/repo",
triggerPhrase: "@claude",
triggerUsername: "github-actions[bot]",
eventData: {
eventName: "schedule",
isPR: false,
baseBranch: "main",
},
};
const prompt = generatePrompt(envVars, null, false);
expect(prompt).toContain("<event_type>SCHEDULE</event_type>");
expect(prompt).toContain("<is_pr>false</is_pr>");
expect(prompt).toContain(
"<trigger_context>scheduled automation event</trigger_context>",
);
expect(prompt).toContain("scheduled automation");
expect(prompt).toContain(
"<trigger_username>github-actions[bot]</trigger_username>",
);
});
test("should include direct prompt for automation events", () => {
const envVars: PreparedContext = {
repository: "owner/repo",
triggerPhrase: "@claude",
directPrompt: "Run daily maintenance tasks",
eventData: {
eventName: "workflow_dispatch",
isPR: false,
baseBranch: "main",
},
};
const prompt = generatePrompt(envVars, null, false);
expect(prompt).toContain("<direct_prompt>");
expect(prompt).toContain("Run daily maintenance tasks");
expect(prompt).toContain("</direct_prompt>");
expect(prompt).toContain(
"IMPORTANT: The following are direct instructions from the automation workflow",
);
});
test("should handle pull_request event on closed PR with new branch", () => { test("should handle pull_request event on closed PR with new branch", () => {
const envVars: PreparedContext = { const envVars: PreparedContext = {
repository: "owner/repo", repository: "owner/repo",

View File

@@ -29,6 +29,88 @@ describe("parseEnvVarsWithContext", () => {
process.env = originalEnv; process.env = originalEnv;
}); });
describe("workflow_dispatch event", () => {
beforeEach(() => {
process.env = {
...BASE_ENV,
BASE_BRANCH: "main",
};
});
test("should parse workflow_dispatch event correctly", () => {
const mockWorkflowDispatchContext = createMockContext({
eventName: "workflow_dispatch",
payload: {
inputs: {
task: "Run automated task",
},
repository: {
name: "test-repo",
owner: {
login: "test-owner",
},
},
sender: {
login: "test-user",
},
workflow: "test.yml",
},
});
const result = prepareContext(
mockWorkflowDispatchContext,
"",
"main",
undefined,
);
expect(result.repository).toBe("test-owner/test-repo");
expect(result.eventData.eventName).toBe("workflow_dispatch");
expect(result.eventData.isPR).toBe(false);
expect(result.eventData.baseBranch).toBe("main");
// triggerUsername is not extracted for workflow_dispatch events
expect(result.triggerUsername).toBeUndefined();
});
});
describe("schedule event", () => {
beforeEach(() => {
process.env = {
...BASE_ENV,
BASE_BRANCH: "main",
};
});
test("should parse schedule event correctly", () => {
const mockScheduleContext = createMockContext({
eventName: "schedule",
payload: {
schedule: "0 0 * * *",
repository: {
name: "test-repo",
owner: {
login: "test-owner",
},
},
},
});
const result = prepareContext(
mockScheduleContext,
"",
"main",
undefined,
);
expect(result.repository).toBe("test-owner/test-repo");
expect(result.eventData.eventName).toBe("schedule");
expect(result.eventData.isPR).toBe(false);
expect(result.eventData.baseBranch).toBe("main");
// triggerUsername is not extracted for schedule events
expect(result.triggerUsername).toBeUndefined();
});
});
describe("issue_comment event", () => { describe("issue_comment event", () => {
describe("on issue", () => { describe("on issue", () => {
beforeEach(() => { beforeEach(() => {