Index: test/ward-pwa.test.js
===================================================================
--- test/ward-pwa.test.js	(revision 303bfc4daeb122010e84e14370b612f2e7e286f4)
+++ test/ward-pwa.test.js	(revision 084b046d930ee79f779d73d05b08e90d00fd684f)
@@ -118,2 +118,56 @@
   } finally { server.close(); }
 });
+
+test('de feed levert afgemaakte kaarten, niet kale content', async () => {
+  // Een post in de tijdlijn van dit kind.
+  db.prepare(`INSERT INTO ap_timeline (slug, id, author_uri, author_handle, author_name, content, url, published, created_at)
+              VALUES ('mee', 'p-1', ?, '@vriend@elders.example', 'Vriend', '<p>hallo</p>', 'https://elders.example/n/1', datetime('now'), datetime('now'))`)
+    .run('https://elders.example/ap/users/vriend');
+
+  const { server, port } = await listen(appWith({ user: { id: 'u1' } }));
+  try {
+    const r = await fetch(`http://127.0.0.1:${port}/ward/api/feed`);
+    assert.equal(r.status, 200);
+    const { items } = await r.json();
+    assert.equal(items.length, 1);
+    // De body komt AF van de server: dezelfde partial als de Krant. Alleen
+    // `content` doorgeven zou media en quote-kaarten laten verdwijnen.
+    assert.ok(items[0].bodyHtml, 'de kaart kwam zonder gerenderde body');
+    assert.ok(items[0].whenText, 'geen leesbare tijd');
+    // De id is waar de boei op mikt.
+    assert.equal(items[0].id, 'p-1');
+  } finally { server.close(); }
+});
+
+test('de boei weigert als er niemand is om te vragen', async () => {
+  // Een kind ZONDER guardians. Dan is er niets om naartoe te sturen, en dat
+  // moet het zeggen in plaats van te doen alsof er hulp onderweg is.
+  db.prepare('INSERT INTO users (id, username, email, password_hash, role) VALUES (?,?,?,?,?)')
+    .run('u2', 'alleen', 'a@t', 'x', 'user');
+  db.prepare('INSERT INTO sites (id, slug, title, owner_id) VALUES (?,?,?,?)')
+    .run('s2', 'alleen', 'Alleen', 'u2');
+
+  const { server, port } = await listen(appWith({ user: { id: 'u2' } }));
+  try {
+    const r = await fetch(`http://127.0.0.1:${port}/ward/api/help`, {
+      method: 'POST',
+      headers: { 'Content-Type': 'application/json' },
+      body: JSON.stringify({ words: 'help' }),
+    });
+    assert.equal(r.status, 409);
+    assert.equal((await r.json()).error, 'no_guardians');
+  } finally { server.close(); }
+});
+
+test('een vreemde kan de boei niet afvuren', async () => {
+  // Zonder deze poort zou iedereen namens een kind zijn guardians kunnen
+  // alarmeren.
+  const { server, port } = await listen(appWith({}));
+  try {
+    const r = await fetch(`http://127.0.0.1:${port}/ward/api/help`, {
+      method: 'POST', headers: { 'Content-Type': 'application/json' },
+      body: JSON.stringify({ words: 'x' }), redirect: 'manual',
+    });
+    assert.notEqual(r.status, 200);
+  } finally { server.close(); }
+});
