diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index afcbe295..6dc5260c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -478,7 +478,7 @@ jobs: run: npm ci - name: Install Playwright browsers - run: npx playwright install --with-deps chromium + run: npx playwright install --with-deps chromium firefox - name: Run headless E2E tests run: npm run test:e2e diff --git a/js/relayManager.js b/js/relayManager.js index 670962aa..1e37511a 100644 --- a/js/relayManager.js +++ b/js/relayManager.js @@ -197,6 +197,31 @@ function resolveEntryInput(entry) { return { url, mode: deriveMode(mode) }; } +function getTestRelayOverrides() { + if (typeof window === "undefined") return null; + + const params = new URLSearchParams(window.location.search); + const paramRelays = params.get("__testRelays__"); + if (paramRelays) { + return paramRelays + .split(",") + .map((r) => r.trim()) + .filter(Boolean); + } + + try { + const stored = localStorage.getItem("__bitvidTestRelays__"); + if (stored) { + const parsed = JSON.parse(stored); + if (Array.isArray(parsed)) return parsed; + } + } catch { + // Ignore + } + + return null; +} + class RelayPreferencesManager { constructor() { this.entries = []; @@ -209,6 +234,16 @@ class RelayPreferencesManager { return createEntry(normalized, "both"); }); + const testOverrides = getTestRelayOverrides(); + if (testOverrides && testOverrides.length) { + this.defaultEntries = testOverrides + .map((url) => { + const normalized = normalizeRelayUrl(url) || url; + return createEntry(normalized, "both"); + }) + .filter((e) => e.url); + } + // Attempt to load from storage if policy allows const loaded = this.loadFromStorage(); if (loaded && loaded.length) { diff --git a/tests/e2e/repro_issue.spec.ts b/tests/e2e/repro_issue.spec.ts index 966c3a4f..e1ec07e5 100644 --- a/tests/e2e/repro_issue.spec.ts +++ b/tests/e2e/repro_issue.spec.ts @@ -8,17 +8,17 @@ if (!global.WebSocket) { global.WebSocket = WebSocket; } -const RELAY_PORT = 8899; -const RELAY_URL = `ws://127.0.0.1:${RELAY_PORT}`; - test.describe('Embed Player', () => { let relayServer; + let RELAY_URL; - test.beforeAll(async () => { - relayServer = startRelay(RELAY_PORT); + test.beforeEach(async ({}, testInfo) => { + const port = 8900 + (testInfo.workerIndex * 10); + RELAY_URL = `ws://127.0.0.1:${port}`; + relayServer = startRelay(port); }); - test.afterAll(async () => { + test.afterEach(async () => { if (relayServer) { await relayServer.close(); }