Skip to content

Commit 6adbf6f

Browse files
committed
msw: Implement DELETE /api/v1/me/tokens/:tokenId request handler
1 parent 1f9d61a commit 6adbf6f

File tree

3 files changed

+51
-1
lines changed

3 files changed

+51
-1
lines changed
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import createToken from './api-tokens/create.js';
2+
import deleteToken from './api-tokens/delete.js';
23
import listTokens from './api-tokens/list.js';
34

4-
export default [createToken, listTokens];
5+
export default [createToken, listTokens, deleteToken];
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { http, HttpResponse } from 'msw';
2+
3+
import { db } from '../../index.js';
4+
import { getSession } from '../../utils/session.js';
5+
6+
export default http.delete('/api/v1/me/tokens/:tokenId', async ({ params }) => {
7+
let { user } = getSession();
8+
if (!user) {
9+
return HttpResponse.json({ errors: [{ detail: 'must be logged in to perform that action' }] }, { status: 403 });
10+
}
11+
12+
let { tokenId } = params;
13+
db.apiToken.delete({
14+
where: {
15+
id: { equals: parseInt(tokenId) },
16+
user: { id: { equals: user.id } },
17+
},
18+
});
19+
20+
return HttpResponse.json({});
21+
});
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import { assert, test } from 'vitest';
2+
3+
import { db } from '../../index.js';
4+
5+
test('revokes an API token', async function () {
6+
let user = db.user.create();
7+
db.mswSession.create({ user });
8+
9+
let token = db.apiToken.create({ user });
10+
11+
let response = await fetch(`/api/v1/me/tokens/${token.id}`, { method: 'DELETE' });
12+
assert.strictEqual(response.status, 200);
13+
assert.deepEqual(await response.json(), {});
14+
15+
let tokens = db.apiToken.findMany({});
16+
assert.strictEqual(tokens.length, 0);
17+
});
18+
19+
test('returns an error if unauthenticated', async function () {
20+
let user = db.user.create();
21+
let token = db.apiToken.create({ user });
22+
23+
let response = await fetch(`/api/v1/me/tokens/${token.id}`, { method: 'DELETE' });
24+
assert.strictEqual(response.status, 403);
25+
assert.deepEqual(await response.json(), {
26+
errors: [{ detail: 'must be logged in to perform that action' }],
27+
});
28+
});

0 commit comments

Comments
 (0)