Add comprehensive tests for the InventoryManager and InventoryContainer to validate item management functionalities. Implement integration tests for the CharacterSheet component, ensuring proper interaction with the inventory system. Update the Explorer class to support new inventory features and maintain backward compatibility. Refactor related components for improved clarity and performance.
104 lines
3.3 KiB
JavaScript
104 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);
|
|
});
|
|
});
|
|
|