11import { test as base } from '@playwright/test' ;
2+ import type { MockServiceWorker } from 'playwright-msw' ;
3+ import { http , HttpResponse } from 'msw' ;
4+ import { createWorker } from 'playwright-msw' ;
5+ import { db , handlers } from '@crates-io/msw' ;
6+
27import { FakeTimers , FakeTimersOptions } from './fixtures/fake-timers' ;
38import { MiragePage } from './fixtures/mirage' ;
49import { PercyPage } from './fixtures/percy' ;
@@ -13,6 +18,11 @@ export type AppOptions = {
1318export interface AppFixtures {
1419 clock : FakeTimers ;
1520 mirage : MiragePage ;
21+ msw : {
22+ worker : MockServiceWorker ;
23+ db : typeof db ;
24+ authenticateAs : ( user : any ) => Promise < void > ;
25+ } ;
1626 ember : EmberPage ;
1727 percy : PercyPage ;
1828 a11y : A11yPage ;
@@ -39,6 +49,21 @@ export const test = base.extend<AppOptions & AppFixtures>({
3949 } ,
4050 { scope : 'test' } ,
4151 ] ,
52+ // MockServiceWorker integration via `playwright-msw`.
53+ //
54+ // We are explicitly not using the `createWorkerFixture()`function, because
55+ // uses `auto: true`, and we want to be explicit about our usage of the fixture.
56+ msw : async ( { page } , use ) => {
57+ const worker = await createWorker ( page , handlers ) ;
58+ const authenticateAs = async function ( user ) {
59+ db . mswSession . create ( { user } ) ;
60+ await page . addInitScript ( "globalThis.localStorage.setItem('isLoggedIn', '1')" ) ;
61+ } ;
62+
63+ await use ( { worker, db, authenticateAs } ) ;
64+ db . reset ( ) ;
65+ worker . resetCookieStore ( ) ;
66+ } ,
4267 ember : [
4368 async ( { page, emberOptions } , use ) => {
4469 let ember = new EmberPage ( page ) ;
0 commit comments