34 lines
1.7 KiB
TypeScript
34 lines
1.7 KiB
TypeScript
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import { applyAction, viewGame } from '../game/engine';
|
|
import { botActions } from '../game/bots';
|
|
import { nexusRicheseFixture, holdNexusRicheseCard, nexusRicheseRequest, nexusRicheseInventory } from './fixture-nexus-richese';
|
|
|
|
void test('a binding five-force Yes uses the held Richese discount as a private completion witness', () => {
|
|
const f = nexusRicheseFixture({spice:1});
|
|
const card = holdNexusRicheseCard(f.g,f.target,'truthtrance');
|
|
let g = applyAction(f.g,f.target,{type:'card',card:card.id});
|
|
while (g.truthtrance?.stage === 'priority') {
|
|
const seat = g.players.find(p => !g.truthtrance!.passed.includes(p.id))!;
|
|
g = applyAction(g,seat.id,{type:'truthPass'});
|
|
}
|
|
g = applyAction(g,f.target,{type:'truthAsk',question:{kind:'shipment',target:f.owner,territory:'arrakeen',minimum:5}});
|
|
assert.deepEqual(viewGame(g,f.owner).truthShipmentAnswers,['yes','no']);
|
|
g = applyAction(g,f.owner,{type:'truthAnswer',answer:'yes'});
|
|
for (const profile of ['Easy','Medium','Hard','Brutal'] as const) {
|
|
const v = viewGame(g,f.owner);
|
|
v.players.find(p => p.id === f.owner)!.bot = profile;
|
|
const action = botActions(v)[0];
|
|
assert.equal(action.type,'ship');
|
|
assert.equal(action.amount,5);
|
|
assert.equal(action.nexus,JSON.stringify(['nexusRichese',g.turn,f.owner]));
|
|
const done = applyAction(g,f.owner,action);
|
|
assert.equal(done.players[0].reserves,15);
|
|
assert.equal(done.players[0].spice,0);
|
|
assert.equal(done.shipmentPromises?.[0].fulfilled,true);
|
|
nexusRicheseInventory(done);
|
|
}
|
|
assert.throws(() => applyAction(g,f.owner,{type:'endMovement'}));
|
|
assert.throws(() => applyAction(g,f.owner,nexusRicheseRequest(f,4,'arrakeen',10,g)));
|
|
});
|