Skip to content

Commit 41b0b19

Browse files
committed
mirage: Add tests for PUT /api/v1/crates/:name/owners endpoint
1 parent 7d3fd44 commit 41b0b19

File tree

1 file changed

+110
-0
lines changed

1 file changed

+110
-0
lines changed
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
import { module, test } from 'qunit';
2+
3+
import fetch from 'fetch';
4+
5+
import { setupTest } from '../../helpers';
6+
import setupMirage from '../../helpers/setup-mirage';
7+
8+
const ADD_USER_BODY = JSON.stringify({ owners: ['john-doe'] });
9+
10+
module('Mirage | PUT /api/v1/crates/:name/owners', function (hooks) {
11+
setupTest(hooks);
12+
setupMirage(hooks);
13+
14+
test('returns 403 if unauthenticated', async function (assert) {
15+
let response = await fetch('/api/v1/crates/foo/owners', { method: 'PUT', body: ADD_USER_BODY });
16+
assert.strictEqual(response.status, 403);
17+
assert.deepEqual(await response.json(), {
18+
errors: [{ detail: 'must be logged in to perform that action' }],
19+
});
20+
});
21+
22+
test('returns 404 for unknown crates', async function (assert) {
23+
let user = this.server.create('user');
24+
this.authenticateAs(user);
25+
26+
let response = await fetch('/api/v1/crates/foo/owners', { method: 'PUT', body: ADD_USER_BODY });
27+
assert.strictEqual(response.status, 404);
28+
assert.deepEqual(await response.json(), { errors: [{ detail: 'Not Found' }] });
29+
});
30+
31+
test('can add new owner', async function (assert) {
32+
let user = this.server.create('user');
33+
this.authenticateAs(user);
34+
35+
let crate = this.server.create('crate', { name: 'foo' });
36+
this.server.create('crate-ownership', { crate, user });
37+
38+
let user2 = this.server.create('user');
39+
40+
let body = JSON.stringify({ owners: [user2.login] });
41+
let response = await fetch('/api/v1/crates/foo/owners', { method: 'PUT', body });
42+
assert.strictEqual(response.status, 200);
43+
assert.deepEqual(await response.json(), { ok: true });
44+
45+
let owners = this.server.schema.crateOwnerships.where({ crateId: crate.id });
46+
assert.strictEqual(owners.length, 1);
47+
assert.strictEqual(owners.models[0].userId, user.id);
48+
49+
let invites = this.server.schema.crateOwnerInvitations.where({ crateId: crate.id });
50+
assert.strictEqual(invites.length, 1);
51+
assert.strictEqual(invites.models[0].inviterId, user.id);
52+
assert.strictEqual(invites.models[0].inviteeId, user2.id);
53+
});
54+
55+
test('can add team owner', async function (assert) {
56+
let user = this.server.create('user');
57+
this.authenticateAs(user);
58+
59+
let crate = this.server.create('crate', { name: 'foo' });
60+
this.server.create('crate-ownership', { crate, user });
61+
62+
let team = this.server.create('team');
63+
64+
let body = JSON.stringify({ owners: [team.login] });
65+
let response = await fetch('/api/v1/crates/foo/owners', { method: 'PUT', body });
66+
assert.strictEqual(response.status, 200);
67+
assert.deepEqual(await response.json(), { ok: true });
68+
69+
let owners = this.server.schema.crateOwnerships.where({ crateId: crate.id });
70+
assert.strictEqual(owners.length, 2);
71+
assert.strictEqual(owners.models[0].userId, user.id);
72+
assert.strictEqual(owners.models[0].teamId, null);
73+
assert.strictEqual(owners.models[1].userId, null);
74+
assert.strictEqual(owners.models[1].teamId, user.id);
75+
76+
let invites = this.server.schema.crateOwnerInvitations.where({ crateId: crate.id });
77+
assert.strictEqual(invites.length, 0);
78+
});
79+
80+
test('can add multiple owners', async function (assert) {
81+
let user = this.server.create('user');
82+
this.authenticateAs(user);
83+
84+
let crate = this.server.create('crate', { name: 'foo' });
85+
this.server.create('crate-ownership', { crate, user });
86+
87+
let team = this.server.create('team');
88+
let user2 = this.server.create('user');
89+
let user3 = this.server.create('user');
90+
91+
let body = JSON.stringify({ owners: [user2.login, team.login, user3.login] });
92+
let response = await fetch('/api/v1/crates/foo/owners', { method: 'PUT', body });
93+
assert.strictEqual(response.status, 200);
94+
assert.deepEqual(await response.json(), { ok: true });
95+
96+
let owners = this.server.schema.crateOwnerships.where({ crateId: crate.id });
97+
assert.strictEqual(owners.length, 2);
98+
assert.strictEqual(owners.models[0].userId, user.id);
99+
assert.strictEqual(owners.models[0].teamId, null);
100+
assert.strictEqual(owners.models[1].userId, null);
101+
assert.strictEqual(owners.models[1].teamId, user.id);
102+
103+
let invites = this.server.schema.crateOwnerInvitations.where({ crateId: crate.id });
104+
assert.strictEqual(invites.length, 2);
105+
assert.strictEqual(invites.models[0].inviterId, user.id);
106+
assert.strictEqual(invites.models[0].inviteeId, user2.id);
107+
assert.strictEqual(invites.models[1].inviterId, user.id);
108+
assert.strictEqual(invites.models[1].inviteeId, user3.id);
109+
});
110+
});

0 commit comments

Comments
 (0)