takt: github-issue-130-tasuku-autopr (#140)
This commit is contained in:
parent
7c5936ee76
commit
e23359b1bf
@ -386,6 +386,23 @@ describe('addTask', () => {
|
||||
expect(mockResolveIssueTask).toHaveBeenCalledWith('#99');
|
||||
});
|
||||
|
||||
it('should call auto-PR confirm with default true', async () => {
|
||||
// Given: worktree is confirmed so auto-PR prompt is reached
|
||||
setupFullFlowMocks({ slug: 'auto-pr-default' });
|
||||
mockConfirm.mockResolvedValue(true);
|
||||
mockPromptInput.mockResolvedValue('');
|
||||
|
||||
// When
|
||||
await addTask(testDir);
|
||||
|
||||
// Then: second confirm call (Auto-create PR?) has defaultYes=true
|
||||
const autoPrCall = mockConfirm.mock.calls.find(
|
||||
(call) => call[0] === 'Auto-create PR?',
|
||||
);
|
||||
expect(autoPrCall).toBeDefined();
|
||||
expect(autoPrCall![1]).toBe(true);
|
||||
});
|
||||
|
||||
describe('create_issue action', () => {
|
||||
it('should call createIssue when create_issue action is selected', async () => {
|
||||
// Given: interactive mode returns create_issue action
|
||||
|
||||
104
src/__tests__/selectAndExecute-autoPr.test.ts
Normal file
104
src/__tests__/selectAndExecute-autoPr.test.ts
Normal file
@ -0,0 +1,104 @@
|
||||
/**
|
||||
* Tests for resolveAutoPr default behavior in selectAndExecuteTask
|
||||
*/
|
||||
|
||||
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
||||
|
||||
vi.mock('../shared/prompt/index.js', () => ({
|
||||
confirm: vi.fn(),
|
||||
}));
|
||||
|
||||
vi.mock('../infra/config/index.js', () => ({
|
||||
getCurrentPiece: vi.fn(),
|
||||
listPieces: vi.fn(() => ['default']),
|
||||
listPieceEntries: vi.fn(() => []),
|
||||
isPiecePath: vi.fn(() => false),
|
||||
loadAllPiecesWithSources: vi.fn(() => new Map()),
|
||||
getPieceCategories: vi.fn(() => null),
|
||||
buildCategorizedPieces: vi.fn(),
|
||||
loadGlobalConfig: vi.fn(() => ({})),
|
||||
}));
|
||||
|
||||
vi.mock('../infra/task/index.js', () => ({
|
||||
createSharedClone: vi.fn(),
|
||||
autoCommitAndPush: vi.fn(),
|
||||
summarizeTaskName: vi.fn(),
|
||||
}));
|
||||
|
||||
vi.mock('../shared/ui/index.js', () => ({
|
||||
info: vi.fn(),
|
||||
error: vi.fn(),
|
||||
success: vi.fn(),
|
||||
}));
|
||||
|
||||
vi.mock('../shared/utils/index.js', async (importOriginal) => ({
|
||||
...(await importOriginal<Record<string, unknown>>()),
|
||||
createLogger: () => ({
|
||||
info: vi.fn(),
|
||||
debug: vi.fn(),
|
||||
error: vi.fn(),
|
||||
}),
|
||||
}));
|
||||
|
||||
vi.mock('../infra/github/index.js', () => ({
|
||||
createPullRequest: vi.fn(),
|
||||
buildPrBody: vi.fn(),
|
||||
pushBranch: vi.fn(),
|
||||
}));
|
||||
|
||||
vi.mock('../features/tasks/execute/taskExecution.js', () => ({
|
||||
executeTask: vi.fn(),
|
||||
}));
|
||||
|
||||
vi.mock('../features/pieceSelection/index.js', () => ({
|
||||
warnMissingPieces: vi.fn(),
|
||||
selectPieceFromCategorizedPieces: vi.fn(),
|
||||
selectPieceFromEntries: vi.fn(),
|
||||
}));
|
||||
|
||||
import { confirm } from '../shared/prompt/index.js';
|
||||
import { createSharedClone, autoCommitAndPush, summarizeTaskName } from '../infra/task/index.js';
|
||||
import { selectAndExecuteTask } from '../features/tasks/execute/selectAndExecute.js';
|
||||
|
||||
const mockConfirm = vi.mocked(confirm);
|
||||
const mockCreateSharedClone = vi.mocked(createSharedClone);
|
||||
const mockAutoCommitAndPush = vi.mocked(autoCommitAndPush);
|
||||
const mockSummarizeTaskName = vi.mocked(summarizeTaskName);
|
||||
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks();
|
||||
});
|
||||
|
||||
describe('resolveAutoPr default in selectAndExecuteTask', () => {
|
||||
it('should call auto-PR confirm with default true when no CLI option or config', async () => {
|
||||
// Given: worktree is enabled via override, no autoPr option, no global config autoPr
|
||||
mockConfirm.mockResolvedValue(true);
|
||||
mockSummarizeTaskName.mockResolvedValue('test-task');
|
||||
mockCreateSharedClone.mockReturnValue({
|
||||
path: '/project/../clone',
|
||||
branch: 'takt/test-task',
|
||||
});
|
||||
|
||||
const { executeTask } = await import(
|
||||
'../features/tasks/execute/taskExecution.js'
|
||||
);
|
||||
vi.mocked(executeTask).mockResolvedValue(true);
|
||||
mockAutoCommitAndPush.mockReturnValue({
|
||||
success: false,
|
||||
message: 'no changes',
|
||||
});
|
||||
|
||||
// When
|
||||
await selectAndExecuteTask('/project', 'test task', {
|
||||
piece: 'default',
|
||||
createWorktree: true,
|
||||
});
|
||||
|
||||
// Then: the 'Create pull request?' confirm is called with default true
|
||||
const autoPrCall = mockConfirm.mock.calls.find(
|
||||
(call) => call[0] === 'Create pull request?',
|
||||
);
|
||||
expect(autoPrCall).toBeDefined();
|
||||
expect(autoPrCall![1]).toBe(true);
|
||||
});
|
||||
});
|
||||
@ -186,7 +186,7 @@ export async function addTask(cwd: string, task?: string): Promise<void> {
|
||||
}
|
||||
|
||||
// PR確認(worktreeが有効な場合のみ)
|
||||
autoPr = await confirm('Auto-create PR?', false);
|
||||
autoPr = await confirm('Auto-create PR?', true);
|
||||
}
|
||||
|
||||
// YAMLファイル作成
|
||||
|
||||
@ -141,7 +141,7 @@ async function resolveAutoPr(optionAutoPr: boolean | undefined): Promise<boolean
|
||||
}
|
||||
|
||||
// Fall back to interactive prompt
|
||||
return confirm('Create pull request?', false);
|
||||
return confirm('Create pull request?', true);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user