1+ import { defer } from '@/e2e/deferred' ;
12import { expect , test } from '@/e2e/helper' ;
2- import { Response } from 'miragejs ' ;
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,33 +151,28 @@ 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 ( '' ) ;
158160 await expect ( page . locator ( '[data-test-expiry]' ) ) . toHaveValue ( '90' ) ;
159- let expiryDate = new Date ( '2018-02-18T00:00:00' ) ;
160- let expectedDate = expiryDate . toLocaleDateString ( undefined , { dateStyle : 'long' } ) ;
161- let expectedDescription = `The token will expire on ${ expectedDate } ` ;
161+ let expectedDescription = `The token will expire on February 18, 2018` ;
162162 await expect ( page . locator ( '[data-test-expiry-description]' ) ) . toHaveText ( expectedDescription ) ;
163163
164164 await page . fill ( '[data-test-name]' , 'token-name' ) ;
165165 await page . locator ( '[data-test-expiry]' ) . selectOption ( 'none' ) ;
166166 await expect ( page . locator ( '[data-test-expiry-description]' ) ) . toHaveText ( 'The token will never expire' ) ;
167167
168168 await page . locator ( '[data-test-expiry]' ) . selectOption ( '30' ) ;
169- expiryDate = new Date ( '2017-12-20T00:00:00' ) ;
170- expectedDate = expiryDate . toLocaleDateString ( undefined , { dateStyle : 'long' } ) ;
171- expectedDescription = `The token will expire on ${ expectedDate } ` ;
169+ expectedDescription = `The token will expire on December 20, 2017` ;
172170 await expect ( page . locator ( '[data-test-expiry-description]' ) ) . toHaveText ( expectedDescription ) ;
173171
174172 await page . click ( '[data-test-scope="publish-update"]' ) ;
175173 await page . click ( '[data-test-generate]' ) ;
176174
177- let token = await page . evaluate ( ( ) => {
178- let token = server . schema [ 'apiTokens' ] . findBy ( { name : 'token-name' } ) ;
179- return JSON . parse ( JSON . stringify ( token ) ) ;
180- } ) ;
175+ let token = msw . db . apiToken . findFirst ( { where : { name : { equals : 'token-name' } } } ) ;
181176 expect ( token , 'API token has been created in the backend database' ) . toBeTruthy ( ) ;
182177 expect ( token . name ) . toBe ( 'token-name' ) ;
183178 expect ( token . expiredAt . slice ( 0 , 10 ) ) . toBe ( '2017-12-20' ) ;
@@ -196,7 +191,9 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
196191 ) ;
197192 } ) ;
198193
199- test ( 'token expiry with custom date' , async ( { page } ) => {
194+ test ( 'token expiry with custom date' , async ( { page, msw } ) => {
195+ await prepare ( msw ) ;
196+
200197 await page . goto ( '/settings/tokens/new' ) ;
201198 await expect ( page ) . toHaveURL ( '/settings/tokens/new' ) ;
202199
@@ -215,10 +212,7 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
215212
216213 await page . click ( '[data-test-generate]' ) ;
217214
218- let token = await page . evaluate ( ( ) => {
219- let token = server . schema [ 'apiTokens' ] . findBy ( { name : 'token-name' } ) ;
220- return JSON . parse ( JSON . stringify ( token ) ) ;
221- } ) ;
215+ let token = msw . db . apiToken . findFirst ( { where : { name : { equals : 'token-name' } } } ) ;
222216 expect ( token , 'API token has been created in the backend database' ) . toBeTruthy ( ) ;
223217 expect ( token . name ) . toBe ( 'token-name' ) ;
224218 expect ( token . expiredAt . slice ( 0 , 10 ) ) . toBe ( '2024-05-04' ) ;
@@ -237,12 +231,11 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
237231 ) ;
238232 } ) ;
239233
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- } ) ;
234+ test ( 'loading and error state' , async ( { page, msw } ) => {
235+ await prepare ( msw ) ;
236+
237+ let deferred = defer ( ) ;
238+ msw . worker . use ( http . put ( '/api/v1/me/tokens' , ( ) => deferred . promise ) ) ;
246239
247240 await page . goto ( '/settings/tokens/new' ) ;
248241 await expect ( page ) . toHaveURL ( '/settings/tokens/new' ) ;
@@ -254,23 +247,27 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
254247 await expect ( page . locator ( '[data-test-name]' ) ) . toBeDisabled ( ) ;
255248 await expect ( page . locator ( '[data-test-generate]' ) ) . toBeDisabled ( ) ;
256249
257- await page . evaluate ( async ( ) => globalThis . deferred . resolve ( await globalThis . resp500 ) ) ;
250+ deferred . resolve ( HttpResponse . json ( { } , { status : 500 } ) ) ;
258251
259252 let message = 'An error has occurred while generating your API token. Please try again later!' ;
260253 await expect ( page . locator ( '[data-test-notification-message="error"]' ) ) . toHaveText ( message ) ;
261254 await expect ( page . locator ( '[data-test-name]' ) ) . toBeEnabled ( ) ;
262255 await expect ( page . locator ( '[data-test-generate]' ) ) . toBeEnabled ( ) ;
263256 } ) ;
264257
265- test ( 'cancel button navigates back to the token list' , async ( { page } ) => {
258+ test ( 'cancel button navigates back to the token list' , async ( { page, msw } ) => {
259+ await prepare ( msw ) ;
260+
266261 await page . goto ( '/settings/tokens/new' ) ;
267262 await expect ( page ) . toHaveURL ( '/settings/tokens/new' ) ;
268263
269264 await page . click ( '[data-test-cancel]' ) ;
270265 await expect ( page ) . toHaveURL ( '/settings/tokens' ) ;
271266 } ) ;
272267
273- test ( 'empty name shows an error' , async ( { page } ) => {
268+ test ( 'empty name shows an error' , async ( { page, msw } ) => {
269+ await prepare ( msw ) ;
270+
274271 await page . goto ( '/settings/tokens/new' ) ;
275272 await expect ( page ) . toHaveURL ( '/settings/tokens/new' ) ;
276273
@@ -282,7 +279,9 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
282279 await expect ( page . locator ( '[data-test-scopes-group] [data-test-error]' ) ) . toHaveCount ( 0 ) ;
283280 } ) ;
284281
285- test ( 'no scopes selected shows an error' , async ( { page } ) => {
282+ test ( 'no scopes selected shows an error' , async ( { page, msw } ) => {
283+ await prepare ( msw ) ;
284+
286285 await page . goto ( '/settings/tokens/new' ) ;
287286 await expect ( page ) . toHaveURL ( '/settings/tokens/new' ) ;
288287
@@ -293,19 +292,17 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
293292 await expect ( page . locator ( '[data-test-scopes-group] [data-test-error]' ) ) . toBeVisible ( ) ;
294293 } ) ;
295294
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- } ) ;
295+ test ( 'prefill with the exist token' , async ( { page, msw } ) => {
296+ let { user } = await prepare ( msw ) ;
297+
298+ msw . db . apiToken . create ( {
299+ user : user ,
300+ id : 1 ,
301+ name : 'foo' ,
302+ token : 'test' ,
303+ createdAt : '2017-08-01T12:34:56' ,
304+ lastUsedAt : '2017-11-02T01:45:14' ,
305+ endpointScopes : [ 'publish-update' ] ,
309306 } ) ;
310307
311308 await page . goto ( '/settings/tokens/new?from=1' ) ;
@@ -323,10 +320,7 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
323320 ) ;
324321 await page . click ( '[data-test-generate]' ) ;
325322
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- } ) ;
323+ let newToken = msw . db . apiToken . findFirst ( { where : { name : { equals : 'foo' } } } ) ;
330324 expect ( newToken , 'New API token has been created in the backend database' ) . toBeTruthy ( ) ;
331325
332326 await expect ( page ) . toHaveURL ( '/settings/tokens' ) ;
@@ -335,7 +329,9 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
335329 await expect ( page ) . toHaveURL ( '/settings/tokens/new' ) ;
336330 } ) ;
337331
338- test ( 'token not found' , async ( { page } ) => {
332+ test ( 'token not found' , async ( { page, msw } ) => {
333+ await prepare ( msw ) ;
334+
339335 await page . goto ( '/settings/tokens/new?from=1' ) ;
340336 await expect ( page ) . toHaveURL ( '/settings/tokens/new?from=1' ) ;
341337 await expect ( page . locator ( '[data-test-title]' ) ) . toHaveText ( 'Token not found' ) ;
0 commit comments