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' ;
3
4
4
5
test . 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' ,
16
12
} ) ;
17
- } ) ;
18
13
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
+
20
22
await page . goto ( '/' ) ;
21
23
await expect ( page ) . toHaveURL ( '/' ) ;
22
24
@@ -31,7 +33,9 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
31
33
await expect ( page ) . toHaveURL ( '/settings/tokens/new' ) ;
32
34
} ) ;
33
35
34
- test ( 'happy path' , async ( { page } ) => {
36
+ test ( 'happy path' , async ( { page, msw } ) => {
37
+ await prepare ( msw ) ;
38
+
35
39
await page . goto ( '/settings/tokens/new' ) ;
36
40
await expect ( page ) . toHaveURL ( '/settings/tokens/new' ) ;
37
41
@@ -40,10 +44,7 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
40
44
await page . click ( '[data-test-scope="publish-update"]' ) ;
41
45
await page . click ( '[data-test-generate]' ) ;
42
46
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' } } } ) ;
47
48
expect ( token , 'API token has been created in the backend database' ) . toBeTruthy ( ) ;
48
49
expect ( token . name ) . toBe ( 'token-name' ) ;
49
50
expect ( token . expiredAt ) . toBe ( null ) ;
@@ -60,7 +61,9 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
60
61
await expect ( page . locator ( '[data-test-api-token="1"] [data-test-expired-at]' ) ) . toHaveCount ( 0 ) ;
61
62
} ) ;
62
63
63
- test ( 'crate scopes' , async ( { page } ) => {
64
+ test ( 'crate scopes' , async ( { page, msw } ) => {
65
+ await prepare ( msw ) ;
66
+
64
67
await page . goto ( '/settings/tokens/new' ) ;
65
68
await expect ( page ) . toHaveURL ( '/settings/tokens/new' ) ;
66
69
@@ -130,10 +133,7 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
130
133
131
134
await page . click ( '[data-test-generate]' ) ;
132
135
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' } } } ) ;
137
137
expect ( token , 'API token has been created in the backend database' ) . toBeTruthy ( ) ;
138
138
expect ( token . name ) . toBe ( 'token-name' ) ;
139
139
expect ( token . crateScopes ) . toEqual ( [ 'serde-*' , 'serde' ] ) ;
@@ -151,7 +151,9 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
151
151
await expect ( page . locator ( '[data-test-api-token="1"] [data-test-expired-at]' ) ) . toHaveCount ( 0 ) ;
152
152
} ) ;
153
153
154
- test ( 'token expiry' , async ( { page } ) => {
154
+ test ( 'token expiry' , async ( { page, msw } ) => {
155
+ await prepare ( msw ) ;
156
+
155
157
await page . goto ( '/settings/tokens/new' ) ;
156
158
await expect ( page ) . toHaveURL ( '/settings/tokens/new' ) ;
157
159
await expect ( page . locator ( '[data-test-name]' ) ) . toHaveValue ( '' ) ;
@@ -174,10 +176,7 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
174
176
await page . click ( '[data-test-scope="publish-update"]' ) ;
175
177
await page . click ( '[data-test-generate]' ) ;
176
178
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' } } } ) ;
181
180
expect ( token , 'API token has been created in the backend database' ) . toBeTruthy ( ) ;
182
181
expect ( token . name ) . toBe ( 'token-name' ) ;
183
182
expect ( token . expiredAt . slice ( 0 , 10 ) ) . toBe ( '2017-12-20' ) ;
@@ -196,7 +195,9 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
196
195
) ;
197
196
} ) ;
198
197
199
- test ( 'token expiry with custom date' , async ( { page } ) => {
198
+ test ( 'token expiry with custom date' , async ( { page, msw } ) => {
199
+ await prepare ( msw ) ;
200
+
200
201
await page . goto ( '/settings/tokens/new' ) ;
201
202
await expect ( page ) . toHaveURL ( '/settings/tokens/new' ) ;
202
203
@@ -215,10 +216,7 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
215
216
216
217
await page . click ( '[data-test-generate]' ) ;
217
218
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' } } } ) ;
222
220
expect ( token , 'API token has been created in the backend database' ) . toBeTruthy ( ) ;
223
221
expect ( token . name ) . toBe ( 'token-name' ) ;
224
222
expect ( token . expiredAt . slice ( 0 , 10 ) ) . toBe ( '2024-05-04' ) ;
@@ -237,12 +235,11 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
237
235
) ;
238
236
} ) ;
239
237
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 ) ) ;
246
243
247
244
await page . goto ( '/settings/tokens/new' ) ;
248
245
await expect ( page ) . toHaveURL ( '/settings/tokens/new' ) ;
@@ -254,23 +251,27 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
254
251
await expect ( page . locator ( '[data-test-name]' ) ) . toBeDisabled ( ) ;
255
252
await expect ( page . locator ( '[data-test-generate]' ) ) . toBeDisabled ( ) ;
256
253
257
- await page . evaluate ( async ( ) => globalThis . deferred . resolve ( await globalThis . resp500 ) ) ;
254
+ deferred . resolve ( HttpResponse . json ( { } , { status : 500 } ) ) ;
258
255
259
256
let message = 'An error has occurred while generating your API token. Please try again later!' ;
260
257
await expect ( page . locator ( '[data-test-notification-message="error"]' ) ) . toHaveText ( message ) ;
261
258
await expect ( page . locator ( '[data-test-name]' ) ) . toBeEnabled ( ) ;
262
259
await expect ( page . locator ( '[data-test-generate]' ) ) . toBeEnabled ( ) ;
263
260
} ) ;
264
261
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
+
266
265
await page . goto ( '/settings/tokens/new' ) ;
267
266
await expect ( page ) . toHaveURL ( '/settings/tokens/new' ) ;
268
267
269
268
await page . click ( '[data-test-cancel]' ) ;
270
269
await expect ( page ) . toHaveURL ( '/settings/tokens' ) ;
271
270
} ) ;
272
271
273
- test ( 'empty name shows an error' , async ( { page } ) => {
272
+ test ( 'empty name shows an error' , async ( { page, msw } ) => {
273
+ await prepare ( msw ) ;
274
+
274
275
await page . goto ( '/settings/tokens/new' ) ;
275
276
await expect ( page ) . toHaveURL ( '/settings/tokens/new' ) ;
276
277
@@ -282,7 +283,9 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
282
283
await expect ( page . locator ( '[data-test-scopes-group] [data-test-error]' ) ) . toHaveCount ( 0 ) ;
283
284
} ) ;
284
285
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
+
286
289
await page . goto ( '/settings/tokens/new' ) ;
287
290
await expect ( page ) . toHaveURL ( '/settings/tokens/new' ) ;
288
291
@@ -293,19 +296,17 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
293
296
await expect ( page . locator ( '[data-test-scopes-group] [data-test-error]' ) ) . toBeVisible ( ) ;
294
297
} ) ;
295
298
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' ] ,
309
310
} ) ;
310
311
311
312
await page . goto ( '/settings/tokens/new?from=1' ) ;
@@ -323,10 +324,7 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
323
324
) ;
324
325
await page . click ( '[data-test-generate]' ) ;
325
326
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' } } } ) ;
330
328
expect ( newToken , 'New API token has been created in the backend database' ) . toBeTruthy ( ) ;
331
329
332
330
await expect ( page ) . toHaveURL ( '/settings/tokens' ) ;
@@ -335,7 +333,9 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
335
333
await expect ( page ) . toHaveURL ( '/settings/tokens/new' ) ;
336
334
} ) ;
337
335
338
- test ( 'token not found' , async ( { page } ) => {
336
+ test ( 'token not found' , async ( { page, msw } ) => {
337
+ await prepare ( msw ) ;
338
+
339
339
await page . goto ( '/settings/tokens/new?from=1' ) ;
340
340
await expect ( page ) . toHaveURL ( '/settings/tokens/new?from=1' ) ;
341
341
await expect ( page . locator ( '[data-test-title]' ) ) . toHaveText ( 'Token not found' ) ;
0 commit comments