Skip to content

Commit ef2ce9a

Browse files
committed
msw: Implement GET /api/v1/teams/:team_id request handler
1 parent 1ff7d07 commit ef2ce9a

File tree

4 files changed

+51
-1
lines changed

4 files changed

+51
-1
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import getTeam from './teams/get.js';
2+
3+
export default [getTeam];
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { http, HttpResponse } from 'msw';
2+
3+
import { db } from '../../index.js';
4+
import { serializeTeam } from '../../serializers/team.js';
5+
import { notFound } from '../../utils/handlers.js';
6+
7+
export default http.get('/api/v1/teams/:team_id', ({ params }) => {
8+
let login = params.team_id;
9+
let team = db.team.findFirst({ where: { login: { equals: login } } });
10+
if (!team) {
11+
return notFound();
12+
}
13+
14+
return HttpResponse.json({ team: serializeTeam(team) });
15+
});
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { assert, test } from 'vitest';
2+
3+
import { db } from '../../index.js';
4+
5+
test('returns 404 for unknown teams', async function () {
6+
let response = await fetch('/api/v1/teams/foo');
7+
assert.strictEqual(response.status, 404);
8+
assert.deepEqual(await response.json(), { errors: [{ detail: 'Not Found' }] });
9+
});
10+
11+
test('returns a team object for known teams', async function () {
12+
let team = db.team.create({ name: 'maintainers' });
13+
14+
let response = await fetch(`/api/v1/teams/${team.login}`);
15+
assert.strictEqual(response.status, 200);
16+
assert.deepEqual(await response.json(), {
17+
team: {
18+
id: 1,
19+
avatar: 'https://avatars1.githubusercontent.com/u/14631425?v=4',
20+
login: 'github:rust-lang:maintainers',
21+
name: 'maintainers',
22+
url: 'https://github.com/rust-lang',
23+
},
24+
});
25+
});

packages/crates-io-msw/index.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import categoryHandlers from './handlers/categories.js';
22
import keywordHandlers from './handlers/keywords.js';
33
import metadataHandlers from './handlers/metadata.js';
44
import sessionHandlers from './handlers/sessions.js';
5+
import teamHandlers from './handlers/teams.js';
56
import apiToken from './models/api-token.js';
67
import category from './models/category.js';
78
import crateOwnerInvitation from './models/crate-owner-invitation.js';
@@ -16,7 +17,13 @@ import versionDownload from './models/version-download.js';
1617
import version from './models/version.js';
1718
import { factory } from './utils/factory.js';
1819

19-
export const handlers = [...categoryHandlers, ...keywordHandlers, ...metadataHandlers, ...sessionHandlers];
20+
export const handlers = [
21+
...categoryHandlers,
22+
...keywordHandlers,
23+
...metadataHandlers,
24+
...sessionHandlers,
25+
...teamHandlers,
26+
];
2027

2128
export const db = factory({
2229
apiToken,

0 commit comments

Comments
 (0)