37 lines
1.4 KiB
TypeScript
37 lines
1.4 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
import { buildGameReadModelDomainRevisionKey } from '@sammo-ts/common';
|
|
|
|
import { buildRevisionedBaseMapCacheKey } from '../src/maps/worldMap.js';
|
|
import type { GameApiContext } from '../src/context.js';
|
|
|
|
describe('world map revision cache', () => {
|
|
it('selects a new shared base-map key after a committed world revision', async () => {
|
|
const reads: Array<[string, string]> = [];
|
|
const ctx = {
|
|
profile: { id: 'hwe', name: 'hwe', scenario: 'scenario_2400' },
|
|
redis: {
|
|
hGet: async (key: string, field: string) => {
|
|
reads.push([key, field]);
|
|
return '12';
|
|
},
|
|
},
|
|
} as unknown as GameApiContext;
|
|
|
|
await expect(buildRevisionedBaseMapCacheKey(ctx)).resolves.toBe(
|
|
'sammo:map:base:hwe:scenario_2400:r12'
|
|
);
|
|
expect(reads).toEqual([[buildGameReadModelDomainRevisionKey('hwe'), 'world']]);
|
|
});
|
|
|
|
it('falls back to revision zero when Redis is temporarily unavailable', async () => {
|
|
const ctx = {
|
|
profile: { id: 'hwe', name: 'hwe', scenario: 'scenario_2400' },
|
|
redis: { hGet: async () => Promise.reject(new Error('redis unavailable')) },
|
|
} as unknown as GameApiContext;
|
|
|
|
await expect(buildRevisionedBaseMapCacheKey(ctx)).resolves.toBe(
|
|
'sammo:map:base:hwe:scenario_2400:r0'
|
|
);
|
|
});
|
|
});
|