Skip to content

Commit 117e636

Browse files
committed
msw: Implement PUT /api/v1/me/crate_owner_invitations/accept/:token request handler
1 parent b75b6b6 commit 117e636

File tree

3 files changed

+54
-1
lines changed

3 files changed

+54
-1
lines changed
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import legacyListInvites from './invites/legacy-list.js';
22
import listInvites from './invites/list.js';
33
import redeemByCrateId from './invites/redeem-by-crate-id.js';
4+
import redeemByToken from './invites/redeem-by-token.js';
45

5-
export default [listInvites, legacyListInvites, redeemByCrateId];
6+
export default [listInvites, legacyListInvites, redeemByCrateId, redeemByToken];
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { http, HttpResponse } from 'msw';
2+
3+
import { db } from '../../index.js';
4+
import { notFound } from '../../utils/handlers.js';
5+
6+
export default http.put('/api/v1/me/crate_owner_invitations/accept/:token', async ({ params }) => {
7+
let { token } = params;
8+
9+
let invite = db.crateOwnerInvitation.findFirst({ where: { token: { equals: token } } });
10+
if (!invite) return notFound();
11+
12+
db.crateOwnership.create({ crate: invite.crate, user: invite.invitee });
13+
db.crateOwnerInvitation.delete({ where: { id: invite.id } });
14+
15+
return HttpResponse.json({ crate_owner_invitation: { crate_id: invite.crate.id, accepted: true } });
16+
});
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import { assert, test } from 'vitest';
2+
3+
import { db } from '../../index.js';
4+
5+
test('can accept an invitation', async function () {
6+
let serde = db.crate.create({ name: 'serde' });
7+
db.version.create({ crate: serde });
8+
9+
let inviter = db.user.create();
10+
let invitee = db.user.create();
11+
db.mswSession.create({ user: invitee });
12+
13+
let invite = db.crateOwnerInvitation.create({ crate: serde, invitee, inviter });
14+
15+
let response = await fetch(`/api/v1/me/crate_owner_invitations/accept/${invite.token}`, { method: 'PUT' });
16+
assert.strictEqual(response.status, 200);
17+
assert.deepEqual(await response.json(), {
18+
crate_owner_invitation: {
19+
accepted: true,
20+
crate_id: serde.id,
21+
},
22+
});
23+
24+
let invites = db.crateOwnerInvitation.findMany({ where: { crate: { id: serde.id }, invitee: { id: invitee.id } } });
25+
assert.strictEqual(invites.length, 0);
26+
let owners = db.crateOwnership.findMany({ where: { crate: { id: serde.id }, user: { id: invitee.id } } });
27+
assert.strictEqual(owners.length, 1);
28+
});
29+
30+
test('returns 404 if invite does not exist', async function () {
31+
let user = db.user.create();
32+
db.mswSession.create({ user });
33+
34+
let response = await fetch('/api/v1/me/crate_owner_invitations/accept/secret-token', { method: 'PUT' });
35+
assert.strictEqual(response.status, 404);
36+
});

0 commit comments

Comments
 (0)