aether-shards/test/items/Item.test.js

73 lines
1.8 KiB
JavaScript

import { expect } from "@esm-bundle/chai";
import { Item } from "../../src/items/Item.js";
// Mock Unit for Requirement Checking
const mockVanguard = {
activeClassId: "CLASS_VANGUARD",
baseStats: { attack: 10, tech: 0 },
};
const mockTinker = {
activeClassId: "CLASS_TINKER",
baseStats: { attack: 5, tech: 10 },
};
describe("System: Items", () => {
let swordDef;
let techGunDef;
beforeEach(() => {
swordDef = {
id: "ITEM_TEST_SWORD",
name: "Test Sword",
type: "WEAPON",
stats: { attack: 5 },
requirements: { min_stat: { attack: 8 } },
};
techGunDef = {
id: "ITEM_TEST_GUN",
type: "WEAPON",
stats: { attack: 8 },
requirements: { class_lock: ["CLASS_TINKER"] },
};
});
it("CoA 1: Should store basic stats correctly", () => {
const item = new Item(swordDef);
expect(item.getStat("attack")).to.equal(5);
expect(item.getStat("magic")).to.equal(0); // Undefined stat
});
it("CoA 2: Should enforce Min Stat requirements", () => {
const item = new Item(swordDef);
// Vanguard has 10 Atk (Passes > 8)
expect(item.canEquip(mockVanguard)).to.be.true;
// Tinker has 5 Atk (Fails < 8)
expect(item.canEquip(mockTinker)).to.be.false;
});
it("CoA 3: Should enforce Class Lock requirements", () => {
const item = new Item(techGunDef);
// Vanguard cannot equip Tinker items
expect(item.canEquip(mockVanguard)).to.be.false;
// Tinker can
expect(item.canEquip(mockTinker)).to.be.true;
});
it("CoA 4: Should handle Active Ability grants", () => {
const kitDef = {
id: "ITEM_KIT",
type: "UTILITY",
active_ability: { ability_id: "SKILL_DEPLOY" },
};
const item = new Item(kitDef);
expect(item.activeAbility).to.exist;
expect(item.activeAbility.ability_id).to.equal("SKILL_DEPLOY");
});
});