Files
EJClaw/src/task-scheduler-github-delivery.test.ts

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();
});
});