1
+ import { defer } from '@/e2e/deferred' ;
1
2
import { expect , test } from '@/e2e/helper' ;
2
- import { Response } from 'miragejs ' ;
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,33 +151,28 @@ 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 ( '' ) ;
158
160
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` ;
162
162
await expect ( page . locator ( '[data-test-expiry-description]' ) ) . toHaveText ( expectedDescription ) ;
163
163
164
164
await page . fill ( '[data-test-name]' , 'token-name' ) ;
165
165
await page . locator ( '[data-test-expiry]' ) . selectOption ( 'none' ) ;
166
166
await expect ( page . locator ( '[data-test-expiry-description]' ) ) . toHaveText ( 'The token will never expire' ) ;
167
167
168
168
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` ;
172
170
await expect ( page . locator ( '[data-test-expiry-description]' ) ) . toHaveText ( expectedDescription ) ;
173
171
174
172
await page . click ( '[data-test-scope="publish-update"]' ) ;
175
173
await page . click ( '[data-test-generate]' ) ;
176
174
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' } } } ) ;
181
176
expect ( token , 'API token has been created in the backend database' ) . toBeTruthy ( ) ;
182
177
expect ( token . name ) . toBe ( 'token-name' ) ;
183
178
expect ( token . expiredAt . slice ( 0 , 10 ) ) . toBe ( '2017-12-20' ) ;
@@ -196,7 +191,9 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
196
191
) ;
197
192
} ) ;
198
193
199
- test ( 'token expiry with custom date' , async ( { page } ) => {
194
+ test ( 'token expiry with custom date' , async ( { page, msw } ) => {
195
+ await prepare ( msw ) ;
196
+
200
197
await page . goto ( '/settings/tokens/new' ) ;
201
198
await expect ( page ) . toHaveURL ( '/settings/tokens/new' ) ;
202
199
@@ -215,10 +212,7 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
215
212
216
213
await page . click ( '[data-test-generate]' ) ;
217
214
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' } } } ) ;
222
216
expect ( token , 'API token has been created in the backend database' ) . toBeTruthy ( ) ;
223
217
expect ( token . name ) . toBe ( 'token-name' ) ;
224
218
expect ( token . expiredAt . slice ( 0 , 10 ) ) . toBe ( '2024-05-04' ) ;
@@ -237,12 +231,11 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
237
231
) ;
238
232
} ) ;
239
233
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 ) ) ;
246
239
247
240
await page . goto ( '/settings/tokens/new' ) ;
248
241
await expect ( page ) . toHaveURL ( '/settings/tokens/new' ) ;
@@ -254,23 +247,27 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
254
247
await expect ( page . locator ( '[data-test-name]' ) ) . toBeDisabled ( ) ;
255
248
await expect ( page . locator ( '[data-test-generate]' ) ) . toBeDisabled ( ) ;
256
249
257
- await page . evaluate ( async ( ) => globalThis . deferred . resolve ( await globalThis . resp500 ) ) ;
250
+ deferred . resolve ( HttpResponse . json ( { } , { status : 500 } ) ) ;
258
251
259
252
let message = 'An error has occurred while generating your API token. Please try again later!' ;
260
253
await expect ( page . locator ( '[data-test-notification-message="error"]' ) ) . toHaveText ( message ) ;
261
254
await expect ( page . locator ( '[data-test-name]' ) ) . toBeEnabled ( ) ;
262
255
await expect ( page . locator ( '[data-test-generate]' ) ) . toBeEnabled ( ) ;
263
256
} ) ;
264
257
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
+
266
261
await page . goto ( '/settings/tokens/new' ) ;
267
262
await expect ( page ) . toHaveURL ( '/settings/tokens/new' ) ;
268
263
269
264
await page . click ( '[data-test-cancel]' ) ;
270
265
await expect ( page ) . toHaveURL ( '/settings/tokens' ) ;
271
266
} ) ;
272
267
273
- test ( 'empty name shows an error' , async ( { page } ) => {
268
+ test ( 'empty name shows an error' , async ( { page, msw } ) => {
269
+ await prepare ( msw ) ;
270
+
274
271
await page . goto ( '/settings/tokens/new' ) ;
275
272
await expect ( page ) . toHaveURL ( '/settings/tokens/new' ) ;
276
273
@@ -282,7 +279,9 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
282
279
await expect ( page . locator ( '[data-test-scopes-group] [data-test-error]' ) ) . toHaveCount ( 0 ) ;
283
280
} ) ;
284
281
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
+
286
285
await page . goto ( '/settings/tokens/new' ) ;
287
286
await expect ( page ) . toHaveURL ( '/settings/tokens/new' ) ;
288
287
@@ -293,19 +292,17 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
293
292
await expect ( page . locator ( '[data-test-scopes-group] [data-test-error]' ) ) . toBeVisible ( ) ;
294
293
} ) ;
295
294
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' ] ,
309
306
} ) ;
310
307
311
308
await page . goto ( '/settings/tokens/new?from=1' ) ;
@@ -323,10 +320,7 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
323
320
) ;
324
321
await page . click ( '[data-test-generate]' ) ;
325
322
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' } } } ) ;
330
324
expect ( newToken , 'New API token has been created in the backend database' ) . toBeTruthy ( ) ;
331
325
332
326
await expect ( page ) . toHaveURL ( '/settings/tokens' ) ;
@@ -335,7 +329,9 @@ test.describe('/settings/tokens/new', { tag: '@routes' }, () => {
335
329
await expect ( page ) . toHaveURL ( '/settings/tokens/new' ) ;
336
330
} ) ;
337
331
338
- test ( 'token not found' , async ( { page } ) => {
332
+ test ( 'token not found' , async ( { page, msw } ) => {
333
+ await prepare ( msw ) ;
334
+
339
335
await page . goto ( '/settings/tokens/new?from=1' ) ;
340
336
await expect ( page ) . toHaveURL ( '/settings/tokens/new?from=1' ) ;
341
337
await expect ( page . locator ( '[data-test-title]' ) ) . toHaveText ( 'Token not found' ) ;
0 commit comments