105 lines
3.3 KiB
JavaScript
105 lines
3.3 KiB
JavaScript
|
|
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);
|
||
|
|
});
|
||
|
|
});
|
||
|
|
|