import { describe, expect, it } from "vitest"; import { sampleContentPack } from "@/data/sampleContentPack"; import { createStartingAdventurer } from "./character"; import { createRunState } from "./runState"; import { queueTreasureForSale, sellPendingTreasure, sendTreasureToStash } from "./town"; function createAdventurer() { return createStartingAdventurer(sampleContentPack, { name: "Aster", weaponId: "weapon.short-sword", armourId: "armour.leather-vest", scrollId: "scroll.lesser-heal", }); } describe("town flow", () => { it("moves treasure from carried inventory into the stash", () => { const run = createRunState({ content: sampleContentPack, campaignId: "campaign.1", adventurer: createAdventurer(), }); run.adventurerSnapshot.inventory.carried.push({ definitionId: "item.silver-clasp", quantity: 1, }); const result = sendTreasureToStash( sampleContentPack, run, "item.silver-clasp", "2026-03-15T15:00:00.000Z", ); expect(result.run.townState.stash).toEqual([ { definitionId: "item.silver-clasp", quantity: 1 }, ]); expect(result.run.adventurerSnapshot.inventory.carried).not.toEqual( expect.arrayContaining([expect.objectContaining({ definitionId: "item.silver-clasp" })]), ); }); it("queues treasure and sells it for item value", () => { const run = createRunState({ content: sampleContentPack, campaignId: "campaign.1", adventurer: createAdventurer(), }); run.adventurerSnapshot.inventory.carried.push({ definitionId: "item.keeper-keyring", quantity: 1, }); const queued = queueTreasureForSale( sampleContentPack, run, "item.keeper-keyring", "2026-03-15T15:05:00.000Z", ).run; const sold = sellPendingTreasure( sampleContentPack, queued, "2026-03-15T15:06:00.000Z", ).run; expect(sold.townState.pendingSales).toEqual([]); expect(sold.adventurerSnapshot.inventory.currency.gold).toBe(5); expect(sold.log.at(-1)?.text).toContain("for 5 gold"); }); });