Files
Dune/tests/duke-capture-uncertainty.test.ts
T
Quintine 57e7611468
Verify and publish checkpoint container / container (push) Successful in 11m21s
Guard Duke grants using public capture uncertainty
2026-10-29 19:22:46 +11:00

37 lines
1.8 KiB
TypeScript

import assert from 'node:assert/strict';
import test from 'node:test';
import { DUKE_VIDAL_ID } from '../game/duke-vidal';
import { nextDukeCaptureUncertainty as next, type DukeCapturePublicSource } from '../game/duke-capture-uncertainty';
const known: DukeCapturePublicSource = {
publicController:'guild', loser:'guild', revealedLeader:'other-leader', publicPlanKnown:true,
};
void test('publicly possible held or just-used Duke makes the capture uncertain', () => {
assert.equal(next(false, known), true);
assert.equal(next(false, {...known, publicController:null, revealedLeader:DUKE_VIDAL_ID}), true);
assert.equal(next(false, {...known, publicController:'ecaz', revealedLeader:'other-leader'}), false);
assert.equal(next(false, {...known, publicController:null, revealedLeader:null}), false);
});
void test('uncertainty persists and unstamped historical games are not rewritten', () => {
assert.equal(next(true, {...known, publicController:null}), true);
assert.equal(next(undefined, known), undefined);
assert.equal(next(undefined, {...known, publicController:undefined}), undefined);
});
void test('incomplete or invalid public sources cannot prove Duke was excluded', () => {
for (const source of [
{...known, publicController:undefined}, {...known, loser:undefined},
{...known, loser:''}, {...known, revealedLeader:undefined},
{...known, revealedLeader:''}, {...known, publicPlanKnown:false},
]) assert.equal(next(false, source), true);
});
void test('publicly equivalent captures stay equivalent regardless of actual selection', () => {
const dukeSelected = {...known, actualSelected:DUKE_VIDAL_ID, concealed:true};
const otherSelected = {...known, actualSelected:'other-leader', concealed:false};
assert.equal(next(false, dukeSelected), next(false, otherSelected));
assert.equal(next(false, dukeSelected), true);
});