1- import { expect , test } from '@/e2e/helper' ;
2- import { Response } from 'miragejs' ;
1+ import { defer } from '@/e2e/deferred' ;
2+ import { test as _test , expect , test } from '@/e2e/helper' ;
3+ import { http , HttpResponse } from 'msw' ;
34
45test . describe ( '/settings/tokens/new' , { tag : '@routes' } , ( ) => {
5- test . beforeEach ( async ( { mirage } ) => {
6- await mirage . addHook ( server => {
7- let user = server . create ( 'user' , {
8- login : 'johnnydee' ,
9- name : 'John Doe' ,
10- 11- avatar : 'https://avatars2.githubusercontent.com/u/1234567?v=4' ,
12- } ) ;
13-
14- authenticateAs ( user ) ;
15- globalThis . user = user ;
6+ async function prepare ( msw ) {
7+ let user = msw . db . user . create ( {
8+ login : 'johnnydee' ,
9+ name : 'John Doe' ,
10+ 11+ avatar : 'https://avatars2.githubusercontent.com/u/1234567?v=4' ,
1612 } ) ;
17- } ) ;
1813
19- test ( 'can navigate to the route' , async ( { page } ) => {
14+ await msw . authenticateAs ( user ) ;
15+
16+ return { user } ;
17+ }
18+
19+ test ( 'can navigate to the route' , async ( { page, msw } ) => {
20+ await prepare ( msw ) ;
21+
2022 await page . goto ( '/' ) ;
2123 await expect ( page ) . toHaveURL ( '/' ) ;
2224
@@ -31,7 +33,9 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
3133 await expect ( page ) . toHaveURL ( '/settings/tokens/new' ) ;
3234 } ) ;
3335
34- test ( 'happy path' , async ( { page } ) => {
36+ test ( 'happy path' , async ( { page, msw } ) => {
37+ await prepare ( msw ) ;
38+
3539 await page . goto ( '/settings/tokens/new' ) ;
3640 await expect ( page ) . toHaveURL ( '/settings/tokens/new' ) ;
3741
@@ -40,10 +44,7 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
4044 await page . click ( '[data-test-scope="publish-update"]' ) ;
4145 await page . click ( '[data-test-generate]' ) ;
4246
43- let token = await page . evaluate ( ( ) => {
44- let token = server . schema [ 'apiTokens' ] . findBy ( { name : 'token-name' } ) ;
45- return JSON . parse ( JSON . stringify ( token ) ) ;
46- } ) ;
47+ let token = msw . db . apiToken . findFirst ( { where : { name : { equals : 'token-name' } } } ) ;
4748 expect ( token , 'API token has been created in the backend database' ) . toBeTruthy ( ) ;
4849 expect ( token . name ) . toBe ( 'token-name' ) ;
4950 expect ( token . expiredAt ) . toBe ( null ) ;
@@ -60,7 +61,9 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
6061 await expect ( page . locator ( '[data-test-api-token="1"] [data-test-expired-at]' ) ) . toHaveCount ( 0 ) ;
6162 } ) ;
6263
63- test ( 'crate scopes' , async ( { page } ) => {
64+ test ( 'crate scopes' , async ( { page, msw } ) => {
65+ await prepare ( msw ) ;
66+
6467 await page . goto ( '/settings/tokens/new' ) ;
6568 await expect ( page ) . toHaveURL ( '/settings/tokens/new' ) ;
6669
@@ -130,10 +133,7 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
130133
131134 await page . click ( '[data-test-generate]' ) ;
132135
133- let token = await page . evaluate ( ( ) => {
134- let token = server . schema [ 'apiTokens' ] . findBy ( { name : 'token-name' } ) ;
135- return JSON . parse ( JSON . stringify ( token ) ) ;
136- } ) ;
136+ let token = msw . db . apiToken . findFirst ( { where : { name : { equals : 'token-name' } } } ) ;
137137 expect ( token , 'API token has been created in the backend database' ) . toBeTruthy ( ) ;
138138 expect ( token . name ) . toBe ( 'token-name' ) ;
139139 expect ( token . crateScopes ) . toEqual ( [ 'serde-*' , 'serde' ] ) ;
@@ -151,7 +151,9 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
151151 await expect ( page . locator ( '[data-test-api-token="1"] [data-test-expired-at]' ) ) . toHaveCount ( 0 ) ;
152152 } ) ;
153153
154- test ( 'token expiry' , async ( { page } ) => {
154+ test ( 'token expiry' , async ( { page, msw } ) => {
155+ await prepare ( msw ) ;
156+
155157 await page . goto ( '/settings/tokens/new' ) ;
156158 await expect ( page ) . toHaveURL ( '/settings/tokens/new' ) ;
157159 await expect ( page . locator ( '[data-test-name]' ) ) . toHaveValue ( '' ) ;
@@ -174,10 +176,7 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
174176 await page . click ( '[data-test-scope="publish-update"]' ) ;
175177 await page . click ( '[data-test-generate]' ) ;
176178
177- let token = await page . evaluate ( ( ) => {
178- let token = server . schema [ 'apiTokens' ] . findBy ( { name : 'token-name' } ) ;
179- return JSON . parse ( JSON . stringify ( token ) ) ;
180- } ) ;
179+ let token = msw . db . apiToken . findFirst ( { where : { name : { equals : 'token-name' } } } ) ;
181180 expect ( token , 'API token has been created in the backend database' ) . toBeTruthy ( ) ;
182181 expect ( token . name ) . toBe ( 'token-name' ) ;
183182 expect ( token . expiredAt . slice ( 0 , 10 ) ) . toBe ( '2017-12-20' ) ;
@@ -196,7 +195,9 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
196195 ) ;
197196 } ) ;
198197
199- test ( 'token expiry with custom date' , async ( { page } ) => {
198+ test ( 'token expiry with custom date' , async ( { page, msw } ) => {
199+ await prepare ( msw ) ;
200+
200201 await page . goto ( '/settings/tokens/new' ) ;
201202 await expect ( page ) . toHaveURL ( '/settings/tokens/new' ) ;
202203
@@ -215,10 +216,7 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
215216
216217 await page . click ( '[data-test-generate]' ) ;
217218
218- let token = await page . evaluate ( ( ) => {
219- let token = server . schema [ 'apiTokens' ] . findBy ( { name : 'token-name' } ) ;
220- return JSON . parse ( JSON . stringify ( token ) ) ;
221- } ) ;
219+ let token = msw . db . apiToken . findFirst ( { where : { name : { equals : 'token-name' } } } ) ;
222220 expect ( token , 'API token has been created in the backend database' ) . toBeTruthy ( ) ;
223221 expect ( token . name ) . toBe ( 'token-name' ) ;
224222 expect ( token . expiredAt . slice ( 0 , 10 ) ) . toBe ( '2024-05-04' ) ;
@@ -237,12 +235,11 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
237235 ) ;
238236 } ) ;
239237
240- test ( 'loading and error state' , async ( { page, mirage } ) => {
241- await page . exposeBinding ( 'resp500' , ( ) => new Response ( 500 ) ) ;
242- await mirage . addHook ( server => {
243- globalThis . deferred = require ( 'rsvp' ) . defer ( ) ;
244- server . put ( '/api/v1/me/tokens' , ( ) => globalThis . deferred . promise ) ;
245- } ) ;
238+ test ( 'loading and error state' , async ( { page, msw } ) => {
239+ await prepare ( msw ) ;
240+
241+ let deferred = defer ( ) ;
242+ msw . worker . use ( http . put ( '/api/v1/me/tokens' , ( ) => deferred . promise ) ) ;
246243
247244 await page . goto ( '/settings/tokens/new' ) ;
248245 await expect ( page ) . toHaveURL ( '/settings/tokens/new' ) ;
@@ -254,23 +251,27 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
254251 await expect ( page . locator ( '[data-test-name]' ) ) . toBeDisabled ( ) ;
255252 await expect ( page . locator ( '[data-test-generate]' ) ) . toBeDisabled ( ) ;
256253
257- await page . evaluate ( async ( ) => globalThis . deferred . resolve ( await globalThis . resp500 ) ) ;
254+ deferred . resolve ( HttpResponse . json ( { } , { status : 500 } ) ) ;
258255
259256 let message = 'An error has occurred while generating your API token. Please try again later!' ;
260257 await expect ( page . locator ( '[data-test-notification-message="error"]' ) ) . toHaveText ( message ) ;
261258 await expect ( page . locator ( '[data-test-name]' ) ) . toBeEnabled ( ) ;
262259 await expect ( page . locator ( '[data-test-generate]' ) ) . toBeEnabled ( ) ;
263260 } ) ;
264261
265- test ( 'cancel button navigates back to the token list' , async ( { page } ) => {
262+ test ( 'cancel button navigates back to the token list' , async ( { page, msw } ) => {
263+ await prepare ( msw ) ;
264+
266265 await page . goto ( '/settings/tokens/new' ) ;
267266 await expect ( page ) . toHaveURL ( '/settings/tokens/new' ) ;
268267
269268 await page . click ( '[data-test-cancel]' ) ;
270269 await expect ( page ) . toHaveURL ( '/settings/tokens' ) ;
271270 } ) ;
272271
273- test ( 'empty name shows an error' , async ( { page } ) => {
272+ test ( 'empty name shows an error' , async ( { page, msw } ) => {
273+ await prepare ( msw ) ;
274+
274275 await page . goto ( '/settings/tokens/new' ) ;
275276 await expect ( page ) . toHaveURL ( '/settings/tokens/new' ) ;
276277
@@ -282,7 +283,9 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
282283 await expect ( page . locator ( '[data-test-scopes-group] [data-test-error]' ) ) . toHaveCount ( 0 ) ;
283284 } ) ;
284285
285- test ( 'no scopes selected shows an error' , async ( { page } ) => {
286+ test ( 'no scopes selected shows an error' , async ( { page, msw } ) => {
287+ await prepare ( msw ) ;
288+
286289 await page . goto ( '/settings/tokens/new' ) ;
287290 await expect ( page ) . toHaveURL ( '/settings/tokens/new' ) ;
288291
@@ -293,19 +296,17 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
293296 await expect ( page . locator ( '[data-test-scopes-group] [data-test-error]' ) ) . toBeVisible ( ) ;
294297 } ) ;
295298
296- test ( 'prefill with the exist token' , async ( { page, mirage } ) => {
297- await mirage . addHook ( server => {
298- const user = globalThis . user ;
299-
300- server . create ( 'apiToken' , {
301- user : user ,
302- id : '1' ,
303- name : 'foo' ,
304- token : 'test' ,
305- createdAt : '2017-08-01T12:34:56' ,
306- lastUsedAt : '2017-11-02T01:45:14' ,
307- endpointScopes : [ 'publish-update' ] ,
308- } ) ;
299+ test ( 'prefill with the exist token' , async ( { page, msw } ) => {
300+ let { user } = await prepare ( msw ) ;
301+
302+ msw . db . apiToken . create ( {
303+ user : user ,
304+ id : 1 ,
305+ name : 'foo' ,
306+ token : 'test' ,
307+ createdAt : '2017-08-01T12:34:56' ,
308+ lastUsedAt : '2017-11-02T01:45:14' ,
309+ endpointScopes : [ 'publish-update' ] ,
309310 } ) ;
310311
311312 await page . goto ( '/settings/tokens/new?from=1' ) ;
@@ -323,10 +324,7 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
323324 ) ;
324325 await page . click ( '[data-test-generate]' ) ;
325326
326- let newToken = await page . evaluate ( ( ) => {
327- let newToken = server . schema [ 'apiTokens' ] . findBy ( { name : 'foo' , crateScopes : [ 'serde' ] } ) ;
328- return JSON . parse ( JSON . stringify ( newToken ) ) ;
329- } ) ;
327+ let newToken = msw . db . apiToken . findFirst ( { where : { name : { equals : 'foo' } } } ) ;
330328 expect ( newToken , 'New API token has been created in the backend database' ) . toBeTruthy ( ) ;
331329
332330 await expect ( page ) . toHaveURL ( '/settings/tokens' ) ;
@@ -335,7 +333,9 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
335333 await expect ( page ) . toHaveURL ( '/settings/tokens/new' ) ;
336334 } ) ;
337335
338- test ( 'token not found' , async ( { page } ) => {
336+ test ( 'token not found' , async ( { page, msw } ) => {
337+ await prepare ( msw ) ;
338+
339339 await page . goto ( '/settings/tokens/new?from=1' ) ;
340340 await expect ( page ) . toHaveURL ( '/settings/tokens/new?from=1' ) ;
341341 await expect ( page . locator ( '[data-test-title]' ) ) . toHaveText ( 'Token not found' ) ;
0 commit comments