Skip to content

Commit 1ea2da8

Browse files
committed
e2e/routes/settings/tokens/new: Migrate from mirage to @crates-io/msw
1 parent b710303 commit 1ea2da8

File tree

1 file changed

+64
-68
lines changed

1 file changed

+64
-68
lines changed

e2e/routes/settings/tokens/new.spec.ts

Lines changed: 64 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,24 @@
1+
import { defer } from '@/e2e/deferred';
12
import { expect, test } from '@/e2e/helper';
2-
import { Response } from 'miragejs';
3+
import { http, HttpResponse } from 'msw';
34

45
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',
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

Comments
 (0)