Skip to content

Commit fdb93cb

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

File tree

1 file changed

+63
-63
lines changed

1 file changed

+63
-63
lines changed

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

Lines changed: 63 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,24 @@
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

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

Comments
 (0)