import conditions from "./unlockConditions.json"; import levels from "./levels.json"; import { rawUpgrades } from "../upgrades"; import { getLevelUnlockCondition } from "../get_level_unlock_condition"; import { UnlockCondition } from "../types"; describe("conditions", () => { it("defines conditions for existing levels only", () => { const conditionForMissingLevel = Object.keys(conditions).filter( (levelName) => !levels.find((l) => l.name === levelName), ); expect(conditionForMissingLevel).toEqual([]); }); it("defines conditions with existing upgrades only", () => { const existingIds: Set = new Set(rawUpgrades.map((u) => u.id)); const missing: Set = new Set(); Object.values(conditions).forEach(({ required, forbidden }) => { [...required, ...forbidden].forEach((id) => { if (!existingIds.has(id)) missing.add(id); }); }); expect([...missing]).toEqual([]); }); it("defines conditions for all levels", () => { const toAdd: Record = {}; levels .filter((l) => !l.name.startsWith("icon:")) .forEach((l, li) => { if (l.name in conditions) return; toAdd[l.name] = getLevelUnlockCondition(li, l.name); }); if (Object.keys(toAdd).length) { console.debug( "Missing hardcoded conditons\n\n" + JSON.stringify(toAdd).slice(1, -1) + "\n\n", ); } expect(Object.keys(toAdd)).toEqual([]); }); });