Skip to content

Commit 9ab26af

Browse files
committed
mirage: Implement generic PUT /me/crate_owner_invitations/accept/:token route handler
1 parent e806318 commit 9ab26af

File tree

4 files changed

+23
-15
lines changed

4 files changed

+23
-15
lines changed

mirage/factories/crate-owner-invitation.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { Factory } from 'ember-cli-mirage';
22

33
export default Factory.extend({
44
createdAt: '2016-12-24T12:34:56Z',
5+
token: i => `secret-token-${i}`,
56

67
afterCreate(invite) {
78
if (!invite.crateId) {

mirage/route-handlers/me.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,4 +130,18 @@ export function register(server) {
130130

131131
return { crate_owner_invitation: { crate_id: crateId, accepted } };
132132
});
133+
134+
server.put('/api/v1/me/crate_owner_invitations/accept/:token', (schema, request) => {
135+
let { token } = request.params;
136+
137+
let invite = schema.crateOwnerInvitations.findBy({ token });
138+
if (!invite) {
139+
return new Response(404);
140+
}
141+
142+
server.create('crate-ownership', { crate: invite.crate, user: invite.invitee });
143+
invite.destroy();
144+
145+
return { crate_owner_invitation: { crate_id: invite.crateId, accepted: true } };
146+
});
133147
}

mirage/serializers/crate-owner-invitation.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ export default BaseSerializer.extend({
2020

2121
_adjust(hash) {
2222
delete hash.id;
23+
delete hash.token;
2324

2425
let crate = this.schema.crates.find(hash.crate_id);
2526
hash.crate_name = crate.name;

tests/acceptance/token-invites-test.js

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import { currentURL } from '@ember/test-helpers';
22
import { module, test } from 'qunit';
33

44
import percySnapshot from '@percy/ember';
5-
import Response from 'ember-cli-mirage/response';
65

76
import { setupApplicationTest } from 'cargo/tests/helpers';
87

@@ -24,13 +23,6 @@ module('Acceptance | /accept-invite/:token', function (hooks) {
2423
});
2524

2625
test('shows error for unknown token', async function (assert) {
27-
assert.expect(3);
28-
29-
this.server.put('/api/v1/me/crate_owner_invitations/accept/:token', (schema, request) => {
30-
assert.deepEqual(request.params, { token: 'unknown' });
31-
return new Response(404);
32-
});
33-
3426
await visit('/accept-invite/unknown');
3527
assert.equal(currentURL(), '/accept-invite/unknown');
3628
assert.dom('[data-test-error-message]').hasText('You may want to visit crates.io/me/pending-invites to try again.');
@@ -48,15 +40,15 @@ module('Acceptance | /accept-invite/:token', function (hooks) {
4840
});
4941

5042
test('shows success for known token', async function (assert) {
51-
assert.expect(3);
43+
let inviter = this.server.create('user');
44+
let invitee = this.server.create('user');
5245

53-
this.server.put('/api/v1/me/crate_owner_invitations/accept/:token', (schema, request) => {
54-
assert.deepEqual(request.params, { token: 'ember-rs' });
55-
return { crate_owner_invitation: { crate_id: 42, accepted: true } };
56-
});
46+
let crate = this.server.create('crate', { name: 'nanomsg' });
47+
this.server.create('version', { crate });
48+
let invite = this.server.create('crate-owner-invitation', { crate, invitee, inviter });
5749

58-
await visit('/accept-invite/ember-rs');
59-
assert.equal(currentURL(), '/accept-invite/ember-rs');
50+
await visit(`/accept-invite/${invite.token}`);
51+
assert.equal(currentURL(), `/accept-invite/${invite.token}`);
6052
assert
6153
.dom('[data-test-success-message]')
6254
.hasText(

0 commit comments

Comments
 (0)