Files
core2026/app/gateway-api/test/scenarioCatalog.test.ts
T
Hide_D 9cf4034db8 feat(scenario): CHE 0기 여명 시나리오를 추가한다
일반 공백지 규칙을 유지하면서 가동 전 M장 50명과 유니크 획득 계수 2배를 적용한다. 시나리오 합성, 실제 M장 생성, Gateway 카탈로그와 Chromium 선택지를 회귀 검증한다.
2026-08-24 05:32:31 +00:00

48 lines
1.8 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import { listScenarioPreviews, resolveGitCommitSha } from '../src/scenario/scenarioCatalog.js';
describe('scenarioCatalog git ref support', () => {
it('includes the CHE zero-season dawn scenario in the local catalog', async () => {
const previews = await listScenarioPreviews();
expect(previews.find((scenario) => scenario.id === 916)).toMatchObject({
id: 916,
title: '【공백지】 여명',
year: 180,
});
});
it('resolves HEAD to a commit hash', async () => {
const commitSha = await resolveGitCommitSha('HEAD');
expect(commitSha).toMatch(/^[0-9a-f]{40}$/i);
});
it('loads scenario previews from a git ref', async () => {
const previews = await listScenarioPreviews({ gitRef: 'HEAD' });
expect(previews.length).toBeGreaterThan(0);
const ids = previews.map((scenario) => scenario.id);
const sorted = [...ids].sort((a, b) => a - b);
expect(ids).toEqual(sorted);
expect(previews.every((scenario) => scenario.defaultStatTotal > 0)).toBe(true);
expect(previews.every((scenario) => scenario.fiction === null || Number.isInteger(scenario.fiction))).toBe(
true
);
expect(previews.find((scenario) => scenario.id === 916)).toMatchObject({
id: 916,
title: '【공백지】 여명',
year: 180,
});
});
it('rejects without crashing when git cannot be spawned', async () => {
const originalPath = process.env.PATH;
process.env.PATH = '/nonexistent';
try {
await expect(resolveGitCommitSha('HEAD')).rejects.toThrow('git ref not found.');
} finally {
process.env.PATH = originalPath;
}
});
});