Skip to content

Commit 02b86e2

Browse files
committed
msw: Implement PUT /api/v1/confirm/:token request handler
1 parent 26ca76a commit 02b86e2

File tree

3 files changed

+55
-1
lines changed

3 files changed

+55
-1
lines changed
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1+
import confirmEmail from './users/confirm-email.js';
12
import getUser from './users/get.js';
23
import me from './users/me.js';
34
import resend from './users/resend.js';
45
import updateUser from './users/update.js';
56

6-
export default [getUser, updateUser, resend, me];
7+
export default [getUser, updateUser, resend, me, confirmEmail];
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+
5+
export default http.put('/api/v1/confirm/:token', ({ params }) => {
6+
let { token } = params;
7+
8+
let user = db.user.findFirst({ where: { emailVerificationToken: { equals: token } } });
9+
if (!user) {
10+
return HttpResponse.json({ errors: [{ detail: 'Email belonging to token not found.' }] }, { status: 400 });
11+
}
12+
13+
db.user.update({ where: { id: user.id }, data: { emailVerified: true, emailVerificationToken: null } });
14+
15+
return HttpResponse.json({ ok: true });
16+
});
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import { assert, test } from 'vitest';
2+
3+
import { db } from '../../index.js';
4+
5+
test('returns `ok: true` for a known token (unauthenticated)', async function () {
6+
let user = db.user.create({ emailVerificationToken: 'foo' });
7+
assert.strictEqual(user.emailVerified, false);
8+
9+
let response = await fetch('/api/v1/confirm/foo', { method: 'PUT' });
10+
assert.strictEqual(response.status, 200);
11+
assert.deepEqual(await response.json(), { ok: true });
12+
13+
user = db.user.findFirst({ where: { id: user.id } });
14+
assert.strictEqual(user.emailVerified, true);
15+
});
16+
17+
test('returns `ok: true` for a known token (authenticated)', async function () {
18+
let user = db.user.create({ emailVerificationToken: 'foo' });
19+
assert.strictEqual(user.emailVerified, false);
20+
21+
db.mswSession.create({ user });
22+
23+
let response = await fetch('/api/v1/confirm/foo', { method: 'PUT' });
24+
assert.strictEqual(response.status, 200);
25+
assert.deepEqual(await response.json(), { ok: true });
26+
27+
user = db.user.findFirst({ where: { id: user.id } });
28+
assert.strictEqual(user.emailVerified, true);
29+
});
30+
31+
test('returns an error for unknown tokens', async function () {
32+
let response = await fetch('/api/v1/confirm/unknown', { method: 'PUT' });
33+
assert.strictEqual(response.status, 400);
34+
assert.deepEqual(await response.json(), {
35+
errors: [{ detail: 'Email belonging to token not found.' }],
36+
});
37+
});

0 commit comments

Comments
 (0)