diff --git a/mirage/route-handlers/me.js b/mirage/route-handlers/me.js index 2f130022034..216a88f53ae 100644 --- a/mirage/route-handlers/me.js +++ b/mirage/route-handlers/me.js @@ -107,6 +107,15 @@ export function register(server) { return schema.crateOwnerInvitations.where({ inviteeId: user.id }); }); + server.get('/api/private/crate_owner_invitations', function (schema) { + let { user } = getSession(schema); + if (!user) { + return new Response(403, {}, { errors: [{ detail: 'must be logged in to perform that action' }] }); + } + + return schema.crateOwnerInvitations.where({ inviteeId: user.id }); + }); + server.put('/api/v1/me/crate_owner_invitations/:crate_id', (schema, request) => { let { user } = getSession(schema); if (!user) { diff --git a/tests/mirage/me/crate-owner-invitations/list-test.js b/tests/mirage/me/crate-owner-invitations/list-test.js index 6e4116819f2..a65019c8f21 100644 --- a/tests/mirage/me/crate-owner-invitations/list-test.js +++ b/tests/mirage/me/crate-owner-invitations/list-test.js @@ -44,7 +44,7 @@ module('Mirage | GET /api/v1/me/crate_owner_invitations', function (hooks) { inviter: inviter2, }); - let response = await fetch('/api/v1/me/crate_owner_invitations'); + let response = await fetch('/api/private/crate_owner_invitations'); assert.equal(response.status, 200); assert.deepEqual(await response.json(), { crate_owner_invitations: [ @@ -92,7 +92,102 @@ module('Mirage | GET /api/v1/me/crate_owner_invitations', function (hooks) { }); test('returns an error if unauthenticated', async function (assert) { - let response = await fetch('/api/v1/me/crate_owner_invitations'); + let response = await fetch('/api/private/crate_owner_invitations'); + assert.equal(response.status, 403); + assert.deepEqual(await response.json(), { + errors: [{ detail: 'must be logged in to perform that action' }], + }); + }); +}); + +module('Mirage | GET /api/private/crate_owner_invitations', function (hooks) { + setupTest(hooks); + setupMirage(hooks); + + test('empty case', async function (assert) { + let user = this.server.create('user'); + this.server.create('mirage-session', { user }); + + let response = await fetch('/api/private/crate_owner_invitations'); + assert.equal(response.status, 200); + assert.deepEqual(await response.json(), { crate_owner_invitations: [] }); + }); + + test('returns the list of invitations for the authenticated user', async function (assert) { + let nanomsg = this.server.create('crate', { name: 'nanomsg' }); + this.server.create('version', { crate: nanomsg }); + + let ember = this.server.create('crate', { name: 'ember-rs' }); + this.server.create('version', { crate: ember }); + + let user = this.server.create('user'); + this.server.create('mirage-session', { user }); + + let inviter = this.server.create('user', { name: 'janed' }); + this.server.create('crate-owner-invitation', { + crate: nanomsg, + createdAt: '2016-12-24T12:34:56Z', + invitee: user, + inviter, + }); + + let inviter2 = this.server.create('user', { name: 'wycats' }); + this.server.create('crate-owner-invitation', { + crate: ember, + createdAt: '2020-12-31T12:34:56Z', + invitee: user, + inviter: inviter2, + }); + + let response = await fetch('/api/private/crate_owner_invitations'); + assert.equal(response.status, 200); + assert.deepEqual(await response.json(), { + crate_owner_invitations: [ + { + crate_id: Number(nanomsg.id), + crate_name: 'nanomsg', + created_at: '2016-12-24T12:34:56Z', + invited_by_username: 'janed', + invitee_id: Number(user.id), + inviter_id: Number(inviter.id), + }, + { + crate_id: Number(ember.id), + crate_name: 'ember-rs', + created_at: '2020-12-31T12:34:56Z', + invited_by_username: 'wycats', + invitee_id: Number(user.id), + inviter_id: Number(inviter2.id), + }, + ], + users: [ + { + avatar: user.avatar, + id: Number(user.id), + login: user.login, + name: user.name, + url: user.url, + }, + { + avatar: 'https://avatars1.githubusercontent.com/u/14631425?v=4', + id: Number(inviter.id), + login: 'janed', + name: 'janed', + url: 'https://github.com/janed', + }, + { + avatar: 'https://avatars1.githubusercontent.com/u/14631425?v=4', + id: Number(inviter2.id), + login: 'wycats', + name: 'wycats', + url: 'https://github.com/wycats', + }, + ], + }); + }); + + test('returns an error if unauthenticated', async function (assert) { + let response = await fetch('/api/private/crate_owner_invitations'); assert.equal(response.status, 403); assert.deepEqual(await response.json(), { errors: [{ detail: 'must be logged in to perform that action' }], diff --git a/tests/mirage/private/crate-owner-invitations/get-test.js b/tests/mirage/private/crate-owner-invitations/get-test.js index 6bb61154e5b..f53d8fdbb37 100644 --- a/tests/mirage/private/crate-owner-invitations/get-test.js +++ b/tests/mirage/private/crate-owner-invitations/get-test.js @@ -46,6 +46,7 @@ module('Mirage | GET /api/private/crate_owner_invitations', function (hooks) { invited_by_username: 'janed', invitee_id: Number(user.id), inviter_id: Number(inviter.id), + expires_at: '2017-01-24T12:34:56Z', }, { crate_id: Number(ember.id), @@ -54,6 +55,7 @@ module('Mirage | GET /api/private/crate_owner_invitations', function (hooks) { invited_by_username: 'wycats', invitee_id: Number(user.id), inviter_id: Number(inviter2.id), + expires_at: '2017-01-31T12:34:56Z', }, ], users: [