import { expect } from "@esm-bundle/chai"; import { Enemy } from "../../src/units/Enemy.js"; describe("Unit: Enemy Class Logic", () => { it("CoA 1: Should initialize with default values when definition is minimal", () => { const def = { model: "goblin.glb" }; const enemy = new Enemy("e1", "Goblin", def); expect(enemy.id).to.equal("e1"); expect(enemy.name).to.equal("Goblin"); expect(enemy.type).to.equal("ENEMY"); // Defaults defined in class constructor expect(enemy.archetypeId).to.equal("BRUISER"); expect(enemy.aggroRange).to.equal(8); expect(enemy.voxelModelID).to.equal("goblin.glb"); }); it("CoA 2: Should hydrate stats from definition", () => { const def = { stats: { health: 200, attack: 15, speed: 5, }, }; const enemy = new Enemy("e2", "Boss", def); expect(enemy.baseStats.health).to.equal(200); expect(enemy.currentHealth).to.equal(200); // Should auto-fill current HP expect(enemy.maxHealth).to.equal(200); expect(enemy.baseStats.attack).to.equal(15); expect(enemy.baseStats.speed).to.equal(5); }); it("CoA 3: Should set specific AI and Reward properties", () => { const def = { ai_archetype: "KITER", aggro_range: 12, xp_value: 50, loot_table: "LOOT_RARE", }; const enemy = new Enemy("e3", "Sniper", def); expect(enemy.archetypeId).to.equal("KITER"); expect(enemy.aggroRange).to.equal(12); expect(enemy.xpValue).to.equal(50); expect(enemy.lootTableId).to.equal("LOOT_RARE"); }); });