aether-shards/test/models/InventoryContainer.test.js
Matthew Mone 2c86d674f4 Add mission debrief and procedural mission generation features
- Introduce the MissionDebrief component to display after-action reports, including XP, rewards, and squad status.
- Implement the MissionGenerator class to create procedural side missions, enhancing replayability and resource management.
- Update mission schema to include mission objects for INTERACT objectives, improving mission complexity.
- Enhance GameLoop and MissionManager to support new mission features and interactions.
- Add tests for MissionDebrief and MissionGenerator to ensure functionality and integration within the game architecture.
2026-01-01 16:08:54 -08:00

201 lines
5 KiB
JavaScript

import { expect } from "@esm-bundle/chai";
import { InventoryContainer } from "../../src/models/InventoryContainer.js";
describe("Model: InventoryContainer", () => {
let container;
beforeEach(() => {
container = new InventoryContainer("TEST_STASH");
});
describe("addItem", () => {
it("should add a new item to the container", () => {
const item = {
uid: "ITEM_001",
defId: "ITEM_RUSTY_BLADE",
isNew: true,
quantity: 1,
};
container.addItem(item);
expect(container.hasItem("ITEM_RUSTY_BLADE")).to.be.true;
expect(container.findItem("ITEM_001")).to.deep.equal(item);
});
it("should stack consumables with the same defId", () => {
const potion1 = {
uid: "ITEM_001",
defId: "ITEM_HEALTH_POTION",
isNew: false,
quantity: 1,
};
const potion2 = {
uid: "ITEM_002",
defId: "ITEM_HEALTH_POTION",
isNew: false,
quantity: 5,
};
container.addItem(potion1);
container.addItem(potion2);
const found = container.findItem("ITEM_001");
expect(found).to.exist;
expect(found.quantity).to.equal(6); // 1 + 5
expect(container.findItem("ITEM_002")).to.be.null; // Should be merged
});
it("should not stack equipment items", () => {
const sword1 = {
uid: "ITEM_001",
defId: "ITEM_RUSTY_BLADE",
isNew: false,
quantity: 1,
};
const sword2 = {
uid: "ITEM_002",
defId: "ITEM_RUSTY_BLADE",
isNew: false,
quantity: 1,
};
container.addItem(sword1);
container.addItem(sword2);
expect(container.findItem("ITEM_001")).to.exist;
expect(container.findItem("ITEM_002")).to.exist;
expect(container.findItem("ITEM_001").quantity).to.equal(1);
expect(container.findItem("ITEM_002").quantity).to.equal(1);
});
it("should cap stackable items at 99", () => {
const potion1 = {
uid: "ITEM_001",
defId: "ITEM_HEALTH_POTION",
isNew: false,
quantity: 95,
};
const potion2 = {
uid: "ITEM_002",
defId: "ITEM_HEALTH_POTION",
isNew: false,
quantity: 10,
};
container.addItem(potion1);
container.addItem(potion2);
const found = container.findItem("ITEM_001");
expect(found.quantity).to.equal(99); // Capped at 99
expect(container.findItem("ITEM_002")).to.exist; // Remaining 6 should create new stack
expect(container.findItem("ITEM_002").quantity).to.equal(6);
});
});
describe("removeItem", () => {
it("should remove an item by uid", () => {
const item = {
uid: "ITEM_001",
defId: "ITEM_RUSTY_BLADE",
isNew: false,
quantity: 1,
};
container.addItem(item);
expect(container.findItem("ITEM_001")).to.exist;
container.removeItem("ITEM_001");
expect(container.findItem("ITEM_001")).to.be.null;
});
it("should return the removed item", () => {
const item = {
uid: "ITEM_001",
defId: "ITEM_RUSTY_BLADE",
isNew: false,
quantity: 1,
};
container.addItem(item);
const removed = container.removeItem("ITEM_001");
expect(removed).to.deep.equal(item);
});
it("should return null if item not found", () => {
const removed = container.removeItem("NONEXISTENT");
expect(removed).to.be.null;
});
});
describe("hasItem", () => {
it("should return true if item with defId exists", () => {
const item = {
uid: "ITEM_001",
defId: "ITEM_RUSTY_BLADE",
isNew: false,
quantity: 1,
};
container.addItem(item);
expect(container.hasItem("ITEM_RUSTY_BLADE")).to.be.true;
});
it("should return false if item with defId does not exist", () => {
expect(container.hasItem("ITEM_NONEXISTENT")).to.be.false;
});
});
describe("findItem", () => {
it("should find item by uid", () => {
const item = {
uid: "ITEM_001",
defId: "ITEM_RUSTY_BLADE",
isNew: false,
quantity: 1,
};
container.addItem(item);
const found = container.findItem("ITEM_001");
expect(found).to.deep.equal(item);
});
it("should return null if item not found", () => {
const found = container.findItem("NONEXISTENT");
expect(found).to.be.null;
});
});
describe("getAllItems", () => {
it("should return all items in the container", () => {
const item1 = {
uid: "ITEM_001",
defId: "ITEM_RUSTY_BLADE",
isNew: false,
quantity: 1,
};
const item2 = {
uid: "ITEM_002",
defId: "ITEM_SCRAP_PLATE",
isNew: false,
quantity: 1,
};
container.addItem(item1);
container.addItem(item2);
const allItems = container.getAllItems();
expect(allItems).to.have.length(2);
expect(allItems).to.deep.include(item1);
expect(allItems).to.deep.include(item2);
});
});
});