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.
94 lines
2.6 KiB
JavaScript
94 lines
2.6 KiB
JavaScript
import { expect } from "@esm-bundle/chai";
|
|
import * as THREE from "three";
|
|
import { GameLoop } from "../../../src/core/GameLoop.js";
|
|
import {
|
|
createGameLoopSetup,
|
|
cleanupGameLoop,
|
|
createRunData,
|
|
createMockGameStateManagerForCombat,
|
|
setupCombatUnits,
|
|
cleanupTurnSystem,
|
|
} from "./helpers.js";
|
|
|
|
describe("Core: GameLoop - Combat Highlights", function () {
|
|
this.timeout(30000);
|
|
|
|
let gameLoop;
|
|
let container;
|
|
let mockGameStateManager;
|
|
let playerUnit;
|
|
let enemyUnit;
|
|
|
|
beforeEach(async () => {
|
|
const setup = createGameLoopSetup();
|
|
gameLoop = setup.gameLoop;
|
|
container = setup.container;
|
|
|
|
// Clean up any existing state first
|
|
if (gameLoop.turnSystemAbortController) {
|
|
gameLoop.turnSystemAbortController.abort();
|
|
}
|
|
gameLoop.stop();
|
|
|
|
if (
|
|
gameLoop.turnSystem &&
|
|
typeof gameLoop.turnSystem.reset === "function"
|
|
) {
|
|
gameLoop.turnSystem.reset();
|
|
}
|
|
|
|
gameLoop.init(container);
|
|
mockGameStateManager = createMockGameStateManagerForCombat();
|
|
gameLoop.gameStateManager = mockGameStateManager;
|
|
|
|
const runData = createRunData({
|
|
squad: [{ id: "u1", classId: "CLASS_VANGUARD" }],
|
|
});
|
|
await gameLoop.startLevel(runData, { startAnimation: false });
|
|
|
|
const units = setupCombatUnits(gameLoop);
|
|
playerUnit = units.playerUnit;
|
|
enemyUnit = units.enemyUnit;
|
|
});
|
|
|
|
afterEach(async () => {
|
|
// Clear highlights first to free Three.js resources
|
|
gameLoop.clearMovementHighlights();
|
|
gameLoop.clearSpawnZoneHighlights();
|
|
|
|
cleanupTurnSystem(gameLoop);
|
|
cleanupGameLoop(gameLoop, container);
|
|
|
|
// Small delay to allow cleanup to complete
|
|
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
});
|
|
|
|
it("CoA 6: should not show movement highlights for enemy units", () => {
|
|
mockGameStateManager.getCombatState.returns({
|
|
activeUnit: {
|
|
id: enemyUnit.id,
|
|
name: enemyUnit.name,
|
|
},
|
|
turnQueue: [],
|
|
});
|
|
|
|
gameLoop.updateMovementHighlights(enemyUnit);
|
|
expect(gameLoop.movementHighlights.size).to.equal(0);
|
|
});
|
|
|
|
it("CoA 7: should clear movement highlights when not in combat", () => {
|
|
mockGameStateManager.getCombatState.returns({
|
|
activeUnit: {
|
|
id: playerUnit.id,
|
|
name: playerUnit.name,
|
|
},
|
|
turnQueue: [],
|
|
});
|
|
gameLoop.updateMovementHighlights(playerUnit);
|
|
expect(gameLoop.movementHighlights.size).to.be.greaterThan(0);
|
|
|
|
mockGameStateManager.currentState = "STATE_DEPLOYMENT";
|
|
gameLoop.updateMovementHighlights(playerUnit);
|
|
expect(gameLoop.movementHighlights.size).to.equal(0);
|
|
});
|
|
});
|