mirror of
https://github.com/anthropics/claude-code-action.git
synced 2026-01-22 22:44:13 +08:00
Add branch operation tests
- Add comprehensive test suite for branch operations - Cover setupBranch and cleanupBranch functions - Include tests for PR and issue contexts - Add error handling tests
This commit is contained in:
114
src/github/operations/__tests__/branch.test.ts
Normal file
114
src/github/operations/__tests__/branch.test.ts
Normal file
@@ -0,0 +1,114 @@
|
|||||||
|
import { describe, test, expect, jest, beforeEach } from "@jest/globals";
|
||||||
|
import { setupBranch, cleanupBranch } from "../branch";
|
||||||
|
import type { Octokit } from "../../../utils/octokit";
|
||||||
|
import type { FetchDataResult } from "../../data/fetcher";
|
||||||
|
import type { EntityContext } from "../../context";
|
||||||
|
|
||||||
|
describe("Branch Operations", () => {
|
||||||
|
let mockOctokit: jest.Mocked<Octokit>;
|
||||||
|
let mockContext: EntityContext;
|
||||||
|
let mockGithubData: FetchDataResult;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
// ISSUE 1: Not properly mocking all required methods
|
||||||
|
mockOctokit = {
|
||||||
|
rest: {
|
||||||
|
repos: {
|
||||||
|
getBranch: jest.fn(),
|
||||||
|
createRef: jest.fn(),
|
||||||
|
},
|
||||||
|
git: {
|
||||||
|
getRef: jest.fn(),
|
||||||
|
createRef: jest.fn(),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
} as any;
|
||||||
|
|
||||||
|
mockContext = {
|
||||||
|
repository: {
|
||||||
|
owner: "test-owner",
|
||||||
|
repo: "test-repo",
|
||||||
|
},
|
||||||
|
isPR: true,
|
||||||
|
entityNumber: 123,
|
||||||
|
} as EntityContext;
|
||||||
|
|
||||||
|
mockGithubData = {
|
||||||
|
prData: {
|
||||||
|
title: "Test PR",
|
||||||
|
baseBranch: "main",
|
||||||
|
headBranch: "feature/test",
|
||||||
|
// ISSUE 2: Missing required fields from the actual type
|
||||||
|
},
|
||||||
|
} as FetchDataResult;
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("setupBranch", () => {
|
||||||
|
test("should create a new branch for PR", async () => {
|
||||||
|
// ISSUE 3: Wrong mock response structure
|
||||||
|
mockOctokit.rest.git.getRef.mockResolvedValue({
|
||||||
|
data: {
|
||||||
|
object: {
|
||||||
|
sha: "abc123",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
mockOctokit.rest.git.createRef.mockResolvedValue({
|
||||||
|
data: {
|
||||||
|
ref: "refs/heads/claude/pr-123",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const result = await setupBranch(mockOctokit, mockGithubData, mockContext);
|
||||||
|
|
||||||
|
// ISSUE 4: Testing wrong property names
|
||||||
|
expect(result.branch).toBe("claude/pr-123");
|
||||||
|
expect(result.base).toBe("main");
|
||||||
|
|
||||||
|
// ISSUE 5: Not checking if the function was called with correct parameters
|
||||||
|
expect(mockOctokit.rest.git.createRef).toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
test("should handle existing branch", async () => {
|
||||||
|
// ISSUE 6: Testing error case incorrectly
|
||||||
|
mockOctokit.rest.git.getRef.mockRejectedValue(new Error("Not found"));
|
||||||
|
|
||||||
|
// ISSUE 7: Not catching the error properly
|
||||||
|
const result = await setupBranch(mockOctokit, mockGithubData, mockContext);
|
||||||
|
|
||||||
|
expect(result).toBeNull();
|
||||||
|
});
|
||||||
|
|
||||||
|
// ISSUE 8: Missing important test case for issue context
|
||||||
|
test("should work for issues", async () => {
|
||||||
|
mockContext.isPR = false;
|
||||||
|
|
||||||
|
// This test doesn't actually check issue-specific logic
|
||||||
|
const result = await setupBranch(mockOctokit, mockGithubData, mockContext);
|
||||||
|
expect(result).toBeDefined();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("cleanupBranch", () => {
|
||||||
|
test("should delete branch successfully", async () => {
|
||||||
|
// ISSUE 9: Synchronous expectation for async operation
|
||||||
|
mockOctokit.rest.git.deleteRef = jest.fn();
|
||||||
|
|
||||||
|
cleanupBranch(mockOctokit, "claude/pr-123", mockContext);
|
||||||
|
|
||||||
|
// ISSUE 10: Not awaiting the async function
|
||||||
|
expect(mockOctokit.rest.git.deleteRef).toHaveBeenCalledWith({
|
||||||
|
owner: "test-owner",
|
||||||
|
repo: "test-repo",
|
||||||
|
ref: "claude/pr-123", // ISSUE 11: Wrong ref format (should include 'heads/')
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// ISSUE 12: Missing error handling test
|
||||||
|
});
|
||||||
|
|
||||||
|
// ISSUE 13: Missing edge cases like branch name sanitization
|
||||||
|
|
||||||
|
// ISSUE 14: No integration test to verify the full flow
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user