Files
wownerogue/test/gameManagerWinFeed.test.js
T

60 lines
1.9 KiB
JavaScript

const GameManager = require('../src/game/gameManager');
function makeHarness(completion) {
const targetedEmit = jest.fn();
const io = {
to: jest.fn(() => ({ emit: targetedEmit })),
emit: jest.fn()
};
const game = {
id: 'game-seed',
player: { hasTreasure: false },
moveCount: 12,
startedAt: Date.now() - 1000,
endGame: jest.fn(),
getProofReveal: jest.fn(() => ({ commitment: 'proof' }))
};
const gameModeManager = {
completeGame: jest.fn().mockResolvedValue(completion),
db: { query: jest.fn().mockResolvedValue({ rows: [{ name: 'Alice' }] }) }
};
const manager = new GameManager({
activeGames: new Map([['socket-1', game]]),
io,
broadcastManager: {},
debugManager: { CONSOLE_LOGGING: false },
gameModeManager
});
return { manager, game, io };
}
async function finishWin(completion) {
const harness = makeHarness(completion);
await harness.manager.handleGameOver(
{ id: 'socket-1' },
harness.game,
'won',
'escaped',
'Escaped',
100
);
return harness.io.emit.mock.calls.find(([event]) => event === 'win_feed')?.[1];
}
describe('solo win feed payout status', () => {
test('marks a win paid when completion contains a nested payout amount', async () => {
const feed = await finishWin({
success: true,
payout: { status: 'queued', amount: '200000000000', multiplier: 2 }
});
expect(feed).toEqual(expect.objectContaining({ name: 'Alice', score: 100, paid: true }));
});
test('does not trust an obsolete top-level amount when no payout was created', async () => {
const feed = await finishWin({ success: true, amount: '200000000000', payout: null });
expect(feed).toEqual(expect.objectContaining({ paid: false }));
});
});