Files
AtreidesAssetsFree/tests/ui/changes.test.mjs
T
2026-10-29 11:57:29 +01:00

108 lines
3.4 KiB
JavaScript

// 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, []);
});
});