Files
Dune/tests/nexus-fremen-betrayal-controls.test.tsx

26 lines
1.2 KiB
TypeScript

import test from 'node:test';
import assert from 'node:assert/strict';
import { createElement } from 'react';
import { renderToStaticMarkup } from 'react-dom/server';
import { NexusFremenBetrayal } from '../components/nexus-fremen-betrayal';
import { applyAction, viewGame } from '../game/engine';
import { fremenBetrayalWormFixture } from './fixture-nexus-fremen-betrayal';
void test('pre-blow owner sees worm prevention while rival cannot see the held card or offer', () => {
const { g, play } = fremenBetrayalWormFixture();
const owner = renderToStaticMarkup(createElement(NexusFremenBetrayal, {
game: viewGame(g, 'h'), act() {}, busy: false,
}));
const rival = renderToStaticMarkup(createElement(NexusFremenBetrayal, {
game: viewGame(g, 'f'), act() {}, busy: false,
}));
assert.match(owner, /Use Betrayal: prevent worm riding this turn/);
assert.match(owner, /Worm destruction, survival, protection and Nexus still resolve/);
assert.equal(rival, '');
const spent = applyAction(g, 'h', play);
assert.equal(renderToStaticMarkup(createElement(NexusFremenBetrayal, {
game: viewGame(spent, 'h'), act() {}, busy: false,
})), '');
assert.equal(viewGame(spent, 'f').players.find(player => player.id === 'f')!.fremenNexusWormBlocked, true);
});