Files
Dune/tests/ecaz-revival-cohort-runtime.test.ts
T

51 lines
2.9 KiB
TypeScript

import assert from 'node:assert/strict';
import test from 'node:test';
import { viewGame } from '../game/engine';
import { createNativeEcazCohortFixture, createNativeEcazSecondCohortFixture } from './fixture-ecaz-revival-cohort';
import { assertNexusDukeCustody, nexusDukePlayer, stepNexusDuke } from './fixture-nexus-duke-capture';
void test('five original native deaths and a real repeat death leave the unreturned Ecaz cohort revivable', () => {
const f = createNativeEcazCohortFixture();
const owner = nexusDukePlayer(f.game, f.owner);
const first = owner.leaders.find(l => l.id === f.first.leader)!;
assert.equal(first.dead, true);
assert.equal(first.deaths, 2);
const remaining = owner.leaders.filter(l => l.id !== first.id);
const options = viewGame(f.game, f.owner).revival.leaders;
assert.deepEqual(options.map(l => l.id).sort(), remaining.map(l => l.id).sort());
const next = remaining.slice().sort((a, b) => a.strength - b.strength)[0];
const after = stepNexusDuke(f.game, f.plan, { actor: f.owner,
action: { type: 'reviveLeader', leader: next.id } }, f.actions);
const revived = nexusDukePlayer(after, f.owner);
assert.equal(revived.leaders.find(l => l.id === next.id)!.dead, false);
assert.equal(revived.leaders.find(l => l.id === first.id)!.dead, true);
assert.equal(revived.spice, owner.spice - next.strength);
assert.equal(revived.leaderRevived, true);
assert.equal(revived.leaders.length, 5);
assert.equal(after.dukeVidal!.leader.capturedBy, f.captor);
assert.equal(after.dukeVidal!.leader.dead, false);
assert.equal(after.dukeVidal!.leader.deaths, 0);
assertNexusDukeCustody(after);
});
void test('a second original Ecaz cohort opens with four repeated native deaths and the same Duke in Tanks', () => {
const f = createNativeEcazSecondCohortFixture();
const owner = nexusDukePlayer(f.game, f.owner);
const returned = f.deaths.map(d => d.leader);
const options = viewGame(f.game, f.owner).revival.leaders.filter(l => l.id !== f.game.dukeVidal!.leader.id);
assert.deepEqual(options.map(l => l.id).sort(), returned.slice().sort());
assert.equal(owner.leaders.find(l => !returned.includes(l.id))!.deaths, 0);
assert.equal(owner.leaders.find(l => !returned.includes(l.id))!.dead, false);
assert.ok(returned.every(id => owner.leaders.find(l => l.id === id)!.deaths === 2));
const selected = owner.leaders.find(l => l.id === returned[0])!;
const after = stepNexusDuke(f.game, f.plan, { actor: f.owner,
action: { type: 'reviveLeader', leader: selected.id } }, f.actions);
assert.equal(nexusDukePlayer(after, f.owner).leaders.find(l => l.id === selected.id)!.dead, false);
assert.equal(nexusDukePlayer(after, f.owner).spice, owner.spice - selected.strength);
assert.equal(nexusDukePlayer(after, f.owner).leaderRevived, true);
assert.equal(after.dukeVidal!.leader.dead, true);
assert.equal(after.dukeVidal!.leader.deaths, 1);
assert.equal(after.dukeVidal!.controller, null);
assertNexusDukeCustody(after);
});