Skip to content

Commit 878cb17

Browse files
authored
refactor: 💡 use test selector in groups/members route (#2719)
1 parent 706981c commit 878cb17

File tree

5 files changed

+79
-50
lines changed

5 files changed

+79
-50
lines changed

‎ui/admin/app/templates/scopes/scope/groups/group/members.hbs

+1-1
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@
6767
</B.Td>
6868
<B.Td>
6969
{{#if (can 'removeMembers group' @model.group)}}
70-
<Hds::Dropdown as |dd|>
70+
<Hds::Dropdown data-test-group-member-action as |dd|>
7171
<dd.ToggleIcon
7272
@icon='more-horizontal'
7373
@text={{t 'actions.manage'}}

‎ui/admin/tests/acceptance/groups/delete-test.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ module('Acceptance | groups | delete', function (hooks) {
5454
await visit(urls.group);
5555

5656
await click(selectors.MANAGE_DROPDOWN);
57-
await click(selectors.DELETE_ACTION);
57+
await click(selectors.MANAGE_DROPDOWN_DELETE_GROUP);
5858

5959
assert.strictEqual(getGroupsCount(), count - 1);
6060
});
@@ -66,7 +66,7 @@ module('Acceptance | groups | delete', function (hooks) {
6666
await visit(urls.group);
6767

6868
await click(selectors.MANAGE_DROPDOWN);
69-
assert.dom(selectors.DELETE_ACTION).doesNotExist();
69+
assert.dom(selectors.MANAGE_DROPDOWN_DELETE_GROUP).doesNotExist();
7070
});
7171

7272
test('deleting a group which displays error messages', async function (assert) {
@@ -84,7 +84,7 @@ module('Acceptance | groups | delete', function (hooks) {
8484
await visit(urls.group);
8585

8686
await click(selectors.MANAGE_DROPDOWN);
87-
await click(selectors.DELETE_ACTION);
87+
await click(selectors.MANAGE_DROPDOWN_DELETE_GROUP);
8888

8989
assert.dom(commonSelectors.ALERT_TOAST_BODY).hasText('Oops.');
9090
});

‎ui/admin/tests/acceptance/groups/members-test.js

+63-45
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@
44
*/
55

66
import { module, test } from 'qunit';
7-
import { visit, currentURL, click, find, findAll } from '@ember/test-helpers';
7+
import { visit, currentURL, click } from '@ember/test-helpers';
88
import { setupApplicationTest } from 'admin/tests/helpers';
99
import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
1010
import { setupIndexedDb } from 'api/test-support/helpers/indexed-db';
1111
import a11yAudit from 'ember-a11y-testing/test-support/audit';
1212
import { Response } from 'miragejs';
1313
import { authenticateSession } from 'ember-simple-auth/test-support';
1414
import * as commonSelectors from 'admin/tests/helpers/selectors';
15+
import * as selectors from './selectors';
1516

1617
module('Acceptance | groups | members', function (hooks) {
1718
setupApplicationTest(hooks);
@@ -33,10 +34,6 @@ module('Acceptance | groups | members', function (hooks) {
3334
addMembers: null,
3435
};
3536
let membersCount;
36-
const MANAGE_DROPDOWN_SELECTOR =
37-
'[data-test-manage-group-dropdown] button:first-child';
38-
const ADD_MEMBERS_ACTION_SELECTOR =
39-
'[data-test-manage-group-dropdown] ul li a';
4037

4138
hooks.beforeEach(async function () {
4239
await authenticateSession({ username: 'admin' });
@@ -62,16 +59,20 @@ module('Acceptance | groups | members', function (hooks) {
6259
test('visiting group members', async function (assert) {
6360
await visit(urls.members);
6461
await a11yAudit();
62+
6563
assert.strictEqual(currentURL(), urls.members);
66-
assert.strictEqual(findAll('tbody tr').length, membersCount);
64+
assert.dom(commonSelectors.TABLE_ROW).exists({ count: membersCount });
6765
});
6866

6967
test('can remove a member', async function (assert) {
7068
await visit(urls.members);
71-
assert.strictEqual(findAll('tbody tr').length, membersCount);
72-
await click('.hds-dropdown-toggle-icon');
73-
await click('tbody tr .hds-dropdown-list-item button');
74-
assert.strictEqual(findAll('tbody tr').length, membersCount - 1);
69+
70+
assert.dom(commonSelectors.TABLE_ROW).exists({ count: membersCount });
71+
72+
await click(selectors.TABLE_MEMBER_ACTION_DROPDOWN);
73+
await click(selectors.TABLE_MEMBER_ACTION_DROPDOWN_DELETE_MEMBER);
74+
75+
assert.dom(commonSelectors.TABLE_ROW).exists({ count: membersCount - 1 });
7576
});
7677

7778
test('cannot remove a member without proper authorization', async function (assert) {
@@ -80,29 +81,33 @@ module('Acceptance | groups | members', function (hooks) {
8081
);
8182
instances.group.update({ authorized_actions });
8283
await visit(urls.members);
83-
assert.notOk(find('tbody tr .rose-dropdown-button-danger'));
84+
85+
assert
86+
.dom(selectors.TABLE_MEMBER_ACTION_DROPDOWN_DELETE_MEMBER)
87+
.doesNotExist();
8488
});
8589

8690
test('shows error message on member remove', async function (assert) {
91+
const errorMsg = 'The request was invalid.';
8792
this.server.post('/groups/:idMethod', () => {
8893
return new Response(
8994
400,
9095
{},
9196
{
9297
status: 400,
9398
code: 'invalid_argument',
94-
message: 'The request was invalid.',
99+
message: errorMsg,
95100
details: {},
96101
},
97102
);
98103
});
99104
await visit(urls.members);
100-
assert.strictEqual(findAll('tbody tr').length, membersCount);
101-
await click('.hds-dropdown-toggle-icon');
102-
await click('tbody tr .hds-dropdown-list-item button');
103-
assert
104-
.dom(commonSelectors.ALERT_TOAST_BODY)
105-
.hasText('The request was invalid.');
105+
assert.dom(commonSelectors.TABLE_ROW).exists({ count: membersCount });
106+
107+
await click(selectors.TABLE_MEMBER_ACTION_DROPDOWN);
108+
await click(selectors.TABLE_MEMBER_ACTION_DROPDOWN_DELETE_MEMBER);
109+
110+
assert.dom(commonSelectors.ALERT_TOAST_BODY).hasText(errorMsg);
106111
});
107112

108113
test('visiting member selection', async function (assert) {
@@ -113,69 +118,82 @@ module('Acceptance | groups | members', function (hooks) {
113118

114119
test('can navigate to add members with proper authorization', async function (assert) {
115120
await visit(urls.group);
116-
await click(MANAGE_DROPDOWN_SELECTOR);
117-
assert.dom(ADD_MEMBERS_ACTION_SELECTOR).isVisible();
121+
await click(selectors.MANAGE_DROPDOWN);
122+
assert.dom(selectors.MANAGE_DROPDOWN_ADD_MEMBER).isVisible();
118123
});
119124

120125
test('cannot navigate to add members without proper authorization', async function (assert) {
121126
const authorized_actions = instances.group.authorized_actions.filter(
122127
(item) => item !== 'add-members',
123128
);
124129
instances.group.update({ authorized_actions });
130+
125131
await visit(urls.group);
126-
assert.notOk(find(`[href="${urls.addMembers}"]`));
132+
133+
assert.dom(commonSelectors.HREF(urls.addMembers)).doesNotExist();
127134
});
128135

129136
test('select and save members to add', async function (assert) {
130137
instances.group.update({ memberIds: [] });
131138
await visit(urls.members);
132-
assert.strictEqual(findAll('tbody tr').length, 0);
133-
await click(MANAGE_DROPDOWN_SELECTOR);
134-
await click(ADD_MEMBERS_ACTION_SELECTOR);
139+
140+
assert.dom(commonSelectors.TABLE_ROW).exists({ count: 0 });
141+
142+
await click(selectors.MANAGE_DROPDOWN);
143+
await click(selectors.MANAGE_DROPDOWN_ADD_MEMBER);
144+
135145
assert.strictEqual(currentURL(), urls.addMembers);
136146
// Click three times to select, unselect, then reselect (for coverage)
137-
await click('tbody label');
138-
await click('tbody label');
139-
await click('tbody label');
140-
await click('form [type="submit"]');
147+
await click(commonSelectors.TABLE_ROW_CHECKBOX);
148+
await click(commonSelectors.SAVE_BTN);
149+
141150
await visit(urls.members);
142-
assert.strictEqual(findAll('tbody tr').length, 1);
151+
152+
assert.dom(commonSelectors.TABLE_ROW).exists({ count: 1 });
143153
});
144154

145155
test('select and cancel members to add', async function (assert) {
146156
await visit(urls.members);
147-
assert.strictEqual(findAll('tbody tr').length, membersCount);
148-
await click('.hds-dropdown-toggle-icon');
149-
await click('tbody tr .hds-dropdown-list-item button');
150-
assert.strictEqual(findAll('tbody tr').length, membersCount - 1);
151-
await click(MANAGE_DROPDOWN_SELECTOR);
152-
await click(ADD_MEMBERS_ACTION_SELECTOR);
157+
158+
assert.dom(commonSelectors.TABLE_ROW).exists({ count: membersCount });
159+
160+
await click(selectors.TABLE_MEMBER_ACTION_DROPDOWN);
161+
await click(selectors.TABLE_MEMBER_ACTION_DROPDOWN_DELETE_MEMBER);
162+
163+
assert.dom(commonSelectors.TABLE_ROW).exists({ count: membersCount - 1 });
164+
165+
await click(selectors.MANAGE_DROPDOWN);
166+
await click(selectors.MANAGE_DROPDOWN_ADD_MEMBER);
167+
153168
assert.strictEqual(currentURL(), urls.addMembers);
154-
await click('tbody label');
155-
await click('form [type="button"]');
156-
await visit(urls.members);
157-
assert.strictEqual(findAll('tbody tr').length, membersCount - 1);
169+
170+
await click(commonSelectors.TABLE_ROW_CHECKBOX);
171+
172+
await click(commonSelectors.CANCEL_BTN);
173+
174+
assert.strictEqual(currentURL(), urls.members);
175+
assert.dom(commonSelectors.TABLE_ROW).exists({ count: membersCount - 1 });
158176
});
159177

160178
test('shows error message on member add', async function (assert) {
179+
const errorMsg = 'The request was invalid.';
161180
this.server.post('/groups/:idMethod', () => {
162181
return new Response(
163182
400,
164183
{},
165184
{
166185
status: 400,
167186
code: 'invalid_argument',
168-
message: 'The request was invalid.',
187+
message: errorMsg,
169188
details: {},
170189
},
171190
);
172191
});
173192
instances.group.update({ memberIds: [] });
174193
await visit(urls.addMembers);
175-
await click('tbody label');
176-
await click('form [type="submit"]');
177-
assert
178-
.dom(commonSelectors.ALERT_TOAST_BODY)
179-
.hasText('The request was invalid.');
194+
195+
await click(commonSelectors.SAVE_BTN);
196+
197+
assert.dom(commonSelectors.ALERT_TOAST_BODY).hasText(errorMsg);
180198
});
181199
});

‎ui/admin/tests/acceptance/groups/selectors.js

+10-1
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,13 @@
55

66
export const MANAGE_DROPDOWN =
77
'[data-test-manage-group-dropdown] button:first-child';
8-
export const DELETE_ACTION = '[data-test-manage-group-dropdown] ul li button';
8+
export const MANAGE_DROPDOWN_DELETE_GROUP =
9+
'[data-test-manage-group-dropdown] ul li button';
10+
11+
// Members
12+
export const TABLE_MEMBER_ACTION_DROPDOWN =
13+
'[data-test-group-member-action] button:first-child';
14+
export const MANAGE_DROPDOWN_ADD_MEMBER =
15+
'[data-test-manage-group-dropdown] ul li a';
16+
export const TABLE_MEMBER_ACTION_DROPDOWN_DELETE_MEMBER =
17+
'[data-test-group-member-action] ul li button';

‎ui/admin/tests/helpers/selectors.js

+2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ export const FIELD_DESCRIPTION = '[name=description]';
1515
export const FIELD_DESCRIPTION_VALUE = 'description';
1616

1717
export const TABLE_RESOURCE_LINK = (url) => `tbody [href="${url}"]`;
18+
export const TABLE_ROW = 'tbody tr';
19+
export const TABLE_ROW_CHECKBOX = 'tbody tr input[type="checkbox"]';
1820

1921
export const RESOURCE_NOT_FOUND_SUBTITLE =
2022
'[data-test-error-application-state] .hds-application-state__error-code';

0 commit comments

Comments
 (0)