49 lines
1.8 KiB
TypeScript
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: ['호환 행동', '장수 동향'] }),
|
|
})
|
|
);
|
|
});
|
|
});
|