From 6af595976531b6fd98dd5f883ad201d5e977a734 Mon Sep 17 00:00:00 2001 From: Esteban Borai Date: Sun, 30 Oct 2022 21:16:31 -0300 Subject: [PATCH 1/4] feat: update mirage tests and route handlers for owner invites Uses `api/private` over `api/v1/me` for mirage pending owner invites endpoint. And also adds the `expires_at` attribute as part of the payload received as found in the `EncodableCrateOwnerInvitationV1` struct from the API. --- mirage/route-handlers/me.js | 2 +- tests/mirage/me/crate-owner-invitations/list-test.js | 10 ++++++---- .../mirage/private/crate-owner-invitations/get-test.js | 2 ++ 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/mirage/route-handlers/me.js b/mirage/route-handlers/me.js index 2f130022034..f623369ffa8 100644 --- a/mirage/route-handlers/me.js +++ b/mirage/route-handlers/me.js @@ -98,7 +98,7 @@ export function register(server) { return { ok: true }; }); - server.get('/api/v1/me/crate_owner_invitations', function (schema) { + 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' }] }); diff --git a/tests/mirage/me/crate-owner-invitations/list-test.js b/tests/mirage/me/crate-owner-invitations/list-test.js index 6e4116819f2..be8d37cff73 100644 --- a/tests/mirage/me/crate-owner-invitations/list-test.js +++ b/tests/mirage/me/crate-owner-invitations/list-test.js @@ -5,7 +5,7 @@ import fetch from 'fetch'; import { setupTest } from '../../../helpers'; import setupMirage from '../../../helpers/setup-mirage'; -module('Mirage | GET /api/v1/me/crate_owner_invitations', function (hooks) { +module('Mirage | GET /api/private/crate_owner_invitations', function (hooks) { setupTest(hooks); setupMirage(hooks); @@ -13,7 +13,7 @@ module('Mirage | GET /api/v1/me/crate_owner_invitations', function (hooks) { let user = this.server.create('user'); this.server.create('mirage-session', { user }); - 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: [] }); }); @@ -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: [ @@ -55,6 +55,7 @@ module('Mirage | GET /api/v1/me/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), @@ -63,6 +64,7 @@ module('Mirage | GET /api/v1/me/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: [ @@ -92,7 +94,7 @@ 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' }], 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: [ From 7ecadfd0f90d39732bf4a13d9092552ed7fa826b Mon Sep 17 00:00:00 2001 From: Esteban Borai Date: Mon, 31 Oct 2022 12:37:13 -0300 Subject: [PATCH 2/4] fix: keep both endpoints --- mirage/route-handlers/me.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mirage/route-handlers/me.js b/mirage/route-handlers/me.js index f623369ffa8..216a88f53ae 100644 --- a/mirage/route-handlers/me.js +++ b/mirage/route-handlers/me.js @@ -98,6 +98,15 @@ export function register(server) { return { ok: true }; }); + server.get('/api/v1/me/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.get('/api/private/crate_owner_invitations', function (schema) { let { user } = getSession(schema); if (!user) { From 974476a2eba5cc8173cd694f71dd5cd39b4c25f1 Mon Sep 17 00:00:00 2001 From: Esteban Borai Date: Wed, 2 Nov 2022 23:15:08 -0300 Subject: [PATCH 3/4] fix: remove expires at --- tests/mirage/me/crate-owner-invitations/list-test.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/mirage/me/crate-owner-invitations/list-test.js b/tests/mirage/me/crate-owner-invitations/list-test.js index be8d37cff73..34c315992ef 100644 --- a/tests/mirage/me/crate-owner-invitations/list-test.js +++ b/tests/mirage/me/crate-owner-invitations/list-test.js @@ -55,7 +55,6 @@ 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), @@ -64,7 +63,6 @@ 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: [ From b3034ac29294f7728a8be680dca671e4d17f6b2a Mon Sep 17 00:00:00 2001 From: Esteban Borai Date: Wed, 2 Nov 2022 23:18:43 -0300 Subject: [PATCH 4/4] fix: reintroduce module for tests --- .../me/crate-owner-invitations/list-test.js | 95 +++++++++++++++++++ 1 file changed, 95 insertions(+) diff --git a/tests/mirage/me/crate-owner-invitations/list-test.js b/tests/mirage/me/crate-owner-invitations/list-test.js index 34c315992ef..a65019c8f21 100644 --- a/tests/mirage/me/crate-owner-invitations/list-test.js +++ b/tests/mirage/me/crate-owner-invitations/list-test.js @@ -5,6 +5,101 @@ import fetch from 'fetch'; import { setupTest } from '../../../helpers'; import setupMirage from '../../../helpers/setup-mirage'; +module('Mirage | GET /api/v1/me/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/v1/me/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' }], + }); + }); +}); + module('Mirage | GET /api/private/crate_owner_invitations', function (hooks) { setupTest(hooks); setupMirage(hooks);