import { fixture } from '../fixture.mjs'; import { browser } from '../browser.mjs'; // This isolated slice has no shell mount yet. Attach the actual feature to the local Console fixture. export async function filesFixture(t) { const f = await fixture(); t.after(() => f.close()); const b = await browser({ machine: false }); t.after(() => b.close()); const errors = []; b.on('Runtime.exceptionThrown', event => errors.push(event.exceptionDetails.text)); await b.call('Fetch.enable', { patterns: [{ urlPattern: '*' }] }); b.on('Fetch.requestPaused', e => { const same = e.request.url.startsWith(f.base + '/') || e.request.url === 'about:blank'; b.call(same ? 'Fetch.continueRequest' : 'Fetch.failRequest', same ? { requestId: e.requestId } : { requestId: e.requestId, errorReason: 'BlockedByClient' }).catch(error => errors.push(error.message)); }); await b.call('Page.addScriptToEvaluateOnNewDocument', { source: `(() => { const real = window.fetch.bind(window); window.fixtureState = null; window.fixtureWorkspace = null; window.fetch = async (url, init) => { const path = String(url); if (path === '/api/config') return new Response(JSON.stringify({requests:true}), {status: 200, headers: {'content-type':'application/json'}}); if (path === '/api/requests/request-1') return new Response(JSON.stringify(window.fixtureState), {status: 200, headers: {'content-type':'application/json'}}); if (path === '/api/requests/request-1/workspace') return window.fixtureWorkspace === null ? new Response('{}', {status: 503}) : new Response(JSON.stringify(window.fixtureWorkspace), {status: 200, headers: {'content-type':'application/json'}}); if (path.startsWith('/api/')) return new Response('{}', {status: 503}); return real(url, init); }; })();` }); return { f, b, errors }; }