11import { test , expect } from '@/e2e/helper' ;
2+ import { http , HttpResponse } from 'msw' ;
23
34test . describe ( 'Acceptance | Login' , { tag : '@acceptance' } , ( ) => {
4- test ( 'successful login' , async ( { page, mirage } ) => {
5+ test ( 'successful login' , async ( { page, msw } ) => {
56 // mock `window.open()`
67 await page . addInitScript ( ( ) => {
78 globalThis . open = ( url , target , features ) => {
@@ -10,28 +11,32 @@ test.describe('Acceptance | Login', { tag: '@acceptance' }, () => {
1011 } ;
1112 } ) ;
1213
13- await mirage . config ( { trackRequests : true } ) ;
14- await mirage . addHook ( server => {
15- server . get ( '/api/private/session/begin' , { url : 'url-to-github-including-state-secret' } ) ;
16-
17- server . get ( '/api/private/session/authorize' , ( ) => {
18- let user = server . create ( 'user' ) ;
19- server . create ( 'mirage-session' , { user } ) ;
20- return { ok : true } ;
21- } ) ;
22-
23- server . get ( '/api/v1/me' , ( ) => ( {
24- user : {
25- id : 42 ,
26- login : 'johnnydee' ,
27- name : 'John Doe' ,
28- 29- avatar : 'https://avatars2.githubusercontent.com/u/12345?v=4' ,
30- url : 'https://github.com/johnnydee' ,
31- } ,
32- owned_crates : [ ] ,
33- } ) ) ;
34- } ) ;
14+ msw . worker . use (
15+ http . get ( '/api/private/session/begin' , ( ) => HttpResponse . json ( { url : 'url-to-github-including-state-secret' } ) ) ,
16+ http . get ( '/api/private/session/authorize' , ( { request } ) => {
17+ let url = new URL ( request . url ) ;
18+ expect ( [ ...url . searchParams . keys ( ) ] ) . toEqual ( [ 'code' , 'state' ] ) ;
19+ expect ( url . searchParams . get ( 'code' ) ) . toBe ( '901dd10e07c7e9fa1cd5' ) ;
20+ expect ( url . searchParams . get ( 'state' ) ) . toBe ( 'fYcUY3FMdUUz00FC7vLT7A' ) ;
21+
22+ let user = msw . db . user . create ( ) ;
23+ msw . db . mswSession . create ( { user } ) ;
24+ return HttpResponse . json ( { ok : true } ) ;
25+ } ) ,
26+ http . get ( '/api/v1/me' , ( ) =>
27+ HttpResponse . json ( {
28+ user : {
29+ id : 42 ,
30+ login : 'johnnydee' ,
31+ name : 'John Doe' ,
32+ 33+ avatar : 'https://avatars2.githubusercontent.com/u/12345?v=4' ,
34+ url : 'https://github.com/johnnydee' ,
35+ } ,
36+ owned_crates : [ ] ,
37+ } ) ,
38+ ) ,
39+ ) ;
3540
3641 await page . goto ( '/' ) ;
3742 await expect ( page ) . toHaveURL ( '/' ) ;
@@ -52,16 +57,10 @@ test.describe('Acceptance | Login', { tag: '@acceptance' }, () => {
5257 window . postMessage ( message , window . location . origin ) ;
5358 } , message ) ;
5459
55- const queryParams = await page . evaluate (
56- ( ) =>
57- server . pretender . handledRequests . find ( req => req . url . startsWith ( '/api/private/session/authorize' ) ) . queryParams ,
58- ) ;
59- expect ( queryParams ) . toEqual ( message ) ;
60-
6160 await expect ( page . locator ( '[data-test-user-menu] [data-test-toggle]' ) ) . toHaveText ( 'John Doe' ) ;
6261 } ) ;
6362
64- test ( 'failed login' , async ( { page, mirage } ) => {
63+ test ( 'failed login' , async ( { page, msw } ) => {
6564 // mock `window.open()`
6665 await page . addInitScript ( ( ) => {
6766 globalThis . open = ( url , target , features ) => {
@@ -70,12 +69,12 @@ test.describe('Acceptance | Login', { tag: '@acceptance' }, () => {
7069 } ;
7170 } ) ;
7271
73- await mirage . addHook ( server => {
74- server . get ( '/api/private/session/begin' , { url : 'url-to-github-including-state-secret' } ) ;
75-
76- let payload = { errors : [ { detail : 'Forbidden' } ] } ;
77- server . get ( '/api/private/session/authorize' , payload , 403 ) ;
78- } ) ;
72+ msw . worker . use (
73+ http . get ( '/api/private/session/begin' , ( ) => HttpResponse . json ( { url : 'url-to-github-including-state-secret' } ) ) ,
74+ http . get ( '/api/private/session/authorize' , ( ) =>
75+ HttpResponse . json ( { errors : [ { detail : 'Forbidden' } ] } , { status : 403 } ) ,
76+ ) ,
77+ ) ;
7978
8079 await page . goto ( '/' ) ;
8180 await expect ( page ) . toHaveURL ( '/' ) ;
0 commit comments