Skip to content

Commit 97f7d81

Browse files
committed
OwnersList: Add tests
1 parent 5190c69 commit 97f7d81

File tree

2 files changed

+116
-1
lines changed

2 files changed

+116
-1
lines changed

app/components/owners-list.hbs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<ul
22
role="list"
33
local-class="list {{if this.showDetailedList "detailed"}}"
4-
data-test-owners
4+
data-test-owners="{{if this.showDetailedList "detailed" "basic"}}"
55
>
66
{{#each @owners as |owner|}}
77
<li local-class="{{if (eq owner.kind "team") "team"}}">

tests/components/owners-list-test.js

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
import { render } from '@ember/test-helpers';
2+
import { module, test } from 'qunit';
3+
4+
import { hbs } from 'ember-cli-htmlbars';
5+
6+
import { setupRenderingTest } from 'cargo/tests/helpers';
7+
8+
import setupMirage from '../helpers/setup-mirage';
9+
10+
module('Component | OwnersList', function (hooks) {
11+
setupRenderingTest(hooks);
12+
setupMirage(hooks);
13+
14+
test('single user', async function (assert) {
15+
let crate = this.server.create('crate');
16+
this.server.create('version', { crate });
17+
18+
let user = this.server.create('user');
19+
this.server.create('crate-ownership', { crate, user });
20+
21+
let store = this.owner.lookup('service:store');
22+
this.crate = await store.findRecord('crate', crate.name);
23+
await this.crate.hasMany('owner_team').load();
24+
await this.crate.hasMany('owner_user').load();
25+
26+
await render(hbs`<OwnersList @owners={{this.crate.owners}} />`);
27+
assert.dom('[data-test-owners="detailed"]').exists();
28+
assert.dom('ul > li').exists({ count: 1 });
29+
assert.dom('[data-test-owner-link]').exists({ count: 1 });
30+
31+
let logins = [...this.element.querySelectorAll('[data-test-owner-link]')].map(it => it.dataset.testOwnerLink);
32+
assert.deepEqual(logins, ['user-1']);
33+
34+
assert.dom('[data-test-owner-link="user-1"]').hasText('User 1');
35+
assert.dom('[data-test-owner-link="user-1"]').hasAttribute('href', '/users/user-1');
36+
});
37+
38+
test('five users', async function (assert) {
39+
let crate = this.server.create('crate');
40+
this.server.create('version', { crate });
41+
42+
for (let i = 0; i < 5; i++) {
43+
let user = this.server.create('user');
44+
this.server.create('crate-ownership', { crate, user });
45+
}
46+
47+
let store = this.owner.lookup('service:store');
48+
this.crate = await store.findRecord('crate', crate.name);
49+
await this.crate.hasMany('owner_team').load();
50+
await this.crate.hasMany('owner_user').load();
51+
52+
await render(hbs`<OwnersList @owners={{this.crate.owners}} />`);
53+
assert.dom('[data-test-owners="detailed"]').exists();
54+
assert.dom('ul > li').exists({ count: 5 });
55+
assert.dom('[data-test-owner-link]').exists({ count: 5 });
56+
57+
let logins = [...this.element.querySelectorAll('[data-test-owner-link]')].map(it => it.dataset.testOwnerLink);
58+
assert.deepEqual(logins, ['user-1', 'user-2', 'user-3', 'user-4', 'user-5']);
59+
});
60+
61+
test('six users', async function (assert) {
62+
let crate = this.server.create('crate');
63+
this.server.create('version', { crate });
64+
65+
for (let i = 0; i < 6; i++) {
66+
let user = this.server.create('user');
67+
this.server.create('crate-ownership', { crate, user });
68+
}
69+
70+
let store = this.owner.lookup('service:store');
71+
this.crate = await store.findRecord('crate', crate.name);
72+
await this.crate.hasMany('owner_team').load();
73+
await this.crate.hasMany('owner_user').load();
74+
75+
await render(hbs`<OwnersList @owners={{this.crate.owners}} />`);
76+
assert.dom('[data-test-owners="basic"]').exists();
77+
assert.dom('ul > li').exists({ count: 6 });
78+
assert.dom('[data-test-owner-link]').exists({ count: 6 });
79+
80+
let logins = [...this.element.querySelectorAll('[data-test-owner-link]')].map(it => it.dataset.testOwnerLink);
81+
assert.deepEqual(logins, ['user-1', 'user-2', 'user-3', 'user-4', 'user-5', 'user-6']);
82+
});
83+
84+
test('teams mixed with users', async function (assert) {
85+
let crate = this.server.create('crate');
86+
this.server.create('version', { crate });
87+
88+
for (let i = 0; i < 3; i++) {
89+
let user = this.server.create('user');
90+
this.server.create('crate-ownership', { crate, user });
91+
}
92+
for (let i = 0; i < 2; i++) {
93+
let team = this.server.create('team', { org: 'crates-io' });
94+
this.server.create('crate-ownership', { crate, team });
95+
}
96+
97+
let store = this.owner.lookup('service:store');
98+
this.crate = await store.findRecord('crate', crate.name);
99+
await this.crate.hasMany('owner_team').load();
100+
await this.crate.hasMany('owner_user').load();
101+
102+
await render(hbs`<OwnersList @owners={{this.crate.owners}} />`);
103+
assert.dom('[data-test-owners="detailed"]').exists();
104+
assert.dom('ul > li').exists({ count: 5 });
105+
assert.dom('[data-test-owner-link]').exists({ count: 5 });
106+
107+
let logins = [...this.element.querySelectorAll('[data-test-owner-link]')].map(it => it.dataset.testOwnerLink);
108+
assert.deepEqual(logins, ['github:crates-io:team-1', 'github:crates-io:team-2', 'user-1', 'user-2', 'user-3']);
109+
110+
assert.dom('[data-test-owner-link="github:crates-io:team-1"]').hasText('crates-io/team-1');
111+
assert
112+
.dom('[data-test-owner-link="github:crates-io:team-1"]')
113+
.hasAttribute('href', '/teams/github:crates-io:team-1');
114+
});
115+
});

0 commit comments

Comments
 (0)