64 lines
2.3 KiB
TypeScript
64 lines
2.3 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
import { LogCategory, LogFormat, LogScope } from '@sammo-ts/logic';
|
|
|
|
import { summarizeRealtimeReadModelChanges } from '../src/turn/databaseHooks.js';
|
|
import type { TurnWorldChanges } from '../src/turn/inMemoryWorld.js';
|
|
import type { ReservedTurnChanges } from '../src/turn/reservedTurnStore.js';
|
|
|
|
describe('summarizeRealtimeReadModelChanges', () => {
|
|
it('emits deterministic entity and record invalidations from committed changes', () => {
|
|
const worldChanges = {
|
|
generals: [{ id: 9 }, { id: 7 }],
|
|
createdGenerals: [{ id: 8 }],
|
|
deletedGenerals: [9],
|
|
cities: [{ id: 4 }],
|
|
nations: [{ id: 3 }],
|
|
createdNations: [],
|
|
deletedNations: [],
|
|
deletedNationSnapshots: [],
|
|
lifecycleEvents: [],
|
|
logs: [
|
|
{
|
|
scope: LogScope.GENERAL,
|
|
category: LogCategory.ACTION,
|
|
generalId: 7,
|
|
format: LogFormat.PLAIN,
|
|
text: 'general',
|
|
},
|
|
{
|
|
scope: LogScope.SYSTEM,
|
|
category: LogCategory.SUMMARY,
|
|
format: LogFormat.PLAIN,
|
|
text: 'summary',
|
|
},
|
|
{
|
|
scope: LogScope.SYSTEM,
|
|
category: LogCategory.HISTORY,
|
|
format: LogFormat.PLAIN,
|
|
text: 'history',
|
|
},
|
|
],
|
|
} as unknown as TurnWorldChanges;
|
|
const reservedChanges: ReservedTurnChanges = {
|
|
generalIds: [9],
|
|
generalInitializationIds: [7],
|
|
generalLeaseIds: [9, 8],
|
|
nationKeys: [],
|
|
nationInitializationKeys: [],
|
|
nationLeaseKeys: [],
|
|
};
|
|
|
|
expect(summarizeRealtimeReadModelChanges(worldChanges, reservedChanges)).toEqual({
|
|
generalIds: [7, 8, 9],
|
|
cityIds: [4],
|
|
nationIds: [3],
|
|
reservedGeneralIds: [7, 8, 9],
|
|
recordGeneralIds: [7],
|
|
worldChanged: false,
|
|
globalRecordsChanged: true,
|
|
worldHistoryChanged: true,
|
|
contactsChanged: true,
|
|
});
|
|
});
|
|
});
|