aboutsummaryrefslogtreecommitdiffstats
path: root/tools/moderation-test.js
diff options
context:
space:
mode:
Diffstat (limited to 'tools/moderation-test.js')
-rw-r--r--tools/moderation-test.js14
1 files changed, 10 insertions, 4 deletions
diff --git a/tools/moderation-test.js b/tools/moderation-test.js
index 1f4deb8..d6df879 100644
--- a/tools/moderation-test.js
+++ b/tools/moderation-test.js
@@ -33,7 +33,12 @@ const REPLIES = [reply(OTHER, 'reply from ok person', 200), reply(MUTED, 'reply
const LONG = 'buy the dip now, best exchange ever, sign up with my link and get free sats today!!!';
const html = await buildHtml({ minify: true, pwa: false });
-const server = Bun.serve({ port: 5299, fetch: () => new Response(html, { headers: { 'content-type': 'text/html' } }) });
+// nos.lol (one of the relays the mute list is read from) is a stand-in
+// served here — an empty relay — so a real one that won't connect can't hold
+// the list back past the checks
+const server = Bun.serve({ port: 5299,
+ fetch: (req, srv) => (new URL(req.url).pathname === '/relay' && srv.upgrade(req) ? undefined : new Response(html, { headers: { 'content-type': 'text/html' } })),
+ websocket: { message: (ws, data) => { try { const m = JSON.parse(data); if (m[0] === 'REQ') ws.send(JSON.stringify(['EOSE', m[1]])); } catch {} } } });
const browser = await puppeteer.launch({ executablePath: '/usr/bin/google-chrome', headless: 'new', args: ['--no-sandbox'] });
const page = await browser.newPage();
await page.evaluateOnNewDocument((fx) => {
@@ -46,6 +51,7 @@ await page.evaluateOnNewDocument((fx) => {
ws.dispatchEvent(new MessageEvent('message', { data: JSON.stringify(['EOSE', id]) }));
}, 0);
window.WebSocket = function (...a) {
+ if (/^wss:\/\/nos\.lol\/?$/.test(String(a[0]))) a[0] = 'ws://localhost:5299/relay';
const ws = new Real(...a);
const send = ws.send.bind(ws);
ws.send = (data) => {
@@ -96,9 +102,8 @@ const waitText = async (x, ms = 25000) => { for (let i = 0; i < ms / 250; i++) {
const waitFor = async (fn, ms = 10000) => { for (let i = 0; i < ms / 250; i++) { if (await page.evaluate(fn)) return true; await sleep(250); } return false; };
const has = async (x) => (await text()).includes(x);
const openFeed = async () => {
- await page.evaluate(() => { const b = [...document.querySelectorAll('button')].find((e) => /message/i.test(e.getAttribute('aria-label') || '')); if (b) b.click(); });
- await sleep(800);
- await page.evaluate(() => { const e = [...document.querySelectorAll('.item')].find((n) => (n.querySelector('.chat-name') || {}).textContent === 'Feed'); if (e) e.click(); });
+ // the Feed is a tab in the bottom nav (it was a row on the chat home)
+ await page.evaluate(() => [...document.querySelectorAll('.app-nav-button')].find((b) => b.getAttribute('aria-label') === 'Feed')?.click());
await sleep(1200);
};
@@ -122,6 +127,7 @@ try {
await page.evaluate(([k, pk, ns]) => {
localStorage.setItem(k + ':follows', JSON.stringify({ tags: [['p', pk]], c: '', at: Math.floor(Date.now() / 1000) }));
localStorage.setItem(k + ':feedNotes', JSON.stringify(ns));
+ localStorage.setItem('btc-wallet-feed:' + k, 'following'); // a wallet with no feed remembered opens on Popular
}, [base, AUTHOR.pk, seeded]);
await page.reload({ waitUntil: 'domcontentloaded' });
await waitText('receive', 20000);