Skip to content

Commit adf5ec2

Browse files
committed
mirage: Add multiple ids[] parameters support for GET /api/v1/crates/:id/versions
1 parent 04b22b6 commit adf5ec2

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

mirage/route-handlers/crates.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,12 @@ export function register(server) {
153153
let crate = schema.crates.findBy({ name });
154154
if (!crate) return notFound();
155155

156-
let versions = crate.versions.sort((a, b) => compareIsoDates(b.created_at, a.created_at));
156+
let versions = crate.versions;
157+
let { ids } = request.queryParams;
158+
if (ids) {
159+
versions = versions.filter(version => ids.includes(version.num));
160+
}
161+
versions = versions.sort((a, b) => compareIsoDates(b.created_at, a.created_at));
157162
let total = versions.length;
158163
let include = request.queryParams?.include ?? '';
159164
let release_tracks = include.split(',').includes('release_tracks') && releaseTracks(crate.versions);

tests/mirage/crates/versions/list-test.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,21 @@ module('Mirage | GET /api/v1/crates/:id/versions', function (hooks) {
108108
});
109109
});
110110

111+
test('supports multiple `ids[]` parameters', async function (assert) {
112+
let user = this.server.create('user');
113+
let crate = this.server.create('crate', { name: 'rand' });
114+
this.server.create('version', { crate, num: '1.0.0' });
115+
this.server.create('version', { crate, num: '1.1.0', publishedBy: user });
116+
this.server.create('version', { crate, num: '1.2.0', rust_version: '1.69' });
117+
let response = await fetch('/api/v1/crates/rand/versions?ids[]=1.0.0&ids[]=1.2.0');
118+
assert.strictEqual(response.status, 200);
119+
let json = await response.json();
120+
assert.deepEqual(
121+
json.versions.map(v => v.num),
122+
['1.0.0', '1.2.0'],
123+
);
124+
});
125+
111126
test('include `release_tracks` meta', async function (assert) {
112127
let user = this.server.create('user');
113128
let crate = this.server.create('crate', { name: 'rand' });

0 commit comments

Comments
 (0)