diff --git a/apps/api/src/services/prestige.ts b/apps/api/src/services/prestige.ts index 3cd69af..27cd75a 100644 --- a/apps/api/src/services/prestige.ts +++ b/apps/api/src/services/prestige.ts @@ -215,7 +215,10 @@ const buildPostPrestigeState = ( const currentBoss = currentState.bosses.find((candidate) => { return candidate.id === freshBoss.id; }); - if (currentBoss?.bountyRunestonesClaimed === true) { + if ( + currentBoss?.bountyRunestonesClaimed === true + || currentBoss?.status === "defeated" + ) { return { ...freshBoss, bountyRunestonesClaimed: true }; } return freshBoss; diff --git a/apps/api/test/services/prestige.spec.ts b/apps/api/test/services/prestige.spec.ts index cbff3d0..40657a2 100644 --- a/apps/api/test/services/prestige.spec.ts +++ b/apps/api/test/services/prestige.spec.ts @@ -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",