aether-shards/test/core/GameLoop/inventory-integration.test.js

105 lines
3.3 KiB
JavaScript
Raw Permalink Normal View History

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);
});
});