From 8373bc0d2e13bce0ddec17e871cc52e30f40e8d4 Mon Sep 17 00:00:00 2001 From: Admin Date: Fri, 18 Sep 2026 01:11:12 +0000 Subject: [PATCH] Test repeated pirate broadside damage --- tests/game-logic.test.mjs | 57 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/tests/game-logic.test.mjs b/tests/game-logic.test.mjs index a4f0420..369ac25 100644 --- a/tests/game-logic.test.mjs +++ b/tests/game-logic.test.mjs @@ -8,6 +8,7 @@ import { normalizePlayerDamage, processQueuedPlayerHits, reducePlayerHitQueue, + reducePlayerVolleyHits, } from '../src/game-logic.js'; test('first pirate hit removes exactly the default damage and does not end the game', () => { @@ -145,3 +146,59 @@ test('empty hit queue is a no-op', () => { assert.equal(result.ignoredHits, 0); assert.equal(result.gameOver, false); }); + +test('one pirate broadside damages once, and the next broadside damages again', () => { + const firstVolley = reducePlayerVolleyHits({ + hull: 100, + hits: [ + { volleyId: 101, damage: 6 }, + { volleyId: 101, damage: 6 }, + { volleyId: 101, damage: 6 }, + ], + }); + + assert.equal(firstVolley.hull, 94); + assert.equal(firstVolley.totalDamage, 6); + assert.equal(firstVolley.acceptedHits.length, 1); + assert.equal(firstVolley.ignoredHits.length, 2); + + const secondVolley = reducePlayerVolleyHits({ + hull: firstVolley.hull, + seenVolleyIds: firstVolley.seenVolleyIds, + hits: [ + { volleyId: 102, damage: 6 }, + { volleyId: 102, damage: 6 }, + ], + }); + + assert.equal(secondVolley.hull, 88); + assert.equal(secondVolley.totalDamage, 6); + assert.equal(secondVolley.acceptedHits.length, 1); + assert.equal(secondVolley.ignoredHits.length, 1); + + const repeatedSecondVolley = reducePlayerVolleyHits({ + hull: secondVolley.hull, + seenVolleyIds: secondVolley.seenVolleyIds, + hits: [{ volleyId: 102, damage: 6 }], + }); + + assert.equal(repeatedSecondVolley.hull, 88); + assert.equal(repeatedSecondVolley.totalDamage, 0); + assert.equal(repeatedSecondVolley.acceptedHits.length, 0); + assert.equal(repeatedSecondVolley.ignoredHits.length, 1); +}); + +test('different pirate volleys can both damage even when processed together', () => { + const result = reducePlayerVolleyHits({ + hull: 100, + hits: [ + { volleyId: 201, damage: 6 }, + { volleyId: 202, damage: 6 }, + ], + }); + + assert.equal(result.hull, 88); + assert.equal(result.totalDamage, 12); + assert.equal(result.acceptedHits.length, 2); + assert.equal(result.ignoredHits.length, 0); +});