Verify recruit reward settlement

This commit is contained in:
2026-07-05 17:56:14 +09:00
parent 90dc9d0201
commit ed4cc207a6

View File

@@ -38,6 +38,7 @@ try {
setFirstBattleReport
} = await server.ssrLoadModule('/src/game/state/campaignState.ts');
const { battleScenarios } = await server.ssrLoadModule('/src/game/data/battles.ts');
const { campaignRecruitUnits } = await server.ssrLoadModule('/src/game/data/scenario.ts');
const { normalizeSortieFormationAssignments } = await server.ssrLoadModule('/src/game/data/sortieDeployment.ts');
storage.clear();
@@ -249,6 +250,43 @@ try {
`Expected max-level visit bond exp to cap instead of wrapping: ${JSON.stringify(maxedVisitState)}`
);
resetCampaignState();
const seventhScenario = battleScenarios['seventh-battle-xuzhou-rescue'];
const seventhAlliedUnits = seventhScenario.units.filter((unit) => unit.faction === 'ally');
const campaignRecruitNameById = new Map(campaignRecruitUnits.map((unit) => [unit.id, unit.name]));
const seventhRecruitRewards = (seventhScenario.campaignReward?.recruits ?? []).map((unitId) => ({
unitId,
name: campaignRecruitNameById.get(unitId) ?? unitId
}));
const seventhEquipmentRewards = seventhScenario.campaignReward?.equipment ?? [];
const seventhBattleReport = {
battleId: seventhScenario.id,
battleTitle: seventhScenario.title,
outcome: 'victory',
turnNumber: 7,
rewardGold: 180,
defeatedEnemies: 5,
totalEnemies: 8,
objectives: [],
units: seventhAlliedUnits,
bonds: seventhScenario.bonds.map((bond) => ({ ...bond, battleExp: 0 })),
itemRewards: seventhEquipmentRewards,
campaignRewards: { supplies: [], equipment: seventhEquipmentRewards, reputation: [], recruits: seventhRecruitRewards, unlocks: [] },
completedCampDialogues: [],
completedCampVisits: [],
createdAt: '2026-07-03T11:00:00.000Z'
};
setFirstBattleReport(seventhBattleReport);
setFirstBattleReport(seventhBattleReport);
const repeatedRecruitSettlement = getCampaignState();
const repeatedRecruitRosterIds = repeatedRecruitSettlement.roster.map((unit) => unit.id);
assert(
seventhRecruitRewards.every((recruit) => repeatedRecruitRosterIds.includes(recruit.unitId)) &&
seventhRecruitRewards.every((recruit) => repeatedRecruitRosterIds.filter((unitId) => unitId === recruit.unitId).length === 1) &&
repeatedRecruitSettlement.battleHistory[seventhScenario.id]?.campaignRewards?.recruits.length === seventhRecruitRewards.length,
`Expected campaign recruit rewards to merge from templates once during repeated settlement: ${JSON.stringify(repeatedRecruitSettlement)}`
);
storage.clear();
storage.set(
campaignStorageKey,