import { describe, it, expect, beforeEach } from "bun:test"; import { createTestDb } from "../helpers/db.ts"; import { createItem } from "../../src/server/services/item.service.ts"; import { createCategory } from "../../src/server/services/category.service.ts"; import { getCategoryTotals, getGlobalTotals, } from "../../src/server/services/totals.service.ts"; describe("Totals Service", () => { let db: ReturnType; beforeEach(() => { db = createTestDb(); }); describe("getCategoryTotals", () => { it("returns weight sum, cost sum, item count per category", () => { const shelter = createCategory(db, { name: "Shelter", icon: "tent" }); createItem(db, { name: "Tent", weightGrams: 1200, priceCents: 35000, categoryId: shelter!.id, }); createItem(db, { name: "Tarp", weightGrams: 300, priceCents: 8000, categoryId: shelter!.id, }); const totals = getCategoryTotals(db); expect(totals).toHaveLength(1); // Only Shelter has items expect(totals[0].categoryName).toBe("Shelter"); expect(totals[0].totalWeight).toBe(1500); expect(totals[0].totalCost).toBe(43000); expect(totals[0].itemCount).toBe(2); }); it("excludes empty categories (no items)", () => { createCategory(db, { name: "Shelter", icon: "tent" }); // No items added const totals = getCategoryTotals(db); expect(totals).toHaveLength(0); }); }); describe("getGlobalTotals", () => { it("returns overall weight, cost, count", () => { createItem(db, { name: "Tent", weightGrams: 1200, priceCents: 35000, categoryId: 1, }); createItem(db, { name: "Spork", weightGrams: 20, priceCents: 500, categoryId: 1, }); const totals = getGlobalTotals(db); expect(totals).toBeDefined(); expect(totals!.totalWeight).toBe(1220); expect(totals!.totalCost).toBe(35500); expect(totals!.itemCount).toBe(2); }); it("returns zeros when no items exist", () => { const totals = getGlobalTotals(db); expect(totals).toBeDefined(); expect(totals!.totalWeight).toBe(0); expect(totals!.totalCost).toBe(0); expect(totals!.itemCount).toBe(0); }); }); });