aether-shards/test/core/GameLoop/combat-highlights.test.js
Matthew Mone ac0f3cc396 Enhance testing and integration of inventory and character management systems
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.
2025-12-27 16:54:03 -08:00

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