diff --git a/addons/rose/addon/components/rose/pagination/index.hbs b/addons/rose/addon/components/rose/pagination/index.hbs
index c7efbb142..3c7363f57 100644
--- a/addons/rose/addon/components/rose/pagination/index.hbs
+++ b/addons/rose/addon/components/rose/pagination/index.hbs
@@ -4,6 +4,7 @@
}}
- `.hds-form-toggle input[name="${name}"]`;
- const SCOPE_CHECKBOX_SELECTOR = (type, id) =>
- `tbody [data-test-${type}-scopes-table-row="${id}"] input`;
- const GRANT_SCOPE_ROW_SELECTOR = (id) =>
- `tbody [data-test-grant-scope-row="${id}"]`;
- const FILTER_DROPDOWN_SELECTOR = (name) =>
- `.search-filtering [name="${name}"] button`;
- const FILTER_APPLY_BUTTON_SELECTOR =
- '.search-filtering [data-test-dropdown-apply-button]';
- const TABLE_ROW_SELECTOR = 'tbody tr';
- const TABLE_SCOPE_SELECTOR = 'tbody tr:nth-child(2) a';
- const TABLE_PARENT_SCOPE_SELECTOR = 'tbody tr:nth-child(2) td:nth-child(3) a';
- const SAVE_BTN_SELECTOR = 'form [type="submit"]';
- const CANCEL_BTN_SELECTOR = '.rose-form-actions [type="button"]';
- const MANAGE_DROPDOWN_SELECTOR = '.hds-dropdown-toggle-button';
- const MANAGE_SCOPES_SELECTOR = '[data-test-manage-dropdown-scopes]';
- const SEARCH_INPUT_SELECTOR = '.search-filtering [type="search"]';
- const NO_RESULTS_MSG_SELECTOR = '[data-test-no-grant-scope-results]';
- const NO_SCOPES_MSG_SELECTOR = '.role-grant-scopes div';
- const NO_SCOPES_MSG_LINK_SELECTOR =
- '.role-grant-scopes div div:nth-child(3) a';
- const BUTTON_ICON_SELECTOR =
- '.hds-button__icon [data-test-icon="check-circle"]';
- const PAGINATION_SELECTOR = '.hds-pagination';
- const REMOVE_ORG_MODAL = (name) =>
- `[data-test-manage-scopes-remove-${name}-modal]`;
- const REMOVE_ORG_PROJECTS_BUTTON = '.hds-modal .hds-button--color-primary';
- const REMOVE_ORG_ONLY_BUTTON = '.hds-modal .hds-button--color-secondary';
- const TABLE_ALL_CHECKBOX = 'thead tr [type="checkbox"]';
-
const instances = {
scopes: {
global: null,
@@ -72,11 +42,11 @@ module('Acceptance | roles | global-scope', function (hooks) {
role: null,
};
const urls = {
- orgScope: null,
roles: null,
role: null,
roleScopes: null,
manageScopes: null,
+ manageScopesOrg: null,
manageCustomScopes: null,
};
@@ -105,6 +75,7 @@ module('Acceptance | roles | global-scope', function (hooks) {
urls.role = `${urls.roles}/${instances.role.id}`;
urls.roleScopes = `${urls.role}/scopes`;
urls.manageScopes = `${urls.role}/manage-scopes`;
+ urls.manageScopesOrg = `${urls.manageScopes}/${instances.scopes.org.id}`;
urls.manageCustomScopes = `${urls.manageScopes}/manage-custom-scopes`;
});
@@ -117,125 +88,135 @@ module('Acceptance | roles | global-scope', function (hooks) {
session.set('data.theme', 'light');
await visit(urls.role);
- await click(`[href="${urls.roleScopes}"]`);
+ await click(commonSelectors.HREF(urls.roleScopes));
await a11yAudit();
assert.strictEqual(currentURL(), urls.roleScopes);
assert
- .dom(TABLE_ROW_SELECTOR)
+ .dom(commonSelectors.TABLE_ROW)
.exists({ count: instances.role.grant_scope_ids.length });
});
test('user can navigate to scope from role grant scopes', async function (assert) {
+ const grantScopeUrl = `/scopes/${instances.role.grant_scope_ids[1]}`;
await visit(urls.role);
- await click(`[href="${urls.roleScopes}"]`);
- await click(TABLE_SCOPE_SELECTOR);
+ await click(commonSelectors.HREF(urls.roleScopes));
+ await click(commonSelectors.TABLE_RESOURCE_LINK(grantScopeUrl));
- assert.strictEqual(
- currentURL(),
- `/scopes/${instances.role.grant_scope_ids[1]}/scopes`,
- );
+ assert.strictEqual(currentURL(), `${grantScopeUrl}/scopes`);
});
test('user can search for existing grant scope on a role', async function (assert) {
await visit(urls.role);
- await click(`[href="${urls.roleScopes}"]`);
+ await click(commonSelectors.HREF(urls.roleScopes));
assert
- .dom(GRANT_SCOPE_ROW_SELECTOR(instances.role.grant_scope_ids[0]))
- .exists();
+ .dom(selectors.GRANT_SCOPE_ROW(instances.role.grant_scope_ids[0]))
+ .isVisible();
assert
- .dom(GRANT_SCOPE_ROW_SELECTOR(instances.role.grant_scope_ids[1]))
- .exists();
+ .dom(selectors.GRANT_SCOPE_ROW(instances.role.grant_scope_ids[1]))
+ .isVisible();
- await fillIn(SEARCH_INPUT_SELECTOR, instances.role.grant_scope_ids[0]);
+ await fillIn(
+ commonSelectors.SEARCH_INPUT,
+ instances.role.grant_scope_ids[0],
+ );
await waitUntil(
() =>
- findAll(GRANT_SCOPE_ROW_SELECTOR(instances.role.grant_scope_ids[1]))
+ findAll(selectors.GRANT_SCOPE_ROW(instances.role.grant_scope_ids[1]))
.length === 0,
);
- assert.dom(PAGINATION_SELECTOR).exists();
+ assert.dom(commonSelectors.PAGINATION).isVisible();
assert
- .dom(GRANT_SCOPE_ROW_SELECTOR(instances.role.grant_scope_ids[0]))
- .exists();
+ .dom(selectors.GRANT_SCOPE_ROW(instances.role.grant_scope_ids[0]))
+ .isVisible();
assert
- .dom(GRANT_SCOPE_ROW_SELECTOR(instances.role.grant_scope_ids[1]))
+ .dom(selectors.GRANT_SCOPE_ROW(instances.role.grant_scope_ids[1]))
.doesNotExist();
});
test('user can search for grant scopes on a role and get no results', async function (assert) {
await visit(urls.role);
- await click(`[href="${urls.roleScopes}"]`);
+ await click(commonSelectors.HREF(urls.roleScopes));
assert
- .dom(GRANT_SCOPE_ROW_SELECTOR(instances.role.grant_scope_ids[0]))
- .exists();
+ .dom(selectors.GRANT_SCOPE_ROW(instances.role.grant_scope_ids[0]))
+ .isVisible();
assert
- .dom(GRANT_SCOPE_ROW_SELECTOR(instances.role.grant_scope_ids[1]))
- .exists();
+ .dom(selectors.GRANT_SCOPE_ROW(instances.role.grant_scope_ids[1]))
+ .isVisible();
- await fillIn(SEARCH_INPUT_SELECTOR, 'fake scope that does not exist');
- await waitUntil(() => findAll(NO_RESULTS_MSG_SELECTOR).length === 1);
+ await fillIn(
+ commonSelectors.SEARCH_INPUT,
+ 'fake scope that does not exist',
+ );
+ await waitUntil(
+ () => findAll(selectors.NO_RESULTS_GRANT_SCOPE_MSG).length === 1,
+ );
assert
- .dom(GRANT_SCOPE_ROW_SELECTOR(instances.role.grant_scope_ids[0]))
+ .dom(selectors.GRANT_SCOPE_ROW(instances.role.grant_scope_ids[0]))
.doesNotExist();
assert
- .dom(GRANT_SCOPE_ROW_SELECTOR(instances.role.grant_scope_ids[1]))
+ .dom(selectors.GRANT_SCOPE_ROW(instances.role.grant_scope_ids[1]))
.doesNotExist();
- assert.dom(NO_RESULTS_MSG_SELECTOR).includesText('No results found');
+ assert
+ .dom(selectors.NO_RESULTS_GRANT_SCOPE_MSG)
+ .includesText('No results found');
});
test('user can filter for grant scopes on a role by parent scope', async function (assert) {
await visit(urls.role);
- await click(`[href="${urls.roleScopes}"]`);
+ await click(commonSelectors.HREF(urls.roleScopes));
assert
- .dom(GRANT_SCOPE_ROW_SELECTOR(instances.role.grant_scope_ids[0]))
- .exists();
+ .dom(selectors.GRANT_SCOPE_ROW(instances.role.grant_scope_ids[0]))
+ .isVisible();
assert
- .dom(GRANT_SCOPE_ROW_SELECTOR(instances.role.grant_scope_ids[1]))
- .exists();
+ .dom(selectors.GRANT_SCOPE_ROW(instances.role.grant_scope_ids[1]))
+ .isVisible();
- await click(FILTER_DROPDOWN_SELECTOR('parent-scope'));
- await click(`input[value="${instances.scopes.global.id}"]`);
- await click(FILTER_APPLY_BUTTON_SELECTOR);
+ await click(commonSelectors.FILTER_DROPDOWN('parent-scope'));
+ await click(
+ commonSelectors.FILTER_DROPDOWN_ITEM(instances.scopes.global.id),
+ );
+ await click(commonSelectors.FILTER_DROPDOWN_ITEM_APPLY_BTN('parent-scope'));
assert
- .dom(GRANT_SCOPE_ROW_SELECTOR(instances.role.grant_scope_ids[0]))
+ .dom(selectors.GRANT_SCOPE_ROW(instances.role.grant_scope_ids[0]))
.doesNotExist();
assert
- .dom(GRANT_SCOPE_ROW_SELECTOR(instances.role.grant_scope_ids[1]))
- .exists();
+ .dom(selectors.GRANT_SCOPE_ROW(instances.role.grant_scope_ids[1]))
+ .isVisible();
});
test('user can filter for grant scopes on a role by type', async function (assert) {
await visit(urls.role);
- await click(`[href="${urls.roleScopes}"]`);
+ await click(commonSelectors.HREF(urls.roleScopes));
assert
- .dom(GRANT_SCOPE_ROW_SELECTOR(instances.role.grant_scope_ids[0]))
- .exists();
+ .dom(selectors.GRANT_SCOPE_ROW(instances.role.grant_scope_ids[0]))
+ .isVisible();
assert
- .dom(GRANT_SCOPE_ROW_SELECTOR(instances.role.grant_scope_ids[1]))
- .exists();
+ .dom(selectors.GRANT_SCOPE_ROW(instances.role.grant_scope_ids[1]))
+ .isVisible();
- await click(FILTER_DROPDOWN_SELECTOR('type'));
- await click(`input[value="${TYPE_SCOPE_ORG}"]`);
- await click(FILTER_APPLY_BUTTON_SELECTOR);
+ await click(commonSelectors.FILTER_DROPDOWN('type'));
+ await click(commonSelectors.FILTER_DROPDOWN_ITEM(TYPE_SCOPE_ORG));
+ await click(commonSelectors.FILTER_DROPDOWN_ITEM_APPLY_BTN('type'));
assert
- .dom(GRANT_SCOPE_ROW_SELECTOR(instances.role.grant_scope_ids[0]))
+ .dom(selectors.GRANT_SCOPE_ROW(instances.role.grant_scope_ids[0]))
.doesNotExist();
assert
- .dom(GRANT_SCOPE_ROW_SELECTOR(instances.role.grant_scope_ids[1]))
- .exists();
+ .dom(selectors.GRANT_SCOPE_ROW(instances.role.grant_scope_ids[1]))
+ .isVisible();
});
test('user can navigate to parent scope from role grant scopes', async function (assert) {
@@ -244,8 +225,8 @@ module('Acceptance | roles | global-scope', function (hooks) {
});
await visit(urls.role);
- await click(`[href="${urls.roleScopes}"]`);
- await click(TABLE_PARENT_SCOPE_SELECTOR);
+ await click(commonSelectors.HREF(urls.roleScopes));
+ await click(selectors.GRANT_SCOPE_PARENT_SCOPE);
assert.strictEqual(
currentURL(),
@@ -257,10 +238,10 @@ module('Acceptance | roles | global-scope', function (hooks) {
instances.role.update({ grant_scope_ids: [] });
await visit(urls.role);
- await click(`[href="${urls.roleScopes}"]`);
+ await click(commonSelectors.HREF(urls.roleScopes));
- assert.dom(NO_SCOPES_MSG_SELECTOR).includesText('No scopes added');
- assert.dom(NO_SCOPES_MSG_LINK_SELECTOR).isVisible();
+ assert.dom(selectors.NO_SCOPES_MSG).includesText('No scopes added');
+ assert.dom(selectors.NO_SCOPES_MSG_LINK).isVisible();
});
test('user does not see action to add scopes when role has no grant scopes without proper permissions', async function (assert) {
@@ -272,68 +253,68 @@ module('Acceptance | roles | global-scope', function (hooks) {
});
await visit(urls.role);
- await click(`[href="${urls.roleScopes}"]`);
+ await click(commonSelectors.HREF(urls.roleScopes));
- assert.dom(NO_SCOPES_MSG_LINK_SELECTOR).doesNotExist();
+ assert.dom(selectors.NO_SCOPES_MSG_LINK).doesNotExist();
});
test('correct toggles are visible for global level role on manage scopes page', async function (assert) {
await visit(urls.role);
- await click(MANAGE_DROPDOWN_SELECTOR);
- await click(MANAGE_SCOPES_SELECTOR);
+ await click(selectors.MANAGE_DROPDOWN_ROLES);
+ await click(selectors.MANAGE_DROPDOWN_ROLES_SCOPES);
assert.strictEqual(currentURL(), urls.manageScopes);
- assert.dom(SCOPE_TOGGLE_SELECTOR(GRANT_SCOPE_THIS)).isVisible();
- assert.dom(SCOPE_TOGGLE_SELECTOR(GRANT_SCOPE_CHILDREN)).isVisible();
- assert.dom(SCOPE_TOGGLE_SELECTOR(GRANT_SCOPE_DESCENDANTS)).isVisible();
+ assert.dom(selectors.SCOPE_TOGGLE(GRANT_SCOPE_THIS)).isVisible();
+ assert.dom(selectors.SCOPE_TOGGLE(GRANT_SCOPE_CHILDREN)).isVisible();
+ assert.dom(selectors.SCOPE_TOGGLE(GRANT_SCOPE_DESCENDANTS)).isVisible();
});
test('user can save scope keywords to add on manage scopes page', async function (assert) {
instances.role.update({ grant_scope_ids: [] });
await visit(urls.role);
- await click(`[href="${urls.roleScopes}"]`);
+ await click(commonSelectors.HREF(urls.roleScopes));
- assert.strictEqual(findAll(TABLE_ROW_SELECTOR).length, 0);
+ assert.dom(commonSelectors.TABLE_ROW).exists({ count: 0 });
- await click(MANAGE_DROPDOWN_SELECTOR);
- await click(MANAGE_SCOPES_SELECTOR);
+ await click(selectors.MANAGE_DROPDOWN_ROLES);
+ await click(selectors.MANAGE_DROPDOWN_ROLES_SCOPES);
await a11yAudit();
assert.strictEqual(currentURL(), urls.manageScopes);
// Click three times to select, unselect, then reselect (for coverage)
- await click(SCOPE_TOGGLE_SELECTOR(GRANT_SCOPE_THIS));
- await click(SCOPE_TOGGLE_SELECTOR(GRANT_SCOPE_THIS));
- await click(SCOPE_TOGGLE_SELECTOR(GRANT_SCOPE_THIS));
- await click(SAVE_BTN_SELECTOR);
+ await click(selectors.SCOPE_TOGGLE(GRANT_SCOPE_THIS));
+ await click(selectors.SCOPE_TOGGLE(GRANT_SCOPE_THIS));
+ await click(selectors.SCOPE_TOGGLE(GRANT_SCOPE_THIS));
+ await click(commonSelectors.SAVE_BTN);
assert.strictEqual(currentURL(), urls.roleScopes);
- assert.strictEqual(findAll(TABLE_ROW_SELECTOR).length, 1);
+ assert.dom(commonSelectors.TABLE_ROW).exists({ count: 1 });
});
test('user can cancel scope keywords to add on manage scopes page', async function (assert) {
instances.role.update({ grant_scope_ids: [] });
await visit(urls.role);
- await click(`[href="${urls.roleScopes}"]`);
+ await click(commonSelectors.HREF(urls.roleScopes));
- assert.strictEqual(findAll(TABLE_ROW_SELECTOR).length, 0);
+ assert.dom(commonSelectors.TABLE_ROW).exists({ count: 0 });
- await click(MANAGE_DROPDOWN_SELECTOR);
- await click(MANAGE_SCOPES_SELECTOR);
+ await click(selectors.MANAGE_DROPDOWN_ROLES);
+ await click(selectors.MANAGE_DROPDOWN_ROLES_SCOPES);
assert.strictEqual(currentURL(), urls.manageScopes);
// Click three times to select, unselect, then reselect (for coverage)
- await click(SCOPE_TOGGLE_SELECTOR(GRANT_SCOPE_THIS));
- await click(SCOPE_TOGGLE_SELECTOR(GRANT_SCOPE_THIS));
- await click(SCOPE_TOGGLE_SELECTOR(GRANT_SCOPE_THIS));
- await click(CANCEL_BTN_SELECTOR);
+ await click(selectors.SCOPE_TOGGLE(GRANT_SCOPE_THIS));
+ await click(selectors.SCOPE_TOGGLE(GRANT_SCOPE_THIS));
+ await click(selectors.SCOPE_TOGGLE(GRANT_SCOPE_THIS));
+ await click(commonSelectors.CANCEL_BTN);
assert.strictEqual(currentURL(), urls.roleScopes);
- assert.strictEqual(findAll(TABLE_ROW_SELECTOR).length, 0);
+ assert.dom(commonSelectors.TABLE_ROW).exists({ count: 0 });
});
test('shows error message on scope save on manage scopes page', async function (assert) {
@@ -352,10 +333,10 @@ module('Acceptance | roles | global-scope', function (hooks) {
instances.role.update({ grant_scope_ids: [] });
await visit(urls.role);
- await click(MANAGE_DROPDOWN_SELECTOR);
- await click(MANAGE_SCOPES_SELECTOR);
- await click(SCOPE_TOGGLE_SELECTOR(GRANT_SCOPE_THIS));
- await click(SAVE_BTN_SELECTOR);
+ await click(selectors.MANAGE_DROPDOWN_ROLES);
+ await click(selectors.MANAGE_DROPDOWN_ROLES_SCOPES);
+ await click(selectors.SCOPE_TOGGLE(GRANT_SCOPE_THIS));
+ await click(commonSelectors.SAVE_BTN);
assert.dom(commonSelectors.ALERT_TOAST_BODY).isVisible();
});
@@ -365,10 +346,10 @@ module('Acceptance | roles | global-scope', function (hooks) {
confirmService.enabled = true;
await visit(urls.role);
- await click(MANAGE_DROPDOWN_SELECTOR);
- await click(MANAGE_SCOPES_SELECTOR);
- await click(SCOPE_TOGGLE_SELECTOR(GRANT_SCOPE_THIS));
- await click(`[href="${urls.roles}"]`);
+ await click(selectors.MANAGE_DROPDOWN_ROLES);
+ await click(selectors.MANAGE_DROPDOWN_ROLES_SCOPES);
+ await click(selectors.SCOPE_TOGGLE(GRANT_SCOPE_THIS));
+ await click(commonSelectors.HREF(urls.roles));
assert.dom(commonSelectors.MODAL_WARNING).isVisible();
@@ -382,10 +363,10 @@ module('Acceptance | roles | global-scope', function (hooks) {
confirmService.enabled = true;
await visit(urls.role);
- await click(MANAGE_DROPDOWN_SELECTOR);
- await click(MANAGE_SCOPES_SELECTOR);
- await click(SCOPE_TOGGLE_SELECTOR(GRANT_SCOPE_THIS));
- await click(`[href="${urls.roles}"]`);
+ await click(selectors.MANAGE_DROPDOWN_ROLES);
+ await click(selectors.MANAGE_DROPDOWN_ROLES_SCOPES);
+ await click(selectors.SCOPE_TOGGLE(GRANT_SCOPE_THIS));
+ await click(commonSelectors.HREF(urls.roles));
assert.dom(commonSelectors.MODAL_WARNING).isVisible();
@@ -404,62 +385,62 @@ module('Acceptance | roles | global-scope', function (hooks) {
instances.role.update({ grant_scope_ids: [] });
await visit(urls.role);
- await click(`[href="${urls.roleScopes}"]`);
+ await click(commonSelectors.HREF(urls.roleScopes));
- assert.dom(TABLE_ROW_SELECTOR).exists({ count: 0 });
+ assert.dom(commonSelectors.TABLE_ROW).exists({ count: 0 });
- await click(MANAGE_DROPDOWN_SELECTOR);
- await click(MANAGE_SCOPES_SELECTOR);
+ await click(selectors.MANAGE_DROPDOWN_ROLES);
+ await click(selectors.MANAGE_DROPDOWN_ROLES_SCOPES);
assert.strictEqual(currentURL(), urls.manageScopes);
- await click(`[href="${urls.manageCustomScopes}"]`);
+ await click(commonSelectors.HREF(urls.manageCustomScopes));
await a11yAudit();
assert.strictEqual(currentURL(), urls.manageCustomScopes);
// Click three times to select, unselect, then reselect (for coverage)
- await click(SCOPE_CHECKBOX_SELECTOR('org', instances.scopes.org.id));
- await click(SCOPE_CHECKBOX_SELECTOR('org', instances.scopes.org.id));
- await click(SCOPE_CHECKBOX_SELECTOR('org', instances.scopes.org.id));
- await click(SAVE_BTN_SELECTOR);
+ await click(selectors.SCOPE_CHECKBOX('org', instances.scopes.org.id));
+ await click(selectors.SCOPE_CHECKBOX('org', instances.scopes.org.id));
+ await click(selectors.SCOPE_CHECKBOX('org', instances.scopes.org.id));
+ await click(commonSelectors.SAVE_BTN);
assert.strictEqual(currentURL(), urls.manageScopes);
- assert.dom(BUTTON_ICON_SELECTOR).isVisible();
+ assert.dom(selectors.MANAGE_CUSTOM_SCOPES_BUTTON_ICON).isVisible();
- await click(SAVE_BTN_SELECTOR);
+ await click(commonSelectors.SAVE_BTN);
assert.strictEqual(currentURL(), urls.roleScopes);
- assert.dom(TABLE_ROW_SELECTOR).exists({ count: 1 });
+ assert.dom(commonSelectors.TABLE_ROW).exists({ count: 1 });
});
test('user can cancel custom scopes to add on manage custom scopes page', async function (assert) {
instances.role.update({ grant_scope_ids: [] });
await visit(urls.role);
- await click(`[href="${urls.roleScopes}"]`);
+ await click(commonSelectors.HREF(urls.roleScopes));
- assert.dom(TABLE_ROW_SELECTOR).exists({ count: 0 });
+ assert.dom(commonSelectors.TABLE_ROW).exists({ count: 0 });
- await click(MANAGE_DROPDOWN_SELECTOR);
- await click(MANAGE_SCOPES_SELECTOR);
+ await click(selectors.MANAGE_DROPDOWN_ROLES);
+ await click(selectors.MANAGE_DROPDOWN_ROLES_SCOPES);
assert.strictEqual(currentURL(), urls.manageScopes);
- await click(`[href="${urls.manageCustomScopes}"]`);
+ await click(commonSelectors.HREF(urls.manageCustomScopes));
// Click three times to select, unselect, then reselect (for coverage)
- await click(SCOPE_CHECKBOX_SELECTOR('org', instances.scopes.org.id));
- await click(SCOPE_CHECKBOX_SELECTOR('org', instances.scopes.org.id));
- await click(SCOPE_CHECKBOX_SELECTOR('org', instances.scopes.org.id));
- await click(CANCEL_BTN_SELECTOR);
+ await click(selectors.SCOPE_CHECKBOX('org', instances.scopes.org.id));
+ await click(selectors.SCOPE_CHECKBOX('org', instances.scopes.org.id));
+ await click(selectors.SCOPE_CHECKBOX('org', instances.scopes.org.id));
+ await click(commonSelectors.CANCEL_BTN);
assert.strictEqual(currentURL(), urls.manageScopes);
- await click(CANCEL_BTN_SELECTOR);
+ await click(commonSelectors.CANCEL_BTN);
assert.strictEqual(currentURL(), urls.roleScopes);
- assert.dom(TABLE_ROW_SELECTOR).exists({ count: 0 });
+ assert.dom(commonSelectors.TABLE_ROW).exists({ count: 0 });
});
test('shows error message on custom scope save on manage custom scopes page', async function (assert) {
@@ -478,11 +459,11 @@ module('Acceptance | roles | global-scope', function (hooks) {
instances.role.update({ grant_scope_ids: [] });
await visit(urls.role);
- await click(MANAGE_DROPDOWN_SELECTOR);
- await click(MANAGE_SCOPES_SELECTOR);
- await click(`[href="${urls.manageCustomScopes}"]`);
- await click(SCOPE_CHECKBOX_SELECTOR('org', instances.scopes.org.id));
- await click(SAVE_BTN_SELECTOR);
+ await click(selectors.MANAGE_DROPDOWN_ROLES);
+ await click(selectors.MANAGE_DROPDOWN_ROLES_SCOPES);
+ await click(commonSelectors.HREF(urls.manageCustomScopes));
+ await click(selectors.SCOPE_CHECKBOX('org', instances.scopes.org.id));
+ await click(commonSelectors.SAVE_BTN);
assert.dom(commonSelectors.ALERT_TOAST_BODY).isVisible();
});
@@ -492,10 +473,10 @@ module('Acceptance | roles | global-scope', function (hooks) {
confirmService.enabled = true;
await visit(urls.manageScopes);
- await click(`[href="${urls.manageCustomScopes}"]`);
- await click(SCOPE_CHECKBOX_SELECTOR('org', instances.scopes.org.id));
+ await click(commonSelectors.HREF(urls.manageCustomScopes));
+ await click(selectors.SCOPE_CHECKBOX('org', instances.scopes.org.id));
- await click(`[href="${urls.roles}"]`);
+ await click(commonSelectors.HREF(urls.roles));
assert.dom(commonSelectors.MODAL_WARNING).isVisible();
@@ -509,10 +490,10 @@ module('Acceptance | roles | global-scope', function (hooks) {
confirmService.enabled = true;
await visit(urls.manageScopes);
- await click(`[href="${urls.manageCustomScopes}"]`);
- await click(SCOPE_CHECKBOX_SELECTOR('org', instances.scopes.org.id));
+ await click(commonSelectors.HREF(urls.manageCustomScopes));
+ await click(selectors.SCOPE_CHECKBOX('org', instances.scopes.org.id));
- await click(`[href="${urls.roles}"]`);
+ await click(commonSelectors.HREF(urls.roles));
assert.dom(commonSelectors.MODAL_WARNING).isVisible();
@@ -527,21 +508,21 @@ module('Acceptance | roles | global-scope', function (hooks) {
});
await visit(urls.manageScopes);
- await click(`[href="${urls.manageCustomScopes}"]`);
- await click(SCOPE_CHECKBOX_SELECTOR('org', instances.scopes.org.id));
+ await click(commonSelectors.HREF(urls.manageCustomScopes));
+ await click(selectors.SCOPE_CHECKBOX('org', instances.scopes.org.id));
- assert.dom(REMOVE_ORG_MODAL('org')).isVisible();
+ assert.dom(selectors.REMOVE_ORG_MODAL('org')).isVisible();
- await click(REMOVE_ORG_ONLY_BUTTON);
- await click(SAVE_BTN_SELECTOR);
+ await click(selectors.REMOVE_ORG_ONLY_BTN('org'));
+ await click(commonSelectors.SAVE_BTN);
assert.strictEqual(currentURL(), urls.manageScopes);
- assert.dom(BUTTON_ICON_SELECTOR).isVisible();
+ assert.dom(selectors.MANAGE_CUSTOM_SCOPES_BUTTON_ICON).isVisible();
- await click(SAVE_BTN_SELECTOR);
+ await click(commonSelectors.SAVE_BTN);
assert.strictEqual(currentURL(), urls.roleScopes);
- assert.dom(TABLE_ROW_SELECTOR).exists({ count: 1 });
+ assert.dom(commonSelectors.TABLE_ROW).exists({ count: 1 });
});
test('user can choose to deselect an org and projects using modal on manage custom scopes page', async function (assert) {
@@ -550,41 +531,41 @@ module('Acceptance | roles | global-scope', function (hooks) {
});
await visit(urls.manageScopes);
- await click(`[href="${urls.manageCustomScopes}"]`);
- await click(SCOPE_CHECKBOX_SELECTOR('org', instances.scopes.org.id));
+ await click(commonSelectors.HREF(urls.manageCustomScopes));
+ await click(selectors.SCOPE_CHECKBOX('org', instances.scopes.org.id));
- assert.dom(REMOVE_ORG_MODAL('org')).isVisible();
+ assert.dom(selectors.REMOVE_ORG_MODAL('org')).isVisible();
- await click(REMOVE_ORG_PROJECTS_BUTTON);
- await click(SAVE_BTN_SELECTOR);
+ await click(selectors.REMOVE_ORG_PROJECTS_BTN('org'));
+ await click(commonSelectors.SAVE_BTN);
assert.strictEqual(currentURL(), urls.manageScopes);
- assert.dom(BUTTON_ICON_SELECTOR).isVisible();
+ assert.dom(selectors.MANAGE_CUSTOM_SCOPES_BUTTON_ICON).isVisible();
- await click(SAVE_BTN_SELECTOR);
+ await click(commonSelectors.SAVE_BTN);
assert.strictEqual(currentURL(), urls.roleScopes);
- assert.dom(TABLE_ROW_SELECTOR).exists({ count: 0 });
+ assert.dom(commonSelectors.TABLE_ROW).exists({ count: 0 });
});
test('user cannot trigger modal when deselecting an org with no projects selected on manage custom scopes page', async function (assert) {
instances.role.update({ grant_scope_ids: [instances.scopes.org.id] });
await visit(urls.manageScopes);
- await click(`[href="${urls.manageCustomScopes}"]`);
- await click(SCOPE_CHECKBOX_SELECTOR('org', instances.scopes.org.id));
+ await click(commonSelectors.HREF(urls.manageCustomScopes));
+ await click(selectors.SCOPE_CHECKBOX('org', instances.scopes.org.id));
- assert.dom(REMOVE_ORG_MODAL('org')).doesNotExist();
+ assert.dom(selectors.REMOVE_ORG_MODAL('org')).doesNotExist();
- await click(SAVE_BTN_SELECTOR);
+ await click(commonSelectors.SAVE_BTN);
assert.strictEqual(currentURL(), urls.manageScopes);
- assert.dom(BUTTON_ICON_SELECTOR).isVisible();
+ assert.dom(selectors.MANAGE_CUSTOM_SCOPES_BUTTON_ICON).isVisible();
- await click(SAVE_BTN_SELECTOR);
+ await click(commonSelectors.SAVE_BTN);
assert.strictEqual(currentURL(), urls.roleScopes);
- assert.dom(TABLE_ROW_SELECTOR).exists({ count: 0 });
+ assert.dom(commonSelectors.TABLE_ROW).exists({ count: 0 });
});
test('user can choose to only deselect all orgs using modal on manage custom scopes page', async function (assert) {
@@ -593,24 +574,24 @@ module('Acceptance | roles | global-scope', function (hooks) {
});
await visit(urls.manageScopes);
- await click(`[href="${urls.manageCustomScopes}"]`);
+ await click(commonSelectors.HREF(urls.manageCustomScopes));
// Click once to select all
- await click(TABLE_ALL_CHECKBOX);
+ await click(selectors.TABLE_ALL_CHECKBOX);
// Click once more to deselect all
- await click(TABLE_ALL_CHECKBOX);
+ await click(selectors.TABLE_ALL_CHECKBOX);
- assert.dom(REMOVE_ORG_MODAL('all-orgs')).isVisible();
+ assert.dom(selectors.REMOVE_ORG_MODAL('all-orgs')).isVisible();
- await click(REMOVE_ORG_ONLY_BUTTON);
- await click(SAVE_BTN_SELECTOR);
+ await click(selectors.REMOVE_ORG_ONLY_BTN('all-orgs'));
+ await click(commonSelectors.SAVE_BTN);
assert.strictEqual(currentURL(), urls.manageScopes);
- assert.dom(BUTTON_ICON_SELECTOR).isVisible();
+ assert.dom(selectors.MANAGE_CUSTOM_SCOPES_BUTTON_ICON).isVisible();
- await click(SAVE_BTN_SELECTOR);
+ await click(commonSelectors.SAVE_BTN);
assert.strictEqual(currentURL(), urls.roleScopes);
- assert.dom(TABLE_ROW_SELECTOR).exists({ count: 1 });
+ assert.dom(commonSelectors.TABLE_ROW).exists({ count: 1 });
});
test('user can choose to deselect all orgs and projects using modal on manage custom scopes page', async function (assert) {
@@ -619,47 +600,47 @@ module('Acceptance | roles | global-scope', function (hooks) {
});
await visit(urls.manageScopes);
- await click(`[href="${urls.manageCustomScopes}"]`);
+ await click(commonSelectors.HREF(urls.manageCustomScopes));
// Click once to select all
- await click(TABLE_ALL_CHECKBOX);
+ await click(selectors.TABLE_ALL_CHECKBOX);
// Click once more to deselect all
- await click(TABLE_ALL_CHECKBOX);
+ await click(selectors.TABLE_ALL_CHECKBOX);
- assert.dom(REMOVE_ORG_MODAL('all-orgs')).isVisible();
+ assert.dom(selectors.REMOVE_ORG_MODAL('all-orgs')).isVisible();
- await click(REMOVE_ORG_PROJECTS_BUTTON);
- await click(SAVE_BTN_SELECTOR);
+ await click(selectors.REMOVE_ORG_PROJECTS_BTN('all-orgs'));
+ await click(commonSelectors.SAVE_BTN);
assert.strictEqual(currentURL(), urls.manageScopes);
- assert.dom(BUTTON_ICON_SELECTOR).isVisible();
+ assert.dom(selectors.MANAGE_CUSTOM_SCOPES_BUTTON_ICON).isVisible();
- await click(SAVE_BTN_SELECTOR);
+ await click(commonSelectors.SAVE_BTN);
assert.strictEqual(currentURL(), urls.roleScopes);
- assert.dom(TABLE_ROW_SELECTOR).exists({ count: 0 });
+ assert.dom(commonSelectors.TABLE_ROW).exists({ count: 0 });
});
test('user cannot trigger modal when deselecting all orgs with no projects selected on manage custom scopes page', async function (assert) {
instances.role.update({ grant_scope_ids: [instances.scopes.org.id] });
await visit(urls.manageScopes);
- await click(`[href="${urls.manageCustomScopes}"]`);
+ await click(commonSelectors.HREF(urls.manageCustomScopes));
// Click once to select all
- await click(TABLE_ALL_CHECKBOX);
+ await click(selectors.TABLE_ALL_CHECKBOX);
// Click once more to deselect all
- await click(TABLE_ALL_CHECKBOX);
+ await click(selectors.TABLE_ALL_CHECKBOX);
- assert.dom(REMOVE_ORG_MODAL('all-orgs')).doesNotExist();
+ assert.dom(selectors.REMOVE_ORG_MODAL('all-orgs')).doesNotExist();
- await click(SAVE_BTN_SELECTOR);
+ await click(commonSelectors.SAVE_BTN);
assert.strictEqual(currentURL(), urls.manageScopes);
- assert.dom(BUTTON_ICON_SELECTOR).isVisible();
+ assert.dom(selectors.MANAGE_CUSTOM_SCOPES_BUTTON_ICON).isVisible();
- await click(SAVE_BTN_SELECTOR);
+ await click(commonSelectors.SAVE_BTN);
assert.strictEqual(currentURL(), urls.roleScopes);
- assert.dom(TABLE_ROW_SELECTOR).exists({ count: 0 });
+ assert.dom(commonSelectors.TABLE_ROW).exists({ count: 0 });
});
test('user can search for a specific org scope by id on manage custom scopes page', async function (assert) {
@@ -669,22 +650,23 @@ module('Acceptance | roles | global-scope', function (hooks) {
});
await visit(urls.manageScopes);
- await click(`[href="${urls.manageCustomScopes}"]`);
+ await click(commonSelectors.HREF(urls.manageCustomScopes));
assert
- .dom(SCOPE_CHECKBOX_SELECTOR('org', instances.scopes.org.id))
- .exists();
- assert.dom(SCOPE_CHECKBOX_SELECTOR('org', anotherOrg.id)).exists();
+ .dom(selectors.SCOPE_CHECKBOX('org', instances.scopes.org.id))
+ .isVisible();
+ assert.dom(selectors.SCOPE_CHECKBOX('org', anotherOrg.id)).isVisible();
- await fillIn(SEARCH_INPUT_SELECTOR, instances.scopes.org.id);
+ await fillIn(commonSelectors.SEARCH_INPUT, instances.scopes.org.id);
await waitUntil(
- () => findAll(SCOPE_CHECKBOX_SELECTOR('org', anotherOrg.id)).length === 0,
+ () =>
+ findAll(selectors.SCOPE_CHECKBOX('org', anotherOrg.id)).length === 0,
);
assert
- .dom(SCOPE_CHECKBOX_SELECTOR('org', instances.scopes.org.id))
- .exists();
- assert.dom(SCOPE_CHECKBOX_SELECTOR('org', anotherOrg.id)).doesNotExist();
+ .dom(selectors.SCOPE_CHECKBOX('org', instances.scopes.org.id))
+ .isVisible();
+ assert.dom(selectors.SCOPE_CHECKBOX('org', anotherOrg.id)).doesNotExist();
});
test('user can search for org scopes and get no results on manage custom scopes page', async function (assert) {
@@ -694,101 +676,104 @@ module('Acceptance | roles | global-scope', function (hooks) {
});
await visit(urls.manageScopes);
- await click(`[href="${urls.manageCustomScopes}"]`);
+ await click(commonSelectors.HREF(urls.manageCustomScopes));
assert
- .dom(SCOPE_CHECKBOX_SELECTOR('org', instances.scopes.org.id))
- .exists();
- assert.dom(SCOPE_CHECKBOX_SELECTOR('org', anotherOrg.id)).exists();
+ .dom(selectors.SCOPE_CHECKBOX('org', instances.scopes.org.id))
+ .isVisible();
+ assert.dom(selectors.SCOPE_CHECKBOX('org', anotherOrg.id)).isVisible();
- await fillIn(SEARCH_INPUT_SELECTOR, 'fake scope that does not exist');
- await waitUntil(() => findAll(NO_RESULTS_MSG_SELECTOR).length === 1);
+ await fillIn(
+ commonSelectors.SEARCH_INPUT,
+ 'fake scope that does not exist',
+ );
+ await waitUntil(
+ () => findAll(selectors.NO_RESULTS_GRANT_SCOPE_MSG).length === 1,
+ );
assert
- .dom(SCOPE_CHECKBOX_SELECTOR('org', instances.scopes.org.id))
+ .dom(selectors.SCOPE_CHECKBOX('org', instances.scopes.org.id))
.doesNotExist();
- assert.dom(SCOPE_CHECKBOX_SELECTOR('org', anotherOrg.id)).doesNotExist();
- assert.dom(NO_RESULTS_MSG_SELECTOR).includesText('No results found');
+ assert.dom(selectors.SCOPE_CHECKBOX('org', anotherOrg.id)).doesNotExist();
+ assert
+ .dom(selectors.NO_RESULTS_GRANT_SCOPE_MSG)
+ .includesText('No results found');
});
test('user can save custom scopes to add on manage org projects page', async function (assert) {
instances.role.update({ grant_scope_ids: [] });
await visit(urls.role);
- await click(`[href="${urls.roleScopes}"]`);
+ await click(commonSelectors.HREF(urls.roleScopes));
- assert.dom(TABLE_ROW_SELECTOR).exists({ count: 0 });
+ assert.dom(commonSelectors.TABLE_ROW).exists({ count: 0 });
- await click(MANAGE_DROPDOWN_SELECTOR);
- await click(MANAGE_SCOPES_SELECTOR);
- await click(`[href="${urls.manageCustomScopes}"]`);
- await click(
- `tbody [href="${urls.manageScopes}/${instances.scopes.org.id}"]`,
- );
+ await click(selectors.MANAGE_DROPDOWN_ROLES);
+ await click(selectors.MANAGE_DROPDOWN_ROLES_SCOPES);
+ await click(commonSelectors.HREF(urls.manageCustomScopes));
+ await click(commonSelectors.TABLE_RESOURCE_LINK(urls.manageScopesOrg));
await a11yAudit();
// Click three times to select, unselect, then reselect (for coverage)
await click(
- SCOPE_CHECKBOX_SELECTOR('project', instances.scopes.project.id),
+ selectors.SCOPE_CHECKBOX('project', instances.scopes.project.id),
);
await click(
- SCOPE_CHECKBOX_SELECTOR('project', instances.scopes.project.id),
+ selectors.SCOPE_CHECKBOX('project', instances.scopes.project.id),
);
await click(
- SCOPE_CHECKBOX_SELECTOR('project', instances.scopes.project.id),
+ selectors.SCOPE_CHECKBOX('project', instances.scopes.project.id),
);
- await click(SAVE_BTN_SELECTOR);
+ await click(commonSelectors.SAVE_BTN);
assert.strictEqual(currentURL(), urls.manageCustomScopes);
- await click(SAVE_BTN_SELECTOR);
+ await click(commonSelectors.SAVE_BTN);
assert.strictEqual(currentURL(), urls.manageScopes);
- assert.dom(BUTTON_ICON_SELECTOR).isVisible();
+ assert.dom(selectors.MANAGE_CUSTOM_SCOPES_BUTTON_ICON).isVisible();
- await click(SAVE_BTN_SELECTOR);
+ await click(commonSelectors.SAVE_BTN);
assert.strictEqual(currentURL(), urls.roleScopes);
- assert.dom(TABLE_ROW_SELECTOR).exists({ count: 1 });
+ assert.dom(commonSelectors.TABLE_ROW).exists({ count: 1 });
});
test('user can cancel custom scopes to add on manage org projects page', async function (assert) {
instances.role.update({ grant_scope_ids: [] });
await visit(urls.role);
- await click(`[href="${urls.roleScopes}"]`);
+ await click(commonSelectors.HREF(urls.roleScopes));
- assert.dom(TABLE_ROW_SELECTOR).exists({ count: 0 });
+ assert.dom(commonSelectors.TABLE_ROW).exists({ count: 0 });
- await click(MANAGE_DROPDOWN_SELECTOR);
- await click(MANAGE_SCOPES_SELECTOR);
- await click(`[href="${urls.manageCustomScopes}"]`);
- await click(
- `tbody [href="${urls.manageScopes}/${instances.scopes.org.id}"]`,
- );
+ await click(selectors.MANAGE_DROPDOWN_ROLES);
+ await click(selectors.MANAGE_DROPDOWN_ROLES_SCOPES);
+ await click(commonSelectors.HREF(urls.manageCustomScopes));
+ await click(commonSelectors.TABLE_RESOURCE_LINK(urls.manageScopesOrg));
// Click three times to select, unselect, then reselect (for coverage)
await click(
- SCOPE_CHECKBOX_SELECTOR('project', instances.scopes.project.id),
+ selectors.SCOPE_CHECKBOX('project', instances.scopes.project.id),
);
await click(
- SCOPE_CHECKBOX_SELECTOR('project', instances.scopes.project.id),
+ selectors.SCOPE_CHECKBOX('project', instances.scopes.project.id),
);
await click(
- SCOPE_CHECKBOX_SELECTOR('project', instances.scopes.project.id),
+ selectors.SCOPE_CHECKBOX('project', instances.scopes.project.id),
);
- await click(CANCEL_BTN_SELECTOR);
+ await click(commonSelectors.CANCEL_BTN);
assert.strictEqual(currentURL(), urls.manageCustomScopes);
- await click(CANCEL_BTN_SELECTOR);
+ await click(commonSelectors.CANCEL_BTN);
assert.strictEqual(currentURL(), urls.manageScopes);
- await click(CANCEL_BTN_SELECTOR);
+ await click(commonSelectors.CANCEL_BTN);
assert.strictEqual(currentURL(), urls.roleScopes);
- assert.dom(TABLE_ROW_SELECTOR).exists({ count: 0 });
+ assert.dom(commonSelectors.TABLE_ROW).exists({ count: 0 });
});
test('shows error message on custom scope save on manage org projects page', async function (assert) {
@@ -807,16 +792,14 @@ module('Acceptance | roles | global-scope', function (hooks) {
instances.role.update({ grant_scope_ids: [] });
await visit(urls.role);
- await click(MANAGE_DROPDOWN_SELECTOR);
- await click(MANAGE_SCOPES_SELECTOR);
- await click(`[href="${urls.manageCustomScopes}"]`);
+ await click(selectors.MANAGE_DROPDOWN_ROLES);
+ await click(selectors.MANAGE_DROPDOWN_ROLES_SCOPES);
+ await click(commonSelectors.HREF(urls.manageCustomScopes));
+ await click(commonSelectors.TABLE_RESOURCE_LINK(urls.manageScopesOrg));
await click(
- `tbody [href="${urls.manageScopes}/${instances.scopes.org.id}"]`,
+ selectors.SCOPE_CHECKBOX('project', instances.scopes.project.id),
);
- await click(
- SCOPE_CHECKBOX_SELECTOR('project', instances.scopes.project.id),
- );
- await click(SAVE_BTN_SELECTOR);
+ await click(commonSelectors.SAVE_BTN);
assert.dom(commonSelectors.ALERT_TOAST_BODY).isVisible();
});
@@ -826,14 +809,12 @@ module('Acceptance | roles | global-scope', function (hooks) {
confirmService.enabled = true;
await visit(urls.manageScopes);
- await click(`[href="${urls.manageCustomScopes}"]`);
+ await click(commonSelectors.HREF(urls.manageCustomScopes));
+ await click(commonSelectors.TABLE_RESOURCE_LINK(urls.manageScopesOrg));
await click(
- `tbody [href="${urls.manageScopes}/${instances.scopes.org.id}"]`,
+ selectors.SCOPE_CHECKBOX('project', instances.scopes.project.id),
);
- await click(
- SCOPE_CHECKBOX_SELECTOR('project', instances.scopes.project.id),
- );
- await click(`[href="${urls.roles}"]`);
+ await click(commonSelectors.HREF(urls.roles));
assert.dom(commonSelectors.MODAL_WARNING).isVisible();
@@ -847,14 +828,12 @@ module('Acceptance | roles | global-scope', function (hooks) {
confirmService.enabled = true;
await visit(urls.manageScopes);
- await click(`[href="${urls.manageCustomScopes}"]`);
+ await click(commonSelectors.HREF(urls.manageCustomScopes));
+ await click(commonSelectors.TABLE_RESOURCE_LINK(urls.manageScopesOrg));
await click(
- `tbody [href="${urls.manageScopes}/${instances.scopes.org.id}"]`,
+ selectors.SCOPE_CHECKBOX('project', instances.scopes.project.id),
);
- await click(
- SCOPE_CHECKBOX_SELECTOR('project', instances.scopes.project.id),
- );
- await click(`[href="${urls.roles}"]`);
+ await click(commonSelectors.HREF(urls.roles));
assert.dom(commonSelectors.MODAL_WARNING).isVisible();
@@ -873,30 +852,30 @@ module('Acceptance | roles | global-scope', function (hooks) {
});
await visit(urls.role);
- await click(MANAGE_DROPDOWN_SELECTOR);
- await click(MANAGE_SCOPES_SELECTOR);
- await click(`[href="${urls.manageCustomScopes}"]`);
- await click(
- `tbody [href="${urls.manageScopes}/${instances.scopes.org.id}"]`,
- );
+ await click(selectors.MANAGE_DROPDOWN_ROLES);
+ await click(selectors.MANAGE_DROPDOWN_ROLES_SCOPES);
+ await click(commonSelectors.HREF(urls.manageCustomScopes));
+ await click(commonSelectors.TABLE_RESOURCE_LINK(urls.manageScopesOrg));
assert
- .dom(SCOPE_CHECKBOX_SELECTOR('project', instances.scopes.project.id))
- .exists();
- assert.dom(SCOPE_CHECKBOX_SELECTOR('project', anotherProject.id)).exists();
+ .dom(selectors.SCOPE_CHECKBOX('project', instances.scopes.project.id))
+ .isVisible();
+ assert
+ .dom(selectors.SCOPE_CHECKBOX('project', anotherProject.id))
+ .isVisible();
- await fillIn(SEARCH_INPUT_SELECTOR, instances.scopes.project.id);
+ await fillIn(commonSelectors.SEARCH_INPUT, instances.scopes.project.id);
await waitUntil(
() =>
- findAll(SCOPE_CHECKBOX_SELECTOR('project', anotherProject.id))
+ findAll(selectors.SCOPE_CHECKBOX('project', anotherProject.id))
.length === 0,
);
assert
- .dom(SCOPE_CHECKBOX_SELECTOR('project', instances.scopes.project.id))
- .exists();
+ .dom(selectors.SCOPE_CHECKBOX('project', instances.scopes.project.id))
+ .isVisible();
assert
- .dom(SCOPE_CHECKBOX_SELECTOR('project', anotherProject.id))
+ .dom(selectors.SCOPE_CHECKBOX('project', anotherProject.id))
.doesNotExist();
});
@@ -907,27 +886,34 @@ module('Acceptance | roles | global-scope', function (hooks) {
});
await visit(urls.role);
- await click(MANAGE_DROPDOWN_SELECTOR);
- await click(MANAGE_SCOPES_SELECTOR);
- await click(`[href="${urls.manageCustomScopes}"]`);
- await click(
- `tbody [href="${urls.manageScopes}/${instances.scopes.org.id}"]`,
+ await click(selectors.MANAGE_DROPDOWN_ROLES);
+ await click(selectors.MANAGE_DROPDOWN_ROLES_SCOPES);
+ await click(commonSelectors.HREF(urls.manageCustomScopes));
+ await click(commonSelectors.TABLE_RESOURCE_LINK(urls.manageScopesOrg));
+
+ assert
+ .dom(selectors.SCOPE_CHECKBOX('project', instances.scopes.project.id))
+ .isVisible();
+ assert
+ .dom(selectors.SCOPE_CHECKBOX('project', anotherProject.id))
+ .isVisible();
+
+ await fillIn(
+ commonSelectors.SEARCH_INPUT,
+ 'fake scope that does not exist',
+ );
+ await waitUntil(
+ () => findAll(selectors.NO_RESULTS_GRANT_SCOPE_MSG).length === 1,
);
assert
- .dom(SCOPE_CHECKBOX_SELECTOR('project', instances.scopes.project.id))
- .exists();
- assert.dom(SCOPE_CHECKBOX_SELECTOR('project', anotherProject.id)).exists();
-
- await fillIn(SEARCH_INPUT_SELECTOR, 'fake scope that does not exist');
- await waitUntil(() => findAll(NO_RESULTS_MSG_SELECTOR).length === 1);
-
- assert
- .dom(SCOPE_CHECKBOX_SELECTOR('project', instances.scopes.project.id))
+ .dom(selectors.SCOPE_CHECKBOX('project', instances.scopes.project.id))
.doesNotExist();
assert
- .dom(SCOPE_CHECKBOX_SELECTOR('project', anotherProject.id))
+ .dom(selectors.SCOPE_CHECKBOX('project', anotherProject.id))
.doesNotExist();
- assert.dom(NO_RESULTS_MSG_SELECTOR).includesText('No results found');
+ assert
+ .dom(selectors.NO_RESULTS_GRANT_SCOPE_MSG)
+ .includesText('No results found');
});
});
diff --git a/ui/admin/tests/acceptance/roles/list-test.js b/ui/admin/tests/acceptance/roles/list-test.js
index 131463aa9..c1f36ce2e 100644
--- a/ui/admin/tests/acceptance/roles/list-test.js
+++ b/ui/admin/tests/acceptance/roles/list-test.js
@@ -17,21 +17,14 @@ import setupMirage from 'ember-cli-mirage/test-support/setup-mirage';
import { setupIndexedDb } from 'api/test-support/helpers/indexed-db';
import { authenticateSession } from 'ember-simple-auth/test-support';
import { GRANT_SCOPE_THIS } from 'api/models/role';
+import * as selectors from './selectors';
+import * as commonSelectors from 'admin/tests/helpers/selectors';
module('Acceptance | roles | list', function (hooks) {
setupApplicationTest(hooks);
setupMirage(hooks);
setupIndexedDb(hooks);
- const ROLE_BADGE_SELECTOR = (id) =>
- `tbody [data-test-role-row="${id}"] td:nth-child(2) .hds-badge__text`;
- const ROLE_TOOLTIP_BTN_SELECTOR = (id) =>
- `tbody [data-test-role-row="${id}"] td:nth-child(2) .hds-tooltip-button`;
- const ROLE_TOOLTIP_CONTENT_SELECTOR = (id) =>
- `tbody [data-test-role-row="${id}"] td:nth-child(2) [data-tippy-root]`;
- const SEARCH_INPUT_SELECTOR = '.search-filtering [type="search"]';
- const NO_RESULTS_MSG_SELECTOR = '[data-test-no-role-results]';
-
const instances = {
scopes: {
global: null,
@@ -72,64 +65,66 @@ module('Acceptance | roles | list', function (hooks) {
test('users can navigate to roles with proper authorization', async function (assert) {
await visit(urls.globalScope);
- await click(`[href="${urls.orgScope}"]`);
+ await click(commonSelectors.HREF(urls.orgScope));
assert.true(
instances.scopes.org.authorized_collection_actions.roles.includes('list'),
);
- assert.dom(`[href="${urls.roles}"]`).exists();
+ assert.dom(commonSelectors.HREF(urls.roles)).isVisible();
});
test('users cannot navigate to index without either list or create actions', async function (assert) {
instances.scopes.org.authorized_collection_actions.roles = [];
await visit(urls.globalScope);
- await click(`[href="${urls.orgScope}"]`);
+ await click(commonSelectors.HREF(urls.orgScope));
assert.false(
instances.scopes.org.authorized_collection_actions.roles.includes('list'),
);
- assert.dom(`[href="${urls.roles}"]`).doesNotExist();
+ assert.dom(commonSelectors.HREF(urls.roles)).doesNotExist();
});
test('users can navigate to index with only create action', async function (assert) {
instances.scopes.org.authorized_collection_actions.roles = ['create'];
await visit(urls.globalScope);
- await click(`[href="${urls.orgScope}"]`);
+ await click(commonSelectors.HREF(urls.orgScope));
- assert.dom(`[href="${urls.roles}"]`).exists();
+ assert.dom(commonSelectors.HREF(urls.roles)).isVisible();
});
- test('user can search for a specifc role by id', async function (assert) {
+ test('user can search for a specific role by id', async function (assert) {
await visit(urls.orgScope);
- await click(`[href="${urls.roles}"]`);
+ await click(commonSelectors.HREF(urls.roles));
- assert.dom(`[href="${urls.role1}"]`).exists();
- assert.dom(`[href="${urls.role2}"]`).exists();
+ assert.dom(commonSelectors.HREF(urls.role1)).isVisible();
+ assert.dom(commonSelectors.HREF(urls.role2)).isVisible();
- await fillIn(SEARCH_INPUT_SELECTOR, instances.role1.id);
- await waitUntil(() => findAll(`[href="${urls.role2}"]`).length === 0);
+ await fillIn(commonSelectors.SEARCH_INPUT, instances.role1.id);
+ await waitUntil(
+ () => findAll(commonSelectors.HREF(urls.role2)).length === 0,
+ );
- assert.dom(`[href="${urls.role1}"]`).exists();
- assert.dom(`[href="${urls.role2}"]`).doesNotExist();
+ assert.dom(commonSelectors.HREF(urls.role1)).isVisible();
+ assert.dom(commonSelectors.HREF(urls.role2)).doesNotExist();
});
test('user can search for roles and get no results', async function (assert) {
await visit(urls.orgScope);
- await click(`[href="${urls.roles}"]`);
+ await click(commonSelectors.HREF(urls.roles));
- assert.dom(`[href="${urls.role1}"]`).exists();
- assert.dom(`[href="${urls.role2}"]`).exists();
+ assert.dom(commonSelectors.HREF(urls.role1)).isVisible();
+ assert.dom(commonSelectors.HREF(urls.role2)).isVisible();
- await fillIn(SEARCH_INPUT_SELECTOR, 'fake role that does not exist');
- await waitUntil(() => findAll(NO_RESULTS_MSG_SELECTOR).length === 1);
+ await fillIn(commonSelectors.SEARCH_INPUT, 'fake role that does not exist');
+ await waitUntil(() => findAll(selectors.NO_RESULTS_MSG).length === 1);
- assert.dom(`[href="${urls.role1}"]`).doesNotExist();
- assert.dom(`[href="${urls.role2}"]`).doesNotExist();
- assert.dom(NO_RESULTS_MSG_SELECTOR).includesText('No results found');
+ assert.dom(commonSelectors.HREF(urls.role1)).doesNotExist();
+ assert.dom(commonSelectors.HREF(urls.role2)).doesNotExist();
+ assert.dom(selectors.NO_RESULTS_MSG).includesText('No results found');
});
test('correct badge in grants applied column is visible to user', async function (assert) {
@@ -138,22 +133,22 @@ module('Acceptance | roles | list', function (hooks) {
);
await visit(urls.orgScope);
- await click(`[href="${urls.roles}"]`);
+ await click(commonSelectors.HREF(urls.roles));
assert.true(instances.role2.grant_scope_ids.includes(GRANT_SCOPE_THIS));
- assert.dom(ROLE_BADGE_SELECTOR(instances.role1.id)).hasText('No');
- assert.dom(ROLE_BADGE_SELECTOR(instances.role2.id)).hasText('Yes');
+ assert.dom(selectors.ROLE_BADGE(instances.role1.id)).hasText('No');
+ assert.dom(selectors.ROLE_BADGE(instances.role2.id)).hasText('Yes');
- await focus(ROLE_TOOLTIP_BTN_SELECTOR(instances.role1.id));
+ await focus(selectors.ROLE_TOOLTIP_BTN(instances.role1.id));
assert
- .dom(ROLE_TOOLTIP_CONTENT_SELECTOR(instances.role1.id))
+ .dom(selectors.ROLE_TOOLTIP_CONTENT(instances.role1.id))
.hasText('The grants on this role have not been applied to this scope.');
- await focus(ROLE_TOOLTIP_BTN_SELECTOR(instances.role2.id));
+ await focus(selectors.ROLE_TOOLTIP_BTN(instances.role2.id));
assert
- .dom(ROLE_TOOLTIP_CONTENT_SELECTOR(instances.role2.id))
+ .dom(selectors.ROLE_TOOLTIP_CONTENT(instances.role2.id))
.hasText('The grants on this role have been applied to this scope.');
});
});
diff --git a/ui/admin/tests/acceptance/roles/selectors.js b/ui/admin/tests/acceptance/roles/selectors.js
index 4dbdc3fcb..4283610eb 100644
--- a/ui/admin/tests/acceptance/roles/selectors.js
+++ b/ui/admin/tests/acceptance/roles/selectors.js
@@ -12,3 +12,34 @@ export const MANAGE_DROPDOWN_ROLES_SCOPES =
'[data-test-manage-dropdown-scopes]';
export const MANAGE_DROPDOWN_ROLES_REMOVE =
'[data-test-manage-roles-dropdown] div:last-child button';
+
+export const ROLE_BADGE = (id) =>
+ `tbody [data-test-role-row="${id}"] td:nth-child(2) .hds-badge__text`;
+export const ROLE_TOOLTIP_BTN = (id) =>
+ `tbody [data-test-role-row="${id}"] td:nth-child(2) .hds-tooltip-button`;
+export const ROLE_TOOLTIP_CONTENT = (id) =>
+ `tbody [data-test-role-row="${id}"] td:nth-child(2) [data-tippy-root]`;
+export const GRANT_SCOPE_ROW = (id) =>
+ `tbody [data-test-grant-scope-row="${id}"]`;
+export const GRANT_SCOPE_PARENT_SCOPE =
+ 'tbody tr:nth-child(2) td:nth-child(3) a';
+export const TABLE_ALL_CHECKBOX = 'thead input[type="checkbox"]';
+
+export const NO_RESULTS_MSG = '[data-test-no-role-results]';
+export const NO_RESULTS_GRANT_SCOPE_MSG = '[data-test-no-grant-scope-results]';
+
+export const NO_SCOPES_MSG = '.role-grant-scopes div';
+export const NO_SCOPES_MSG_LINK = '.role-grant-scopes div div:nth-child(3) a';
+
+// Manage scopes selectors
+export const SCOPE_TOGGLE = (name) => `.hds-form-toggle input[name="${name}"]`;
+export const SCOPE_CHECKBOX = (type, id) =>
+ `tbody [data-test-${type}-scopes-table-row="${id}"] input`;
+export const MANAGE_CUSTOM_SCOPES_BUTTON_ICON =
+ '[data-test-manage-custom-scopes-button] [data-test-icon="check-circle"]';
+export const REMOVE_ORG_MODAL = (name) =>
+ `[data-test-manage-scopes-remove-${name}-modal]`;
+export const REMOVE_ORG_ONLY_BTN = (name) =>
+ `[data-test-manage-scopes-remove-${name}-modal] div:nth-child(3) button:last-of-type`;
+export const REMOVE_ORG_PROJECTS_BTN = (name) =>
+ `[data-test-manage-scopes-remove-${name}-modal] div:nth-child(3) button`;
diff --git a/ui/admin/tests/helpers/selectors.js b/ui/admin/tests/helpers/selectors.js
index 34a6f187b..026c99a72 100644
--- a/ui/admin/tests/helpers/selectors.js
+++ b/ui/admin/tests/helpers/selectors.js
@@ -62,3 +62,5 @@ export const FILTER_DROPDOWN = (filterName) =>
export const FILTER_DROPDOWN_ITEM = (itemList) => `input[value="${itemList}"]`;
export const FILTER_DROPDOWN_ITEM_APPLY_BTN = (filterName) =>
`.search-filtering [name="${filterName}"] .hds-dropdown__footer button`;
+
+export const PAGINATION = '[data-test-pagination]';