61 lines
3.1 KiB
TypeScript
61 lines
3.1 KiB
TypeScript
import assert from 'node:assert/strict';
|
|
import test from 'node:test';
|
|
import { applyAction, createGame, joinGame, newPlayer, viewGame } from '../game/engine';
|
|
import { kullDefaultProfile, type KullDefaultProfile } from '../game/kull-default-profile';
|
|
|
|
const lobby: KullDefaultProfile = {
|
|
status: 'lobby', advanced: false, expansions: ['choam', 'ix', 'ecaz'],
|
|
players: [{faction:'choam'}, {faction:'ecaz'}, {faction:'richese'}],
|
|
};
|
|
|
|
void test('independent Ecaz cards do not disable the Basic native Kull lobby profile', () => {
|
|
for (const selection of [
|
|
{},
|
|
{lobbyOptions:{ecazTreachery:true}},
|
|
{lobbyModules:{ecazTreachery:true}},
|
|
{lobbyOptions:{ecazTreachery:true},lobbyModules:{ecazTreachery:true}},
|
|
]) assert.deepEqual(kullDefaultProfile({...lobby,...selection}), {eligible:true,reason:null});
|
|
assert.deepEqual(kullDefaultProfile({...lobby,expansions:['choam','ix'],
|
|
players:[{faction:'choam'},{faction:'atreides'}],lobbyOptions:{ecazTreachery:true}}),
|
|
{eligible:true,reason:null}, 'the independent cards do not require the Ecaz faction or deck');
|
|
});
|
|
|
|
void test('the actual public lobby retains the Kull default when independent cards are selected', () => {
|
|
let game = createGame('KULLINDEPENDENTPROFILE',newPlayer('c','CHOAM','choam'),false,['choam','ix','ecaz']);
|
|
joinGame(game,newPlayer('e','Ecaz','ecaz'));
|
|
let view = viewGame(game,'c');
|
|
assert.equal(view.lobbyModules?.ecazTreachery,false);
|
|
assert.equal(view.lobbyModules?.kullDefault,true);
|
|
assert.equal(view.lobbyModules?.kullPreview,true);
|
|
game = applyAction(game,'c',{type:'moduleOption',module:'ecazTreachery',enabled:true});
|
|
view = viewGame(game,'c');
|
|
assert.equal(view.lobbyModules?.ecazTreachery,true);
|
|
assert.equal(view.lobbyModules?.kullDefault,true);
|
|
assert.equal(view.lobbyModules?.kullPreview,true);
|
|
game = applyAction(game,'c',{type:'moduleOption',module:'kullPreview',enabled:false});
|
|
assert.equal(viewGame(game,'c').lobbyModules?.kullDefault,true);
|
|
assert.equal(viewGame(game,'c').lobbyModules?.kullPreview,false);
|
|
game = applyAction(game,'c',{type:'moduleOption',module:'kullPreview',enabled:true});
|
|
assert.equal(viewGame(game,'c').lobbyModules?.kullPreview,true);
|
|
assert.equal(viewGame(game,'c').lobbyModules?.ecazTreachery,true);
|
|
});
|
|
|
|
void test('all other modules and an already-initialized card marker remain excluded', () => {
|
|
const selected = {...lobby,lobbyOptions:{ecazTreachery:true}};
|
|
for (const other of [
|
|
{lobbyOptions:{ecazTreachery:true,leaderSkills:true}},
|
|
{lobbyModules:{ecazTreachery:true,leaderSkills:true}},
|
|
{lobbyModules:{ecazTreachery:true,nexusCards:true}},
|
|
{lobbyModules:{ecazTreachery:true,discoveries:true}},
|
|
{leaderSkills:{}},{ecazTreachery:true},{nexusCards:{}},{discoveryEnabled:true},
|
|
{discoveries:{}},{discoveryStash:{}},{greatMaker:{}},{homeworlds:{}},
|
|
{techTokens:{}},{strongholdCards:{}},
|
|
]) {
|
|
const result = kullDefaultProfile({...selected,...other});
|
|
assert.equal(result.eligible,false);
|
|
assert.ok(result.reason);
|
|
}
|
|
assert.equal(kullDefaultProfile({...selected,advanced:true}).eligible,false);
|
|
assert.equal(kullDefaultProfile({...selected,status:'setup'}).eligible,false);
|
|
});
|