Skip to content

Commit 7d34eec

Browse files
committed
mirage/crate: Replace user|teamOwners relationships with crate-ownership model
1 parent 85d8284 commit 7d34eec

File tree

4 files changed

+38
-16
lines changed

4 files changed

+38
-16
lines changed

mirage/fixtures/crate-ownerships.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
export default [
2+
{
3+
crateId: 'nanomsg',
4+
teamId: 1,
5+
},
6+
{
7+
crateId: 'nanomsg',
8+
teamId: 303,
9+
},
10+
{
11+
crateId: 'nanomsg',
12+
userId: 2,
13+
},
14+
{
15+
crateId: 'nanomsg',
16+
userId: 303,
17+
},
18+
];

mirage/models/crate.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,5 @@ import { Model, hasMany } from 'ember-cli-mirage';
33
export default Model.extend({
44
categories: hasMany(),
55
keywords: hasMany(),
6-
teamOwners: hasMany('team'),
76
versions: hasMany(),
8-
userOwners: hasMany('user'),
97
});

mirage/route-handlers/crates.js

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -99,27 +99,31 @@ export function register(server) {
9999
let crate = schema.crates.find(crateId);
100100
if (!crate) return notFound();
101101

102-
let response = this.serialize(crate.userOwners);
102+
let ownerships = schema.crateOwnerships.where({ crateId }).filter(it => it.userId).models;
103103

104-
response.users.forEach(user => {
105-
user.kind = 'user';
106-
});
107-
108-
return response;
104+
return {
105+
users: ownerships.map(it => {
106+
let json = this.serialize(it.user, 'user').user;
107+
json.kind = 'user';
108+
return json;
109+
}),
110+
};
109111
});
110112

111113
server.get('/api/v1/crates/:crate_id/owner_team', function (schema, request) {
112114
let crateId = request.params.crate_id;
113115
let crate = schema.crates.find(crateId);
114116
if (!crate) return notFound();
115117

116-
let response = this.serialize(crate.teamOwners);
118+
let ownerships = schema.crateOwnerships.where({ crateId }).filter(it => it.teamId).models;
117119

118-
response.teams.forEach(team => {
119-
team.kind = 'team';
120-
});
121-
122-
return response;
120+
return {
121+
teams: ownerships.map(it => {
122+
let json = this.serialize(it.team, 'team').team;
123+
json.kind = 'team';
124+
return json;
125+
}),
126+
};
123127
});
124128

125129
server.get('/api/v1/crates/:crate_id/reverse_dependencies', function (schema, request) {

tests/mirage/crates-test.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -685,7 +685,8 @@ module('Mirage | Crates', function (hooks) {
685685

686686
test('returns the list of users that own the specified crate', async function (assert) {
687687
let user = this.server.create('user', { name: 'John Doe' });
688-
this.server.create('crate', { name: 'rand', userOwners: [user] });
688+
let crate = this.server.create('crate', { name: 'rand' });
689+
this.server.create('crate-ownership', { crate, user });
689690

690691
let response = await fetch('/api/v1/crates/rand/owner_user');
691692
assert.equal(response.status, 200);
@@ -729,7 +730,8 @@ module('Mirage | Crates', function (hooks) {
729730

730731
test('returns the list of teams that own the specified crate', async function (assert) {
731732
let team = this.server.create('team', { name: 'maintainers' });
732-
this.server.create('crate', { name: 'rand', teamOwners: [team] });
733+
let crate = this.server.create('crate', { name: 'rand' });
734+
this.server.create('crate-ownership', { crate, team });
733735

734736
let response = await fetch('/api/v1/crates/rand/owner_team');
735737
assert.equal(response.status, 200);

0 commit comments

Comments
 (0)