- Timestamp:
- 08/12/2026 09:16:09 PM (3 months ago)
- Children:
- 39dab6b
- Parents:
- 5412cbb
- File:
-
- 1 edited
-
test/ward-pwa.test.js (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
test/ward-pwa.test.js
r5412cbb r2086ea2 247 247 } finally { server.close(); } 248 248 }); 249 250 test('de compose-poort geldt ook voor de web-ward', async () => { 251 // mee IS een ward (heeft guardians), dus compose is gated. De web-composer 252 // gaat door DEZELFDE poort als de app (ingestOutboxActivity), dus hij wordt 253 // net zo tegengehouden. Zonder deze gelijkheid zou de browser een sluiproute 254 // om de guardians heen zijn. 255 const { server, port } = await listen(appWith({ user: { id: 'u1' } })); 256 try { 257 const r = await fetch(`http://127.0.0.1:${port}/ward/api/post`, { 258 method: 'POST', headers: { 'Content-Type': 'application/json' }, 259 body: JSON.stringify({ text: 'mag dit', visibility: 'friends' }), 260 }); 261 assert.equal(r.status, 403); 262 assert.equal((await r.json()).error, 'gated_compose'); 263 } finally { server.close(); } 264 }); 265 266 test('een niet-gated account plaatst met media', async () => { 267 // Een account ZONDER guardians is geen ward, dus compose is open. De post 268 // landt echt, met de foto eraan. 269 db.prepare('INSERT INTO users (id, username, email, password_hash, role) VALUES (?,?,?,?,?)') 270 .run('u3', 'vrij', 'v@t', 'x', 'user'); 271 db.prepare('INSERT INTO sites (id, slug, title, owner_id) VALUES (?,?,?,?)') 272 .run('s3', 'vrij', 'Vrij', 'u3'); 273 274 const { server, port } = await listen(appWith({ user: { id: 'u3' } })); 275 try { 276 const r = await fetch(`http://127.0.0.1:${port}/ward/api/post`, { 277 method: 'POST', headers: { 'Content-Type': 'application/json' }, 278 body: JSON.stringify({ 279 text: 'kijk mijn tekening', 280 visibility: 'friends', 281 media: [{ url: '/media/reply-media/x.jpg', mediaType: 'image/jpeg', name: 'tekening.jpg' }], 282 }), 283 }); 284 assert.equal(r.status, 201, JSON.stringify(await r.clone().json().catch(() => ({})))); 285 const row = db.prepare("SELECT content FROM posts WHERE site_id = 's3' ORDER BY created_at DESC LIMIT 1").get(); 286 assert.ok(row, 'de post is nergens opgeslagen'); 287 // De foto reist als attachment mee, niet als kale tekst. 288 assert.match(row.content, /x\.jpg|<img|video|Image/i); 289 } finally { server.close(); } 290 }); 291 292 test('een lege post wordt geweigerd', async () => { 293 const { server, port } = await listen(appWith({ user: { id: 'u1' } })); 294 try { 295 const r = await fetch(`http://127.0.0.1:${port}/ward/api/post`, { 296 method: 'POST', headers: { 'Content-Type': 'application/json' }, 297 body: JSON.stringify({ text: ' ', media: [] }), 298 }); 299 assert.equal(r.status, 400); 300 assert.equal((await r.json()).error, 'empty'); 301 } finally { server.close(); } 302 }); 303 304 test('een vreemde kan niet uploaden', async () => { 305 // De upload-poort moet net zo dicht zijn als de rest; anders vult iemand 306 // ongevraagd de media-map. 307 const { server, port } = await listen(appWith({})); 308 try { 309 const r = await fetch(`http://127.0.0.1:${port}/ward/api/upload`, { method: 'POST', redirect: 'manual' }); 310 assert.notEqual(r.status, 201); 311 } finally { server.close(); } 312 });
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)