Skip to content

Commit 17ab337

Browse files
committed
mirage/dependency: Ensure a dependency always has crate and version relationships
1 parent d1210db commit 17ab337

File tree

3 files changed

+27
-14
lines changed

3 files changed

+27
-14
lines changed

mirage/factories/dependency.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,13 @@ export default Factory.extend({
99
optional: i => i % 4 !== 3,
1010
req: i => REQS[i % REQS.length],
1111
target: null,
12+
13+
afterCreate(self) {
14+
if (!self.crateId) {
15+
throw new Error(`Missing \`crate\` relationship on \`dependency:${self.id}\``);
16+
}
17+
if (!self.versionId) {
18+
throw new Error(`Missing \`version\` relationship on \`dependency:${self.id}\``);
19+
}
20+
},
1221
});

mirage/route-handlers/crates.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ export function register(server) {
7979
let version = schema.versions.findBy({ crateId, num });
8080
if (!version) return { errors: [{ detail: `crate \`${crateId}\` does not have a version \`${num}\`` }] };
8181

82-
return schema.dependencies.where({ version_id: version.id });
82+
return schema.dependencies.where({ versionId: version.id });
8383
});
8484

8585
server.get('/api/v1/crates/:crate_id/:version_num/downloads', function(schema, request) {
@@ -129,11 +129,11 @@ export function register(server) {
129129

130130
let { start, end } = pageParams(request);
131131

132-
let allDependencies = schema.dependencies.where({ crate_id: crateId });
132+
let allDependencies = schema.dependencies.where({ crateId: crateId });
133133
let dependencies = allDependencies.slice(start, end);
134134
let total = allDependencies.length;
135135

136-
let versions = schema.versions.find(dependencies.models.map(it => it.version_id));
136+
let versions = schema.versions.find(dependencies.models.map(it => it.versionId));
137137

138138
return {
139139
...this.serialize(dependencies),

tests/mirage/crates-test.js

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -504,9 +504,13 @@ module('Mirage | Keywords', function(hooks) {
504504
test('returns a list of dependencies belonging to the specified crate version', async function(assert) {
505505
this.server.create('crate', { name: 'rand' });
506506
let version = this.server.create('version', { crateId: 'rand', num: '1.0.0' });
507-
this.server.create('dependency', { crate_id: 'foo', version_id: version.id });
508-
this.server.create('dependency', { crate_id: 'bar', version_id: version.id });
509-
this.server.create('dependency', { crate_id: 'baz', version_id: version.id });
507+
508+
this.server.create('crate', { name: 'foo' });
509+
this.server.create('dependency', { crateId: 'foo', versionId: version.id });
510+
this.server.create('crate', { name: 'bar' });
511+
this.server.create('dependency', { crateId: 'bar', versionId: version.id });
512+
this.server.create('crate', { name: 'baz' });
513+
this.server.create('dependency', { crateId: 'baz', versionId: version.id });
510514

511515
let response = await fetch('/api/v1/crates/rand/1.0.0/dependencies');
512516
assert.equal(response.status, 200);
@@ -736,15 +740,15 @@ module('Mirage | Keywords', function(hooks) {
736740
this.server.create('crate', { name: 'foo' });
737741

738742
this.server.create('dependency', {
739-
crate_id: 'foo',
740-
version_id: this.server.create('version', {
743+
crateId: 'foo',
744+
versionId: this.server.create('version', {
741745
crate: this.server.create('crate', { name: 'bar' }),
742746
}).id,
743747
});
744748

745749
this.server.create('dependency', {
746-
crate_id: 'foo',
747-
version_id: this.server.create('version', {
750+
crateId: 'foo',
751+
versionId: this.server.create('version', {
748752
crate: this.server.create('crate', { name: 'baz' }),
749753
}).id,
750754
});
@@ -824,8 +828,8 @@ module('Mirage | Keywords', function(hooks) {
824828
this.server.create('crate', { name: 'foo' });
825829

826830
this.server.createList('dependency', 25, {
827-
crate_id: 'foo',
828-
version_id: () =>
831+
crateId: 'foo',
832+
versionId: () =>
829833
this.server.create('version', {
830834
crate: () => this.server.create('crate', { name: 'bar' }),
831835
}).id,
@@ -850,8 +854,8 @@ module('Mirage | Keywords', function(hooks) {
850854
crate: i => crates[i],
851855
});
852856
this.server.createList('dependency', versions.length, {
853-
crate_id: 'foo',
854-
version_id: i => versions[i].id,
857+
crateId: 'foo',
858+
versionId: i => versions[i].id,
855859
});
856860

857861
let response = await fetch('/api/v1/crates/foo/reverse_dependencies?page=2&per_page=5');

0 commit comments

Comments
 (0)