aboutsummaryrefslogtreecommitdiffstats
path: root/tools/topic-depth-test.js
blob: d027e6068b691dc521f104283a522a4d5503cc84 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// A topic feed (#gardenstr) goes back as far as the relays remember: the
// big relays prune, so topics also ask archive-keeping ones, and a page
// whose posts were all filtered out (replies, muted, spam) is not the end.
// Before: ~5 posts, then "You're all caught up".
//
// Run: bun tools/topic-depth-test.js
import puppeteer from './puppeteer.js';
import { buildHtml } from '../build.js';
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
let ok = true;
const check = (n, c, d = '') => { console.log(` ${c ? '✓' : '✗'} ${n}${d ? ' — ' + d : ''}`); if (!c) ok = false; };
const html = await buildHtml({ minify: true, pwa: false });
const server = Bun.serve({ port: 5285, fetch: () => new Response(html, { headers: { 'content-type': 'text/html' } }) });
const browser = await puppeteer.launch({ relays: 'read', executablePath: '/usr/bin/google-chrome', headless: 'new', args: ['--no-sandbox'] });
const page = await browser.newPage();
try {
  await page.setViewport({ width: 390, height: 844 });
  await page.goto('http://localhost:5285/feed/t/gardenstr', { waitUntil: 'domcontentloaded' });
  const count = () => page.evaluate(() => new Set([...document.querySelectorAll('.notes-feed [data-key]')].map((n) => n.getAttribute('data-key'))).size);
  for (let i = 0; i < 60 && (await count()) < 3; i++) await sleep(500);
  const first = await count();
  check('the topic opens with posts', first >= 3, first + ' posts');
  let seen = new Set(), ended = false;
  const t0 = Date.now();
  while (Date.now() - t0 < 90_000 && seen.size < 60) {
    for (const k of await page.evaluate(() => [...document.querySelectorAll('.notes-feed [data-key]')].map((n) => n.getAttribute('data-key')))) seen.add(k);
    ended = await page.evaluate(() => document.body.innerText.includes('all caught up'));
    if (ended) break;
    await page.evaluate(() => window.scrollTo(0, document.documentElement.scrollHeight));
    await sleep(1500);
  }
  check('scrolling keeps finding older posts', seen.size >= 40, seen.size + ' posts' + (ended ? ', then "caught up"' : ''));
  check('...without claiming to be caught up after a handful', !ended || seen.size >= 40);
} finally { await browser.close(); server.stop(true); }
console.log(ok ? '\n✅ a topic goes back' : '\n❌ failed');
process.exit(ok ? 0 : 1);