Skip to content

Commit d9d98c6

Browse files
committed
e2e/routes/crate/delete: Migrate from mirage to @crates-io/msw
1 parent eb0bec9 commit d9d98c6

File tree

1 file changed

+32
-38
lines changed

1 file changed

+32
-38
lines changed

e2e/routes/crate/delete.spec.ts

Lines changed: 32 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,45 @@
1+
import { defer } from '@/e2e/deferred';
12
import { expect, test } from '@/e2e/helper';
3+
import { http, HttpResponse } from 'msw';
24

35
test.describe('Route: crate.delete', { tag: '@routes' }, () => {
4-
async function prepare({ mirage }) {
5-
await mirage.addHook(server => {
6-
let user = server.create('user');
6+
async function prepare(msw) {
7+
let user = msw.db.user.create();
78

8-
let crate = server.create('crate', { name: 'foo' });
9-
server.create('version', { crate });
10-
server.create('crate-ownership', { crate, user });
9+
let crate = msw.db.crate.create({ name: 'foo' });
10+
msw.db.version.create({ crate });
11+
msw.db.crateOwnership.create({ crate, user });
1112

12-
authenticateAs(user);
13-
});
13+
await msw.authenticateAs(user);
1414
}
1515

16-
test('unauthenticated', async ({ mirage, page }) => {
17-
await mirage.addHook(server => {
18-
let crate = server.create('crate', { name: 'foo' });
19-
server.create('version', { crate });
20-
});
16+
test('unauthenticated', async ({ msw, page }) => {
17+
let crate = msw.db.crate.create({ name: 'foo' });
18+
msw.db.version.create({ crate });
2119

2220
await page.goto('/crates/foo/delete');
2321
await expect(page).toHaveURL('/crates/foo/delete');
2422
await expect(page.locator('[data-test-title]')).toHaveText('This page requires authentication');
2523
await expect(page.locator('[data-test-login]')).toBeVisible();
2624
});
2725

28-
test('not an owner', async ({ mirage, page }) => {
29-
await mirage.addHook(server => {
30-
let user1 = server.create('user');
31-
authenticateAs(user1);
26+
test('not an owner', async ({ msw, page }) => {
27+
let user1 = msw.db.user.create();
28+
await msw.authenticateAs(user1);
3229

33-
let user2 = server.create('user');
34-
let crate = server.create('crate', { name: 'foo' });
35-
server.create('version', { crate });
36-
server.create('crate-ownership', { crate, user: user2 });
37-
});
30+
let user2 = msw.db.user.create();
31+
let crate = msw.db.crate.create({ name: 'foo' });
32+
msw.db.version.create({ crate });
33+
msw.db.crateOwnership.create({ crate, user: user2 });
3834

3935
await page.goto('/crates/foo/delete');
4036
await expect(page).toHaveURL('/crates/foo/delete');
4137
await expect(page.locator('[data-test-title]')).toHaveText('This page is only accessible by crate owners');
4238
await expect(page.locator('[data-test-go-back]')).toBeVisible();
4339
});
4440

45-
test('happy path', async ({ mirage, page, percy }) => {
46-
await prepare({ mirage });
41+
test('happy path', async ({ msw, page, percy }) => {
42+
await prepare(msw);
4743

4844
await page.goto('/crates/foo/delete');
4945
await expect(page).toHaveURL('/crates/foo/delete');
@@ -61,16 +57,15 @@ test.describe('Route: crate.delete', { tag: '@routes' }, () => {
6157
let message = 'Crate foo has been successfully deleted.';
6258
await expect(page.locator('[data-test-notification-message="success"]')).toHaveText(message);
6359

64-
let crate = await page.evaluate(() => server.schema.crates.findBy({ name: 'foo' }));
60+
let crate = msw.db.crate.findFirst({ where: { name: { equals: 'foo' } } });
6561
expect(crate).toBeNull();
6662
});
6763

68-
test('loading state', async ({ page, mirage }) => {
69-
await prepare({ mirage });
70-
await mirage.addHook(server => {
71-
globalThis.deferred = require('rsvp').defer();
72-
server.delete('/api/v1/crates/foo', () => globalThis.deferred.promise);
73-
});
64+
test('loading state', async ({ page, msw }) => {
65+
await prepare(msw);
66+
67+
let deferred = defer();
68+
msw.worker.use(http.delete('/api/v1/crates/:name', () => deferred.promise));
7469

7570
await page.goto('/crates/foo/delete');
7671
await page.fill('[data-test-reason]', "I don't need this crate anymore");
@@ -80,16 +75,15 @@ test.describe('Route: crate.delete', { tag: '@routes' }, () => {
8075
await expect(page.locator('[data-test-confirmation-checkbox]')).toBeDisabled();
8176
await expect(page.locator('[data-test-delete-button]')).toBeDisabled();
8277

83-
await page.evaluate(async () => globalThis.deferred.resolve());
78+
deferred.resolve();
8479
await expect(page).toHaveURL('/');
8580
});
8681

87-
test('error state', async ({ page, mirage }) => {
88-
await prepare({ mirage });
89-
await mirage.addHook(server => {
90-
let payload = { errors: [{ detail: 'only crates without reverse dependencies can be deleted after 72 hours' }] };
91-
server.delete('/api/v1/crates/foo', payload, 422);
92-
});
82+
test('error state', async ({ page, msw }) => {
83+
await prepare(msw);
84+
85+
let payload = { errors: [{ detail: 'only crates without reverse dependencies can be deleted after 72 hours' }] };
86+
msw.worker.use(http.delete('/api/v1/crates/:name', () => HttpResponse.json(payload, { status: 422 })));
9387

9488
await page.goto('/crates/foo/delete');
9589
await page.fill('[data-test-reason]', "I don't need this crate anymore");

0 commit comments

Comments
 (0)