Files
Dune/tests/duke-homeworld-grant-uncertainty.test.ts
T
Quintine 59cb336c80
Verify and publish checkpoint container / container (push) Canceled after 0s
Resolve Duke uncertainty on public events
2026-10-29 19:30:00 +11:00

28 lines
1.8 KiB
TypeScript

import assert from 'node:assert/strict';
import test from 'node:test';
import { applyAction, viewGame } from '../game/engine';
import { createHomeworldEcazDukeFixture, actHomeworldEcazDuke, homeworldEcazDukePhysical } from './fixture-homeworld-ecaz-duke';
for (const legacy of [false, true]) void test(
`public occupied Ecaz grant clears ${legacy ? 'legacy' : 'uncertain'} Duke capture history`, () => {
// The original occupation, alliance and choice are earned; only the
// previous public uncertainty receipt is staged for this continuation.
const fixture = createHomeworldEcazDukeFixture({ advanced: true, allied: true });
const source = structuredClone(fixture.game), beforePhysical = structuredClone(homeworldEcazDukePhysical(source));
if (legacy) delete source.dukeCaptureUncertain;
else source.dukeCaptureUncertain = true;
const offer = viewGame(source, fixture.occupier).homeworldEcazDuke;
assert.ok(offer); assert.equal(offer.blocked, null); assert.ok(fixture.ally);
const action = { type: 'homeworldDuke', event: offer.event, recipient: fixture.ally };
const before = structuredClone(source);
assert.throws(() => applyAction(source, fixture.occupier, { ...action, event: `${offer.event}:stale` }));
assert.deepEqual(source, before, 'A rejected grant must not clear uncertainty');
const done = actHomeworldEcazDuke(source, fixture.occupier, action);
assert.equal(done.dukeCaptureUncertain, false);
assert.equal(done.dukeVidal?.controller, fixture.ally);
assert.equal(done.dukeVidal?.source, 'homeworldEcaz');
assert.equal(done.dukeVidal?.leader.id, fixture.dukeId);
assert.ok(done.log.some(entry => entry.text.includes('granted the living Duke Vidal')));
assert.deepEqual(homeworldEcazDukePhysical(done), beforePhysical);
});