import { describe, expect, it } from 'vitest'; import { SSE_PACKAGE_STATUSES, sseFrame, type PackageState, type StateSnapshot } from './state'; // ISS-133 (v0.59.0) — the SSE projection keeps only the package statuses any component renders. const pkg = (status: PackageState['status'], id: string): PackageState => ({ id, originIcao: 'LEMD', originName: 'Madrid–Barajas', destIcao: 'EHAM', destName: 'Amsterdam Schiphol', reward: 1000, cargoType: 'mail', cargoCount: 3, weightKg: 900, special: null, expiresRealMs: status === 'open' ? 2_000_000 : null, // v0.65.0 — open jobs carry their wall-clock expiry distanceKm: 2000, deadlineSimTime: 1_000_000, status, planeId: null, createdSimTime: 0, }); const snapshot = (packages: PackageState[]): StateSnapshot => ({ account: { cash: 20_000, reputation: 1 }, simState: { clockMs: 42 }, catalog: [], fuelPricePerL: 0.8, sellFraction: 0.5, planes: [], packages, }); describe('sseFrame', () => { it('keeps exactly the open/loaded/expired packages and drops terminal history', () => { const all = [ pkg('open', 'p-open'), pkg('delivered', 'p-delivered'), pkg('loaded', 'p-loaded'), pkg('abandoned', 'p-abandoned'), pkg('expired', 'p-expired'), pkg('ignored', 'p-ignored'), ]; const frame = sseFrame(snapshot(all)); expect(frame.packages.map((p) => p.id)).toEqual(['p-open', 'p-loaded', 'p-expired']); }); it('passes the rest of the snapshot through untouched and does not mutate its input', () => { const all = [pkg('open', 'a'), pkg('delivered', 'b')]; const snap = snapshot(all); const frame = sseFrame(snap); expect(frame.account).toEqual({ cash: 20_000, reputation: 1 }); expect(frame.simState).toEqual({ clockMs: 42 }); expect(frame.planes).toEqual([]); expect(all.map((p) => p.status)).toContain('delivered'); // input intact }); it('SSE_PACKAGE_STATUSES matches what the client renders (open market, on-board cargo)', () => { expect([...SSE_PACKAGE_STATUSES].sort()).toEqual(['expired', 'loaded', 'open']); }); });