Skip to content

Commit ba949ae

Browse files
committed
msw: Implement GET /api/v1/crates/:name/:version/readme request handler
1 parent 99f564d commit ba949ae

File tree

3 files changed

+57
-1
lines changed

3 files changed

+57
-1
lines changed

packages/crates-io-msw/handlers/versions.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ import dependencies from './versions/dependencies.js';
22
import downloads from './versions/downloads.js';
33
import getVersion from './versions/get.js';
44
import listVersions from './versions/list.js';
5+
import readme from './versions/readme.js';
56
import unyankVersion from './versions/unyank.js';
67
import yankVersion from './versions/yank.js';
78

8-
export default [listVersions, getVersion, yankVersion, unyankVersion, dependencies, downloads];
9+
export default [listVersions, getVersion, yankVersion, unyankVersion, dependencies, downloads, readme];
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { http, HttpResponse } from 'msw';
2+
3+
import { db } from '../../index.js';
4+
5+
export default http.get('/api/v1/crates/:name/:version/readme', async ({ params }) => {
6+
let crate = db.crate.findFirst({ where: { name: { equals: params.name } } });
7+
if (!crate) return HttpResponse.html('', { status: 403 });
8+
9+
let version = db.version.findFirst({
10+
where: {
11+
crate: { id: { equals: crate.id } },
12+
num: { equals: params.version },
13+
},
14+
});
15+
if (!version || !version.readme) return HttpResponse.html('', { status: 403 });
16+
17+
return HttpResponse.html(version.readme);
18+
});
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 404 for unknown crates', async function () {
6+
let response = await fetch('/api/v1/crates/foo/1.0.0/readme');
7+
assert.strictEqual(response.status, 403);
8+
assert.strictEqual(await response.text(), '');
9+
});
10+
11+
test('returns 404 for unknown versions', async function () {
12+
db.crate.create({ name: 'rand' });
13+
14+
let response = await fetch('/api/v1/crates/rand/1.0.0/readme');
15+
assert.strictEqual(response.status, 403);
16+
assert.strictEqual(await response.text(), '');
17+
});
18+
19+
test('returns 404 for versions without README', async function () {
20+
let crate = db.crate.create({ name: 'rand' });
21+
db.version.create({ crate, num: '1.0.0' });
22+
23+
let response = await fetch('/api/v1/crates/rand/1.0.0/readme');
24+
assert.strictEqual(response.status, 403);
25+
assert.strictEqual(await response.text(), '');
26+
});
27+
28+
test('returns the README as raw HTML', async function () {
29+
let readme = 'lorem ipsum <i>est</i> dolor!';
30+
31+
let crate = db.crate.create({ name: 'rand' });
32+
db.version.create({ crate, num: '1.0.0', readme: readme });
33+
34+
let response = await fetch('/api/v1/crates/rand/1.0.0/readme');
35+
assert.strictEqual(response.status, 200);
36+
assert.strictEqual(await response.text(), readme);
37+
});

0 commit comments

Comments
 (0)