import { describe, it, expect } from 'vitest'; import { createWorld, advance } from '../src/sim/world.js'; import { playerKnownPrices } from '../src/sim/knowledge.js'; import { playerSystem } from '../src/sim/player.js'; describe('knowledge', () => { it('knows every planet at game start via the day-0 snapshot', () => { const w = createWorld('know-test', { systemCount: 10, npcCount: 5 }); for (const planet of w.galaxy.planets) { const known = playerKnownPrices(w, planet.id); expect(known).not.toBeNull(); expect(known.time).toBe(0); expect(known.ageDays).toBe(0); } }); it('intel ages and refreshes as news travels', () => { const w = createWorld('know-test', { systemCount: 10, npcCount: 5 }); const sys = playerSystem(w); const far = w.galaxy.planets.find((p) => w.hops[sys][p.systemId] >= 2); advance(w, 5); const known = playerKnownPrices(w, far.id); const hops = w.hops[sys][far.systemId]; // freshest possible news is `hops` days old expect(known.ageDays).toBeGreaterThanOrEqual(hops - 1e-9); expect(known.ageDays).toBeLessThanOrEqual(hops + 1 + 1e-9); }); it('local planet intel is near-live', () => { const w = createWorld('know-test', { systemCount: 10, npcCount: 5 }); advance(w, 5); const local = w.galaxy.planets.find((p) => p.systemId === playerSystem(w)); expect(playerKnownPrices(w, local.id).ageDays).toBeLessThanOrEqual(1); }); it('the observe heartbeat marks co-located NPCs as seen', () => { const w = createWorld('know-test', { systemCount: 10, npcCount: 40 }); advance(w, 10); // with 40 NPCs over 10 days, some must have passed through the player's system expect(w.player.seenNpcs.size).toBeGreaterThan(0); }); });