| 1 | // Eén weg naar de hulpvragen (Barts 429-jacht, 9-8).
|
|---|
| 2 | //
|
|---|
| 3 | // De PWA had een eigen kopie van de queue-query MET een afkap op 50, dus de
|
|---|
| 4 | // fix die open vragen nooit meer afkapt (shaer-6wt) ging aan het paneel
|
|---|
| 5 | // voorbij: juist de guardian met een caseload -- de jeugdzorgmedewerker uit
|
|---|
| 6 | // die bead -- zag oude open vragen wegvallen. Dit legt vast dat er één bron
|
|---|
| 7 | // is, dat die bron alles draagt wat een kaart nodig heeft, en dat open vragen
|
|---|
| 8 | // ook boven de 50 blijven staan.
|
|---|
| 9 | //
|
|---|
| 10 | // In-memory SQLite. Run: npm test
|
|---|
| 11 | import { test } from 'node:test';
|
|---|
| 12 | import assert from 'node:assert/strict';
|
|---|
| 13 |
|
|---|
| 14 | process.env.DATABASE_PATH = ':memory:';
|
|---|
| 15 | process.env.PUBLIC_BASE_URL = 'https://klonkt.test';
|
|---|
| 16 |
|
|---|
| 17 | const dbMod = await import('../src/config/database.js');
|
|---|
| 18 | const db = dbMod.default;
|
|---|
| 19 | dbMod.initializeDatabase();
|
|---|
| 20 | const Guardianship = await import('../src/services/guardianship/index.js');
|
|---|
| 21 |
|
|---|
| 22 | db.prepare('INSERT INTO users (id, username, email, password_hash, role) VALUES (?,?,?,?,?)')
|
|---|
| 23 | .run('u1', 'u1', 'u1@test', 'x', 'god');
|
|---|
| 24 | db.prepare('INSERT INTO sites (id, slug, title, owner_id) VALUES (?,?,?,?)').run('s1', 'zorg', 'Zorg', 'u1');
|
|---|
| 25 |
|
|---|
| 26 | // Een caseload: 80 hulpvragen van 80 ECHTE wards, allemaal open. Ruim boven
|
|---|
| 27 | // de oude afkap. De relaties moeten er zijn: withWardship sluit een vraag van
|
|---|
| 28 | // een oud-ward bewust (die is niet meer van jou), en zonder relatie zou dit
|
|---|
| 29 | // dus per ongeluk het oud-ward-pad toetsen in plaats van de afkap.
|
|---|
| 30 | const N = 80;
|
|---|
| 31 | for (let i = 0; i < N; i++) {
|
|---|
| 32 | db.prepare(`INSERT INTO ap_guardianships (slug, role, other_uri, status)
|
|---|
| 33 | VALUES ('zorg', 'guardian', ?, 'accepted')`).run(`https://elders/u/w${i}`);
|
|---|
| 34 | db.prepare(`INSERT INTO ap_mentions (slug, object_uri, note_url, actor_uri, actor_name, content, help_request, media_json, created_at)
|
|---|
| 35 | VALUES ('zorg', ?, ?, ?, ?, ?, 1, ?, datetime('now', ?))`)
|
|---|
| 36 | .run(`https://elders/n${i}`, `https://elders/p${i}`, `https://elders/u/w${i}`, `Ward ${i}`,
|
|---|
| 37 | `<p>hulp ${i}</p>`, '[{"url":"https://elders/plaatje.png","type":"image/png"}]', `-${i} minutes`);
|
|---|
| 38 | }
|
|---|
| 39 |
|
|---|
| 40 | test('alle open hulpvragen komen door, ook ver boven de oude afkap van 50', () => {
|
|---|
| 41 | const items = Guardianship.queues.helpItemsFor('zorg');
|
|---|
| 42 | const open = items.filter((h) => h.state.open);
|
|---|
| 43 | assert.equal(open.length, N, `alle ${N} open vragen, niet ${open.length}`);
|
|---|
| 44 | });
|
|---|
| 45 |
|
|---|
| 46 | test('de bron draagt wat een kaart nodig heeft (de reden dat de PWA een kopie had)', () => {
|
|---|
| 47 | const eerste = Guardianship.queues.helpItemsFor('zorg')[0];
|
|---|
| 48 | // Precies de velden waarvoor het paneel zijn eigen query hield.
|
|---|
| 49 | for (const veld of ['note_url', 'media_json', 'quote_json', 'embed_json', 'emoji_json', 'actor_emoji_json']) {
|
|---|
| 50 | assert.ok(veld in eerste, `${veld} ontbreekt -- dan splitst de query zich opnieuw`);
|
|---|
| 51 | }
|
|---|
| 52 | assert.equal(eerste.note_url, 'https://elders/p0');
|
|---|
| 53 | });
|
|---|
| 54 |
|
|---|
| 55 | test('afgehandelde vragen worden WEL afgekapt: geschiedenis vraagt niets', () => {
|
|---|
| 56 | // Zet alles op afgehandeld door een handled-notitie te plaatsen? Dat is de
|
|---|
| 57 | // weg van help.statusFor; hier volstaat de vorm: met historyLimit 5 mogen
|
|---|
| 58 | // er hoogstens 5 gesloten vragen mee, terwijl open er altijd allemaal zijn.
|
|---|
| 59 | const items = Guardianship.queues.helpItemsFor('zorg', 5);
|
|---|
| 60 | assert.equal(items.filter((h) => h.state.open).length, N);
|
|---|
| 61 | assert.ok(items.filter((h) => !h.state.open).length <= 5);
|
|---|
| 62 | });
|
|---|