Connect the Basic Ecaz new-ally Duke loan
This commit is contained in:
1 parent
c28e24b5fa
commit
2d0f20b69c
11 files changed
+106
-25
No files matched your search
@@ -118,16 +118,16 @@ void test('single-battle consumption releases custody while retaining alive or d
|
||||
}
|
||||
});
|
||||
|
||||
void test('turn end releases only Moritani tenure and preserves Ecaz holdings and unresolved allied loans', () => {
|
||||
void test('turn end releases Moritani tenure and allied loans while preserving unused Ecaz holdings', () => {
|
||||
for (const source of ['moritani', 'ally', 'ecaz'] as const) {
|
||||
const state = acquireDuke(createDukeVidal(), 'holder', 4, source);
|
||||
const earlier = expireDuke(state, 3);
|
||||
assert.deepEqual(earlier, state);
|
||||
for (const turn of [4, 5]) {
|
||||
const expired = expireDuke(state, turn);
|
||||
assert.equal(expired.controller, source === 'moritani' ? null : 'holder');
|
||||
assert.equal(expired.acquiredTurn, source === 'moritani' ? null : 4);
|
||||
assert.equal(expired.source, source === 'moritani' ? null : source);
|
||||
assert.equal(expired.controller, source === 'ecaz' ? 'holder' : null);
|
||||
assert.equal(expired.acquiredTurn, source === 'ecaz' ? 4 : null);
|
||||
assert.equal(expired.source, source === 'ecaz' ? source : null);
|
||||
assert.deepEqual(expired.leader, state.leader);
|
||||
}
|
||||
assert.equal(state.controller, 'holder');
|
||||
|
||||
@@ -89,11 +89,17 @@ function propose(g: Game) {
|
||||
return applyAction(g, 'ec', proposal(g));
|
||||
}
|
||||
function answer(g: Game, accept: boolean) {
|
||||
return applyAction(json(g), 'in', {
|
||||
let done = applyAction(json(g), 'in', {
|
||||
type: 'decision',
|
||||
event: g.pendingAmbassador!.event,
|
||||
accept,
|
||||
});
|
||||
// These scenarios exercise alliance-only continuation, declining the optional loan.
|
||||
if (done.pendingAmbassador?.stage === 'loan')
|
||||
done = applyAction(done, 'ec', {
|
||||
type: 'decision', event: done.pendingAmbassador.event, loan: false,
|
||||
});
|
||||
return done;
|
||||
}
|
||||
function reject(g: Game, id: string, action: Action) {
|
||||
const before = structuredClone(g);
|
||||
@@ -372,7 +378,7 @@ for (const level of DIFFICULTIES)
|
||||
assert.equal(reply.accept, true);
|
||||
const done = applyAction(offered, 'in', reply);
|
||||
assert.equal(seat(done, 'ec').ally, 'in');
|
||||
assert.equal(done.pendingAmbassador, null);
|
||||
assert.equal(done.pendingAmbassador?.stage, 'loan');
|
||||
});
|
||||
|
||||
void test('saved alliance replies reject missing events, corrupted token custody and changed entrant bindings before any answer', () => {
|
||||
|
||||
Reference in new issue
Block a user