Test repeated pirate broadside damage

This commit is contained in:
Admin 2026-09-18 01:11:12 +00:00
parent 0ca8ffdd90
commit 8373bc0d2e

View File

@ -8,6 +8,7 @@ import {
normalizePlayerDamage, normalizePlayerDamage,
processQueuedPlayerHits, processQueuedPlayerHits,
reducePlayerHitQueue, reducePlayerHitQueue,
reducePlayerVolleyHits,
} from '../src/game-logic.js'; } from '../src/game-logic.js';
test('first pirate hit removes exactly the default damage and does not end the game', () => { 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.ignoredHits, 0);
assert.equal(result.gameOver, false); 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);
});