import { expect } from "@esm-bundle/chai"; import { GameLoop } from "../../../src/core/GameLoop.js"; import { createGameLoopSetup, cleanupGameLoop, createRunData, } from "./helpers.js"; describe("Core: GameLoop - Inventory Integration", function () { this.timeout(30000); let gameLoop; let container; beforeEach(() => { const setup = createGameLoopSetup(); gameLoop = setup.gameLoop; container = setup.container; }); afterEach(() => { cleanupGameLoop(gameLoop, container); }); it("CoA 1: init() should initialize inventoryManager", () => { gameLoop.init(container); expect(gameLoop.inventoryManager).to.exist; expect(gameLoop.inventoryManager.runStash).to.exist; expect(gameLoop.inventoryManager.hubStash).to.exist; expect(gameLoop.inventoryManager.runStash.id).to.equal("RUN_LOOT"); expect(gameLoop.inventoryManager.hubStash.id).to.equal("HUB_VAULT"); }); it("CoA 2: inventoryManager should have itemRegistry reference", () => { gameLoop.init(container); expect(gameLoop.inventoryManager.itemRegistry).to.exist; expect(gameLoop.inventoryManager.itemRegistry.get).to.be.a("function"); }); it("CoA 3: startLevel() should load items if not already loaded", async () => { gameLoop.init(container); const runData = createRunData(); await gameLoop.startLevel(runData, { startAnimation: false }); // Items should be loaded (check that registry has items) // The itemRegistry is the singleton instance, so we need to check it directly const itemRegistry = gameLoop.inventoryManager.itemRegistry; expect(itemRegistry).to.exist; // Try to get an item - if items are loaded, this should work const item = itemRegistry.get("ITEM_RUSTY_BLADE"); // Item might not exist in tier1_gear, so just check registry is functional expect(itemRegistry.get).to.be.a("function"); }); it("CoA 4: inventoryManager should persist across level restarts", async () => { gameLoop.init(container); const runData = createRunData(); await gameLoop.startLevel(runData, { startAnimation: false }); const initialManager = gameLoop.inventoryManager; const initialRunStash = gameLoop.inventoryManager.runStash; // Add an item to run stash const testItem = { uid: "TEST_ITEM_001", defId: "ITEM_RUSTY_BLADE", isNew: true, quantity: 1, }; initialRunStash.addItem(testItem); // Start a new level await gameLoop.startLevel(runData, { startAnimation: false }); // Manager should be the same instance expect(gameLoop.inventoryManager).to.equal(initialManager); // Run stash should be the same (persists across levels) expect(gameLoop.inventoryManager.runStash).to.equal(initialRunStash); // Item should still be there expect(gameLoop.inventoryManager.runStash.findItem("TEST_ITEM_001")).to.exist; }); it("CoA 5: runStash should be accessible for looting", () => { gameLoop.init(container); const testItem = { uid: "LOOT_001", defId: "ITEM_SCRAP_PLATE", isNew: true, quantity: 1, }; gameLoop.inventoryManager.runStash.addItem(testItem); expect(gameLoop.inventoryManager.runStash.hasItem("ITEM_SCRAP_PLATE")).to.be.true; expect(gameLoop.inventoryManager.runStash.findItem("LOOT_001")).to.deep.equal(testItem); }); });