source: Klonkt/test/help-mark-coguardians.test.js@ abbb72a

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

De markering bereikte de mede-guardian nooit (shaer-lgo)

Gevonden door met de ECHTE relatie te kijken in plaats van met een test.
dev.klonkt.com is guardian van @mee@…, en zij heeft er
nog een: boiert.eu. In ap_help_state staan vier afgehandelde hulpvragen van haar
-- en elke markering is van dev zelf. Nooit een van boiert, en dev heeft er ook
nooit een naartoe gestuurd.

De oorzaak stond in de markeerroute:

listGuardians(wardUri.replace(/.*\/ap\/users\, ))

De staart van de URI als slug. listGuardians kent alleen relaties van LOKALE
sites, dus voor een ward elders was dat altijd een lege lijst. Nagemeten op dev:
de regex geeft "mee", er is geen site "mee", de lijst is leeg. De markering ging
dus alleen naar het kind.

En juist die ward is het hele punt: een ward op je eigen instance heeft geen
federatie nodig. Dit is precies de faalstand waar deze bead voor bestaat --
iedereen denkt dat de ander het oppakt -- en hij was stil, want er komt geen
fout uit een lege lijst.

Erger nog: had er toevallig een lokale site met die naam bestaan, dan waren het
DIENS guardians geweest.

existingGuardiansOf in handshake.js kende de goede weg al: lokaal opzoeken, en
anders shaer:guardians uit de actor van de ward. Die stond alleen niet aan deze
route vast. Nu geexporteerd en aangesloten -- geen tweede afleiding erbij, de
bestaande gebruikt.

Drie tests, met de oude fout als eerste erin vastgelegd zodat hij niet
terugsluipt. De actor wordt met een nepversie opgehaald: anders test het of de
testmachine internet heeft.

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

  • Property mode set to 100644
File size: 3.1 KB
Line 
1// De markering hoort naar de MEDE-GUARDIANS te gaan (shaer-lgo).
2//
3// Gevonden op 11 augustus met de echte relatie: dev.klonkt.com is guardian van
4// @mee@xn--zz9h.is.wildenvrij.nl, en die heeft er nog een -- boiert.eu. In
5// ap_help_state stond geen enkele markering van boiert, en dev had er ook nooit
6// een naartoe gestuurd.
7//
8// De oorzaak: de route leidde de mede-guardians af met
9// listGuardians(uri.replace(/.*\/ap\/users\//, '')) -- de staart van de URI als
10// slug. listGuardians kent alleen relaties van LOKALE sites, dus voor een ward
11// elders was dat altijd leeg. En juist die ward is het punt.
12import { test } from 'node:test';
13import assert from 'node:assert/strict';
14
15process.env.DATABASE_PATH = ':memory:';
16process.env.PUBLIC_BASE_URL = 'https://oma.test';
17
18const dbMod = await import('../src/config/database.js');
19const db = dbMod.default;
20dbMod.initializeDatabase();
21const rel = await import('../src/services/guardianship/relations.js');
22const G = await import('../src/services/guardianship/index.js');
23
24db.prepare('INSERT INTO users (id, username, email, password_hash, role) VALUES (?,?,?,?,?)')
25 .run('u1', 'u1', 'u1@t', 'x', 'god');
26db.prepare('INSERT INTO sites (id, slug, title, owner_id) VALUES (?,?,?,?)').run('s1', 'oma', 'Oma', 'u1');
27
28const KIND = 'https://elders.test/ap/users/mee';
29
30test('de oude afleiding gaf leeg voor een ward elders -- de fout, vastgelegd', () => {
31 // Wat er stond: de staart van de URI als slug. Er is geen lokale site 'mee',
32 // dus dit was altijd een lege lijst, en de markering ging alleen naar het kind.
33 assert.deepEqual(rel.listGuardians(KIND.replace(/.*\/ap\/users\//, '')), []);
34});
35
36// De handshake krijgt zijn afhankelijkheden normaal bij het opstarten; hier
37// alleen de twee die existingGuardiansOf raakt, met een NEPACTOR in plaats van
38// het netwerk -- anders test dit of de testmachine internet heeft.
39const gevraagd = [];
40G.wireHandshake({
41 localSlug: (uri) => {
42 const m = String(uri).match(/^https:\/\/oma\.test\/ap\/users\/([^/?#]+)$/);
43 return m ? m[1] : null;
44 },
45 fetchActor: async (uri) => {
46 gevraagd.push(uri);
47 return { id: uri, 'shaer:guardians': ['https://oma.test/ap/users/oma', 'https://elders2.test/ap/users/oom'] };
48 },
49});
50
51test('voor een ward ELDERS komen ze uit shaer:guardians van zijn actor', async () => {
52 const uit = await G.existingGuardiansOf(KIND);
53 assert.deepEqual(gevraagd, [KIND], 'de actor van de ward wordt opgehaald');
54 assert.deepEqual(uit, ['https://oma.test/ap/users/oma', 'https://elders2.test/ap/users/oom']);
55});
56
57test('voor een LOKALE ward blijft het de eigen tabel', async () => {
58 db.prepare('INSERT INTO sites (id, slug, title, owner_id) VALUES (?,?,?,?)').run('s2', 'kind', 'Kind', 'u1');
59 rel.commitGuardianForWard('kind', 'https://oma.test/ap/users/oma', { handle: '@oma@oma.test' });
60 const voor = gevraagd.length;
61 const uit = await G.existingGuardiansOf('https://oma.test/ap/users/kind');
62 assert.deepEqual(uit, ['https://oma.test/ap/users/oma'],
63 'lokaal opzoeken blijft werken -- de fix mag dat pad niet slopen');
64 assert.equal(gevraagd.length, voor, 'en haalt geen actor op die we zelf hosten');
65});
Note: See TracBrowser for help on using the repository browser.