| * | Reconcile rows earn a real detail page: date, amount, and every consumed coin... | Adam Soltys | 2026-09-03lass="nx">assert.rejects(buildSnapshot(async () => []), /No public posts/);
let time = 1000, builds = 0, finish;
const cache = createSnapshotCache({ now: () => time, build: () => { builds++; return new Promise((resolve) => { finish = resolve; }); } });
const request = new Request('http://localhost/api/feed');
assert.equal(snapshotResponse(cache, request).status, 503);
for (let i = 0; i < 100; i++) assert.equal(cache.read(), null);
await Promise.resolve();
assert.equal(builds, 1, 'cold visitors share one build');
finish(snapshot);
await cache.refresh();
assert.equal(cache.read(), snapshot);
assert.equal(snapshotResponse(cache, request).status, 200);
assert.equal(snapshotResponse(cache, new Request(request, { method: 'POST' })).status, 405);
assert.equal(await snapshotResponse(cache, new Request(request, { method: 'HEAD' })).text(), '');
time += 61_000;
for (let i = 0; i < 100; i++) assert.equal(cache.read(), snapshot);
await Promise.resolve();
assert.equal(builds, 2, 'stale visitors share one background build');
finish({ ...snapshot, generatedAt: time });
await cache.refresh();
assert.equal(cache.read().generatedAt, time);
let failures = 0;
const failing = createSnapshotCache({ initial: snapshot, now: () => time, build: async () => { failures++; throw Error('offline'); }, onError: () => {} });
assert.equal(failing.read(), snapshot);
await failing.refresh();
assert.equal(failing.read(), snapshot);
await failing.refresh();
assert.equal(failures, 1, 'failed refreshes are throttled and preserve stale data');
time += 86400_000;
assert.equal(failing.read(), null, 'expired snapshots are not served');
await failing.refresh();
console.log('✓ public feed selection, profiles, single flight, stale refresh, failure recovery, expiry and HTTP behavior');
|