fix: preserve bounty flag for bosses defeated before flag was introduced
Security Scan and Upload / Security & DefectDojo Upload (pull_request) Successful in 1m1s
CI / Lint, Build & Test (pull_request) Successful in 1m8s

Bosses killed before `bountyRunestonesClaimed` was added to the codebase
had `status: "defeated"` but the field undefined. After prestige, the
preservation check (`=== true`) missed these, so the bounty was re-awarded
next run. Now also treat `status === "defeated"` as proof the bounty was
already earned.

Closes #52
This commit is contained in:
2026-03-18 13:31:30 -07:00
committed by Naomi Carrigan
parent 744cbf121f
commit 05c0faa432
2 changed files with 30 additions and 1 deletions
+26
View File
@@ -319,6 +319,32 @@ describe("buildPostPrestigeState", () => {
expect(matchingBoss?.bountyRunestonesClaimed).toBe(true);
});
it("sets bountyRunestonesClaimed on bosses defeated before the flag was introduced", () => {
const legacyDefeatedBoss = {
bountyRunestones: 5,
crystalReward: 0,
currentHp: 0,
damagePerSecond: 10,
description: "A boss",
equipmentRewards: [] as string[],
essenceReward: 0,
goldReward: 100,
id: "troll_king",
maxHp: 100,
name: "Troll King",
prestigeRequirement: 0,
status: "defeated" as const,
upgradeRewards: [] as string[],
zoneId: "verdant_vale",
};
const state = makeMinimalState({ bosses: [ legacyDefeatedBoss ] as GameState["bosses"] });
const { prestigeState } = buildPostPrestigeState(state, "Tester");
const matchingBoss = prestigeState.bosses.find((boss) => {
return boss.id === "troll_king";
});
expect(matchingBoss?.bountyRunestonesClaimed).toBe(true);
});
it("accumulates completed quests into lifetime total", () => {
const quest = {
id: "q_1",