import { createServer } from 'node:http'; import { test, expect } from './fixtures/electron'; test('the production local preview preflight isolates requests and cleans up its temporary renderers', async ({ electronApp }) => { let externalRequests = 0; let externalPageLoads = 0; const externalServer = createServer((_request, response) => { externalRequests += 1; response.writeHead(200, { 'Content-Type': 'application/javascript' }); response.end('globalThis.externalLoaded = true;'); }); await new Promise((resolve, reject) => { externalServer.once('error', reject); externalServer.listen(0, '127.0.0.1', () => resolve()); }); const externalAddress = externalServer.address(); if (!externalAddress || typeof externalAddress === 'string') throw new Error('Expected an ephemeral TCP port'); const server = createServer((request, response) => { response.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' }); if (request.url === '/external') externalPageLoads += 1; const externalScript = request.url === '/external' && externalPageLoads > 1 ? `` : ''; response.end(`
Playable
${externalScript}`); }); await new Promise((resolve, reject) => { server.once('error', reject); server.listen(0, '127.0.0.1', () => resolve()); }); const address = server.address(); if (!address || typeof address === 'string') throw new Error('Expected an ephemeral TCP port'); try { const initialWebContentsCount = await electronApp.evaluate(({ webContents }) => webContents.getAllWebContents().length); const runPreflight = async (url: string) => await electronApp.evaluate(async (_electron, targetUrl) => { const mainGlobal = globalThis as typeof globalThis & { __niancodeRunLocalPreviewPreflightE2E?: (value: string) => Promise<{ ok: true }>; }; if (!mainGlobal.__niancodeRunLocalPreviewPreflightE2E) throw new Error('E2E preflight seam is unavailable'); return await mainGlobal.__niancodeRunLocalPreviewPreflightE2E(targetUrl); }, url); await expect(runPreflight(`http://127.0.0.1:${address.port}/external`)).rejects.toThrow(); expect(externalRequests).toBe(0); const result = await runPreflight(`http://127.0.0.1:${address.port}/`); expect(result).toEqual({ ok: true }); await expect.poll( async () => await electronApp.evaluate(({ webContents }) => webContents.getAllWebContents().length), ).toBe(initialWebContentsCount); } finally { await new Promise((resolve) => server.close(() => resolve())); await new Promise((resolve) => externalServer.close(() => resolve())); } });