source: Klonkt/test/help-one-source.test.js@ 6259305

main
Last change on this file since 6259305 was 6259305, checked in by Robin <roboburr@…>, 4 weeks ago

Eén weg naar de hulpvragen: het paneel had een eigen afkap (shaer-6wt, staart)

Gevonden bij de limietinventarisatie na Barts 429-jacht. De fix van
vanochtend haalt de afkap van OPEN hulpvragen weg in helpItemsFor -- maar
de guardian-PWA had een eigen kopie van die query staan, mét LIMIT 50.
Precies de gebruiker uit die bead (de jeugdzorgmedewerker met een
caseload) zag in het PANEEL dus nog steeds open vragen wegvallen zodra er
meer dan vijftig waren.

Twee wegen naar dezelfde staat, en de fix nam er maar één -- hetzelfde
patroon dat eerder bij de reply-gate misging.

De reden dat die kopie bestond was echt: het paneel toont kaarten en had
note_url, media, quote en emoji nodig, die de queue-query niet selecteerde.
Dus draagt de bron ze nu; de queue leest ze simpelweg niet, en er is geen
aanleiding meer om opnieuw te splitsen.

Drie toetsen met een caseload van 80: alle open vragen komen door, de
bron draagt de kaartvelden, en de geschiedenis mag nog steeds afgekapt
worden. De testopstelling ving onderweg zijn eigen les: zonder echte
ward-relaties telt elke vraag als van een oud-ward en dus niet-open --
withWardship doet dat met opzet, mijn eerste opzet toetste per ongeluk
dat pad. Alle 785 groen.

Co-Authored-By: Claude Opus 5 <noreply@…>

  • Property mode set to 100644
File size: 3.2 KB
Line 
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
11import { test } from 'node:test';
12import assert from 'node:assert/strict';
13
14process.env.DATABASE_PATH = ':memory:';
15process.env.PUBLIC_BASE_URL = 'https://klonkt.test';
16
17const dbMod = await import('../src/config/database.js');
18const db = dbMod.default;
19dbMod.initializeDatabase();
20const Guardianship = await import('../src/services/guardianship/index.js');
21
22db.prepare('INSERT INTO users (id, username, email, password_hash, role) VALUES (?,?,?,?,?)')
23 .run('u1', 'u1', 'u1@test', 'x', 'god');
24db.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.
30const N = 80;
31for (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
40test('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
46test('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
55test('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});
Note: See TracBrowser for help on using the repository browser.