Skip to content

Commit 85d8284

Browse files
committed
mirage/route-handlers/me: Add support for owned_crates
1 parent 8022252 commit 85d8284

File tree

4 files changed

+47
-2
lines changed

4 files changed

+47
-2
lines changed

mirage/factories/crate-ownership.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { Factory } from 'ember-cli-mirage';
2+
3+
export default Factory.extend({
4+
emailNotifications: true,
5+
6+
afterCreate(model) {
7+
if (!model.crate) {
8+
throw new Error('Missing `crate` relationship on `crate-ownership`');
9+
}
10+
if (model.team && model.user) {
11+
throw new Error('`team` and `user` on a `crate-ownership` are mutually exclusive');
12+
}
13+
},
14+
});

mirage/models/crate-ownership.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { Model, belongsTo } from 'ember-cli-mirage';
2+
3+
export default Model.extend({
4+
crate: belongsTo(),
5+
team: belongsTo(),
6+
user: belongsTo(),
7+
});

mirage/route-handlers/me.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,15 @@ export function register(server) {
99
return new Response(403, {}, { errors: [{ detail: 'must be logged in to perform that action' }] });
1010
}
1111

12+
let ownerships = schema.crateOwnerships.where({ userId: user.id }).models;
13+
1214
let json = this.serialize(user);
1315

14-
// TODO fill this with data from the `schema`
15-
json.owned_crates = [];
16+
json.owned_crates = ownerships.map(ownership => ({
17+
id: ownership.crate.id,
18+
name: ownership.crate.name,
19+
email_notifications: ownership.emailNotifications,
20+
}));
1621

1722
return json;
1823
});

tests/mirage/me-test.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,25 @@ module('Mirage | /me', function (hooks) {
3232
});
3333
});
3434

35+
test('returns a list of `owned_crates`', async function (assert) {
36+
let user = this.server.create('user');
37+
this.server.create('mirage-session', { user });
38+
39+
let [crate1, , crate3] = this.server.createList('crate', 3);
40+
41+
this.server.create('crate-ownership', { crate: crate1, user });
42+
this.server.create('crate-ownership', { crate: crate3, user });
43+
44+
let response = await fetch('/api/v1/me');
45+
assert.equal(response.status, 200);
46+
47+
let responsePayload = await response.json();
48+
assert.deepEqual(responsePayload.owned_crates, [
49+
{ id: 'crate-0', name: 'crate-0', email_notifications: true },
50+
{ id: 'crate-2', name: 'crate-2', email_notifications: true },
51+
]);
52+
});
53+
3554
test('returns an error if unauthenticated', async function (assert) {
3655
this.server.create('user');
3756

0 commit comments

Comments
 (0)