| 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.
|
|---|
| 12 | import { test } from 'node:test';
|
|---|
| 13 | import assert from 'node:assert/strict';
|
|---|
| 14 |
|
|---|
| 15 | process.env.DATABASE_PATH = ':memory:';
|
|---|
| 16 | process.env.PUBLIC_BASE_URL = 'https://oma.test';
|
|---|
| 17 |
|
|---|
| 18 | const dbMod = await import('../src/config/database.js');
|
|---|
| 19 | const db = dbMod.default;
|
|---|
| 20 | dbMod.initializeDatabase();
|
|---|
| 21 | const rel = await import('../src/services/guardianship/relations.js');
|
|---|
| 22 | const G = await import('../src/services/guardianship/index.js');
|
|---|
| 23 |
|
|---|
| 24 | db.prepare('INSERT INTO users (id, username, email, password_hash, role) VALUES (?,?,?,?,?)')
|
|---|
| 25 | .run('u1', 'u1', 'u1@t', 'x', 'god');
|
|---|
| 26 | db.prepare('INSERT INTO sites (id, slug, title, owner_id) VALUES (?,?,?,?)').run('s1', 'oma', 'Oma', 'u1');
|
|---|
| 27 |
|
|---|
| 28 | const KIND = 'https://elders.test/ap/users/mee';
|
|---|
| 29 |
|
|---|
| 30 | test('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.
|
|---|
| 39 | const gevraagd = [];
|
|---|
| 40 | G.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 |
|
|---|
| 51 | test('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 |
|
|---|
| 57 | test('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 | });
|
|---|