80 lines
2.5 KiB
TypeScript
80 lines
2.5 KiB
TypeScript
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
|
|
const { checkGitHubActionsRunMock, sendScheduledMessageMock } = vi.hoisted(
|
|
() => ({
|
|
checkGitHubActionsRunMock: vi.fn(),
|
|
sendScheduledMessageMock: vi.fn(async () => {}),
|
|
}),
|
|
);
|
|
|
|
vi.mock('./github-ci.js', () => ({
|
|
checkGitHubActionsRun: checkGitHubActionsRunMock,
|
|
computeGitHubWatcherDelayMs: vi.fn(() => 15_000),
|
|
MAX_GITHUB_CONSECUTIVE_ERRORS: 5,
|
|
parseGitHubCiMetadata: vi.fn((raw: string | null | undefined) =>
|
|
raw ? JSON.parse(raw) : null,
|
|
),
|
|
serializeGitHubCiMetadata: vi.fn((metadata: unknown) =>
|
|
JSON.stringify(metadata),
|
|
),
|
|
}));
|
|
|
|
vi.mock('./task-scheduler-runtime.js', () => ({
|
|
sendScheduledMessage: sendScheduledMessageMock,
|
|
}));
|
|
|
|
vi.mock('./task-status-tracker.js', () => ({
|
|
createTaskStatusTracker: () => ({
|
|
update: vi.fn(async () => {}),
|
|
}),
|
|
}));
|
|
|
|
import { _initTestDatabase, createTask, getTaskById } from './db.js';
|
|
import { runGithubCiTask } from './task-scheduler-github.js';
|
|
|
|
describe('GitHub watcher delivery identity', () => {
|
|
beforeEach(() => {
|
|
_initTestDatabase();
|
|
checkGitHubActionsRunMock.mockReset();
|
|
sendScheduledMessageMock.mockClear();
|
|
});
|
|
|
|
it('passes the scheduling agent type to completion delivery', async () => {
|
|
checkGitHubActionsRunMock.mockResolvedValueOnce({
|
|
terminal: true,
|
|
resultSummary: '성공: owner/repo run 765432',
|
|
completionMessage: 'CI 완료: GitHub Actions run 765432\n판정: 성공',
|
|
});
|
|
createTask({
|
|
id: 'task-github-codex-paired-complete',
|
|
group_folder: 'paired-group',
|
|
chat_jid: 'paired@g.us',
|
|
agent_type: 'codex',
|
|
room_role: 'owner',
|
|
ci_provider: 'github',
|
|
ci_metadata: JSON.stringify({ repo: 'owner/repo', run_id: 765432 }),
|
|
prompt: '[BACKGROUND CI WATCH]\nGitHub Actions run 765432',
|
|
schedule_type: 'interval',
|
|
schedule_value: '15000',
|
|
context_mode: 'isolated',
|
|
next_run: new Date().toISOString(),
|
|
status: 'active',
|
|
created_at: '2026-02-22T00:00:00.000Z',
|
|
});
|
|
|
|
const task = getTaskById('task-github-codex-paired-complete');
|
|
expect(task).toBeDefined();
|
|
const deps = { sendMessage: vi.fn(async () => {}) } as any;
|
|
|
|
await runGithubCiTask(task!, deps);
|
|
|
|
expect(sendScheduledMessageMock).toHaveBeenCalledWith(
|
|
deps,
|
|
'paired@g.us',
|
|
'CI 완료: GitHub Actions run 765432\n판정: 성공',
|
|
'owner',
|
|
);
|
|
expect(getTaskById('task-github-codex-paired-complete')).toBeUndefined();
|
|
});
|
|
});
|