Skip to content

Commit 28c4bf4

Browse files
committed
e2e/acceptance/login: Migrate from mirage to @crates-io/msw
1 parent 31cd29a commit 28c4bf4

File tree

1 file changed

+35
-36
lines changed

1 file changed

+35
-36
lines changed

e2e/acceptance/login.spec.ts

Lines changed: 35 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import { test, expect } from '@/e2e/helper';
2+
import { http, HttpResponse } from 'msw';
23

34
test.describe('Acceptance | Login', { tag: '@acceptance' }, () => {
4-
test('successful login', async ({ page, mirage }) => {
5+
test('successful login', async ({ page, msw }) => {
56
// mock `window.open()`
67
await page.addInitScript(() => {
78
globalThis.open = (url, target, features) => {
@@ -10,28 +11,32 @@ test.describe('Acceptance | Login', { tag: '@acceptance' }, () => {
1011
};
1112
});
1213

13-
await mirage.config({ trackRequests: true });
14-
await mirage.addHook(server => {
15-
server.get('/api/private/session/begin', { url: 'url-to-github-including-state-secret' });
16-
17-
server.get('/api/private/session/authorize', () => {
18-
let user = server.create('user');
19-
server.create('mirage-session', { user });
20-
return { ok: true };
21-
});
22-
23-
server.get('/api/v1/me', () => ({
24-
user: {
25-
id: 42,
26-
login: 'johnnydee',
27-
name: 'John Doe',
28-
29-
avatar: 'https://avatars2.githubusercontent.com/u/12345?v=4',
30-
url: 'https://github.com/johnnydee',
31-
},
32-
owned_crates: [],
33-
}));
34-
});
14+
msw.worker.use(
15+
http.get('/api/private/session/begin', () => HttpResponse.json({ url: 'url-to-github-including-state-secret' })),
16+
http.get('/api/private/session/authorize', ({ request }) => {
17+
let url = new URL(request.url);
18+
expect([...url.searchParams.keys()]).toEqual(['code', 'state']);
19+
expect(url.searchParams.get('code')).toBe('901dd10e07c7e9fa1cd5');
20+
expect(url.searchParams.get('state')).toBe('fYcUY3FMdUUz00FC7vLT7A');
21+
22+
let user = msw.db.user.create();
23+
msw.db.mswSession.create({ user });
24+
return HttpResponse.json({ ok: true });
25+
}),
26+
http.get('/api/v1/me', () =>
27+
HttpResponse.json({
28+
user: {
29+
id: 42,
30+
login: 'johnnydee',
31+
name: 'John Doe',
32+
33+
avatar: 'https://avatars2.githubusercontent.com/u/12345?v=4',
34+
url: 'https://github.com/johnnydee',
35+
},
36+
owned_crates: [],
37+
}),
38+
),
39+
);
3540

3641
await page.goto('/');
3742
await expect(page).toHaveURL('/');
@@ -52,16 +57,10 @@ test.describe('Acceptance | Login', { tag: '@acceptance' }, () => {
5257
window.postMessage(message, window.location.origin);
5358
}, message);
5459

55-
const queryParams = await page.evaluate(
56-
() =>
57-
server.pretender.handledRequests.find(req => req.url.startsWith('/api/private/session/authorize')).queryParams,
58-
);
59-
expect(queryParams).toEqual(message);
60-
6160
await expect(page.locator('[data-test-user-menu] [data-test-toggle]')).toHaveText('John Doe');
6261
});
6362

64-
test('failed login', async ({ page, mirage }) => {
63+
test('failed login', async ({ page, msw }) => {
6564
// mock `window.open()`
6665
await page.addInitScript(() => {
6766
globalThis.open = (url, target, features) => {
@@ -70,12 +69,12 @@ test.describe('Acceptance | Login', { tag: '@acceptance' }, () => {
7069
};
7170
});
7271

73-
await mirage.addHook(server => {
74-
server.get('/api/private/session/begin', { url: 'url-to-github-including-state-secret' });
75-
76-
let payload = { errors: [{ detail: 'Forbidden' }] };
77-
server.get('/api/private/session/authorize', payload, 403);
78-
});
72+
msw.worker.use(
73+
http.get('/api/private/session/begin', () => HttpResponse.json({ url: 'url-to-github-including-state-secret' })),
74+
http.get('/api/private/session/authorize', () =>
75+
HttpResponse.json({ errors: [{ detail: 'Forbidden' }] }, { status: 403 }),
76+
),
77+
);
7978

8079
await page.goto('/');
8180
await expect(page).toHaveURL('/');

0 commit comments

Comments
 (0)