33 lines
1.7 KiB
JavaScript
33 lines
1.7 KiB
JavaScript
const assert = require('node:assert/strict');
|
|
const { fixture } = require('./check-api.cjs');
|
|
(async () => {
|
|
let release;
|
|
const f = fixture(new Map(), { intercept(path, body, ok) {
|
|
if (path !== 'activityConfig/list') return false;
|
|
release = () => ok({ schemaVersion: 1, serverNow: f.info.serverTime, activities: [] });
|
|
return true;
|
|
} });
|
|
const early = f.client.readForDisplay();
|
|
const recovery = f.client.refresh();
|
|
let recovered = false;
|
|
recovery.then(() => recovered = true);
|
|
const data = await early;
|
|
await new Promise(resolve => setImmediate(resolve));
|
|
assert.equal(data.state.config.periodId, f.periodId);
|
|
assert.equal(recovered, false, 'first display does not wait for slow schedule/recovery');
|
|
assert.equal(f.calls.filter(c => c.body.action === 'info').length, 1);
|
|
assert.equal(await f.client.readForDisplay(), data, 'opening during recovery reuses first snapshot');
|
|
release(); await recovery;
|
|
assert.equal(recovered, true);
|
|
assert(f.calls.some(c => c.body.action === 'settlements'), 'background settlement still runs');
|
|
const broken = fixture(new Map(), { intercept(path, body, ok, fail) {
|
|
if (body.action !== 'info') return false;
|
|
fail('NETWORK_UNKNOWN'); return true;
|
|
} });
|
|
await assert.rejects(broken.client.readForDisplay());
|
|
broken.server.intercept = null;
|
|
assert((await broken.client.readForDisplay()).state, 'failed first read can retry');
|
|
await broken.client.refresh();
|
|
console.log('PASS: first snapshot before slow recovery, shared requests, settlement recovery and read retry');
|
|
})().catch(error => { console.error(error); process.exitCode = 1; });
|