// Generated, do not edit. sha256:bd5c51ed994108f6b5595572b397c7a62becd0a64fa6991da6b87ed3970cd81b import { describe, it, beforeEach, mock } from 'node:test'; import assert from 'node:assert/strict'; let antwoord = { cursor: 0, names: [], reset: false }; let fout = null; const gevraagd = []; const gedispatcht = []; mock.module('../../client/data/_rpc.js', { namedExports: { async rpc(module, functie, ...args) { assert.equal(module, 'bus'); assert.equal(functie, 'changesSince'); gevraagd.push(args[0]); if (fout) throw fout; return antwoord; }, dispatchChanges(namen) { gedispatcht.push(namen); return namen; }, }, }); const { pollChanges } = await import('../../client/changes.js'); beforeEach(() => { antwoord = { cursor: 0, names: [], reset: false }; fout = null; gevraagd.length = 0; gedispatcht.length = 0; }); const zetStandOp = async (n) => { antwoord = { cursor: n, names: [], reset: false }; await pollChanges(); gevraagd.length = 0; gedispatcht.length = 0; }; describe('changes: de cursor', () => { it('vraagt de allereerste keer met null, zodat er geen historie binnenkomt', async () => { antwoord = { cursor: 7, names: [], reset: false }; await pollChanges(); assert.deepEqual(gevraagd, [null]); }); it('onthoudt de stand en vraagt de volgende ronde daarmee', async () => { await zetStandOp(7); antwoord = { cursor: 9, names: ['providers-changed'], reset: false }; await pollChanges(); await pollChanges(); assert.deepEqual(gevraagd, [7, 9], 'elke ronde met wat de vorige teruggaf'); }); it('houdt zijn cursor als het antwoord er geen bevat', async () => { await zetStandOp(4); antwoord = { names: ['iets'] }; await pollChanges(); await pollChanges(); assert.deepEqual(gevraagd, [4, 4]); }); }); describe('changes: wat er gedispatcht wordt', () => { it('geeft de namen door aan het gedeelde dispatch-punt', async () => { antwoord = { cursor: 2, names: ['providers-changed', 'connections-changed'], reset: false }; await pollChanges(); assert.deepEqual(gedispatcht, [['providers-changed', 'connections-changed']]); }); it('dispatcht bij reset "ververs alles" en niet de namen', async () => { antwoord = { cursor: 12, names: [], reset: true }; await pollChanges(); assert.deepEqual(gedispatcht, [['app-refresh']]); }); it('neemt bij reset de stand wél over, zodat het niet elke ronde opnieuw gebeurt', async () => { await zetStandOp(3); antwoord = { cursor: 12, names: [], reset: true }; await pollChanges(); antwoord = { cursor: 12, names: [], reset: false }; await pollChanges(); assert.deepEqual(gevraagd, [3, 12]); }); }); describe('changes: het niet-gelukkige pad', () => { it('faalt zacht als de server weg is', async () => { fout = new Error('Geen verbinding met de server'); await assert.doesNotReject(() => pollChanges()); assert.deepEqual(gedispatcht, [], 'en er wordt niets verzonnen om te dispatchen'); }); it('houdt de cursor vast na een mislukte ronde', async () => { await zetStandOp(5); fout = new Error('weg'); await pollChanges(); fout = null; await pollChanges(); assert.deepEqual(gevraagd, [5, 5], 'de mislukte ronde heeft de stand niet weggegooid'); }); it('valt niet om op een antwoord dat geen object is', async () => { antwoord = 'onzin'; await assert.doesNotReject(() => pollChanges()); assert.deepEqual(gedispatcht, []); }); });