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); });