Files
core2026/app/game-engine/test/yearbookPersistence.test.ts
T

49 lines
1.8 KiB
TypeScript

import { describe, expect, it, vi } from 'vitest';
import type { GamePrisma } from '@sammo-ts/infra';
import { LogCategory, LogScope } from '@sammo-ts/logic';
import { persistYearbookSnapshot } from '../src/turn/yearbookPersistence.js';
describe('persistYearbookSnapshot', () => {
it('archives canonical summary logs and compatible action logs together in descending ID order', async () => {
const findMany = vi
.fn()
.mockResolvedValueOnce([{ text: '천하 동향' }])
.mockResolvedValueOnce([{ text: '호환 행동' }, { text: '장수 동향' }]);
const upsert = vi.fn().mockResolvedValue(undefined);
const transaction = {
logEntry: { findMany },
yearbookHistory: { upsert },
} as unknown as GamePrisma.TransactionClient;
await persistYearbookSnapshot(transaction, {
serverId: 'hwe:generation',
sourceId: 0,
year: 195,
month: 1,
map: { year: 195, month: 1 },
nations: [],
});
expect(findMany).toHaveBeenNthCalledWith(
2,
expect.objectContaining({
where: {
scope: LogScope.SYSTEM,
category: { in: [LogCategory.SUMMARY, LogCategory.ACTION] },
year: 195,
month: 1,
},
orderBy: { id: 'desc' },
})
);
expect(upsert).toHaveBeenCalledWith(
expect.objectContaining({
create: expect.objectContaining({ globalAction: ['호환 행동', '장수 동향'] }),
update: expect.objectContaining({ globalAction: ['호환 행동', '장수 동향'] }),
})
);
});
});