mirror of
https://github.com/anthropics/claude-code-action.git
synced 2026-01-23 06:54:13 +08:00
tests
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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(() => {
|
||||||
|
|||||||
Reference in New Issue
Block a user