Skip to content

Commit

Permalink
FAT-12945-FAT-12945 (#3543)
Browse files Browse the repository at this point in the history
* FAT-12945: test added

* FAT-12945: delete method updated

* FAT-12946: test added

* FAT-12945: replaced user accordion method

* reverted user accordion method

* FAT-12945: updated methods

* FAT-12945: removed unused step

* updated user acc method

* methods updated

* timeout added

* reverted all updates
  • Loading branch information
zentestuken committed Apr 29, 2024
1 parent 9876876 commit 5d332d6
Show file tree
Hide file tree
Showing 5 changed files with 176 additions and 1 deletion.
52 changes: 52 additions & 0 deletions cypress/e2e/eureka/authorization-roles/delete-empty-role.cy.js
@@ -0,0 +1,52 @@
import Users from '../../../support/fragments/users/users';
import TopMenu from '../../../support/fragments/topMenu';
import getRandomPostfix from '../../../support/utils/stringTools';
import AuthorizationRoles from '../../../support/fragments/settings/authorization-roles/authorizationRoles';

describe('Eureka', () => {
describe('Settings', () => {
describe('Authorization roles', () => {
const testData = {
roleName: `Auto Role C446119 ${getRandomPostfix()}`,
roleDescription: `Description C446119 ${getRandomPostfix()}`,
};

before('Create role, user', () => {
cy.createTempUser([]).then((createdUserProperties) => {
testData.user = createdUserProperties;
cy.createAuthorizationRoleApi(testData.roleName, testData.roleDescription).then(
(role) => {
testData.roleId = role.id;
cy.login(testData.user.username, testData.user.password, {
path: TopMenu.settingsAuthorizationRoles,
waiter: AuthorizationRoles.waitContentLoading,
});
},
);
});
});

after('Delete role, user', () => {
cy.getAdminToken();
Users.deleteViaApi(testData.user.userId);
cy.deleteAuthorizationRoleApi(testData.roleId, true);
});

it(
'C446119 Delete a role without capabilities and users (eureka)',
{ tags: ['smoke', 'eureka', 'eurekaPhase1'] },
() => {
AuthorizationRoles.searchRole(testData.roleName);
AuthorizationRoles.clickOnRoleName(testData.roleName);
AuthorizationRoles.checkCapabilitiesAccordionCounter('0');
AuthorizationRoles.checkCapabilitySetsAccordionCounter('0');
AuthorizationRoles.checkUsersAccordion();
AuthorizationRoles.clickDeleteRole();
AuthorizationRoles.cancelDeleteRole(testData.roleName);
AuthorizationRoles.clickDeleteRole();
AuthorizationRoles.confirmDeleteRole(testData.roleName);
},
);
});
});
});
68 changes: 68 additions & 0 deletions cypress/e2e/eureka/authorization-roles/delete-role.cy.js
@@ -0,0 +1,68 @@
import Users from '../../../support/fragments/users/users';
import TopMenu from '../../../support/fragments/topMenu';
import getRandomPostfix from '../../../support/utils/stringTools';
import AuthorizationRoles from '../../../support/fragments/settings/authorization-roles/authorizationRoles';

describe('Eureka', () => {
describe('Settings', () => {
describe('Authorization roles', () => {
const testData = {
roleName: `Auto Role C446120 ${getRandomPostfix()}`,
roleDescription: `Description C446120 ${getRandomPostfix()}`,
};

before('Create role, user', () => {
cy.createTempUser([]).then((createdUserProperties) => {
testData.user = createdUserProperties;
cy.createAuthorizationRoleApi(testData.roleName, testData.roleDescription).then(
(role) => {
testData.roleId = role.id;
cy.getCapabilitiesApi(10).then((capabs) => {
cy.getCapabilitySetsApi(3).then((capabSets) => {
cy.getUserRoleIdByNameApi(testData.roleName).then((roleId) => {
testData.roleId = roleId;
cy.addCapabilitiesToNewRoleApi(
roleId,
capabs.map((capab) => capab.id),
);
cy.addCapabilitySetsToNewRoleApi(
roleId,
capabSets.map((capab) => capab.id),
);
cy.addRolesToNewUserApi(createdUserProperties.userId, [roleId]);
});
});
});
cy.login(testData.user.username, testData.user.password, {
path: TopMenu.settingsAuthorizationRoles,
waiter: AuthorizationRoles.waitContentLoading,
});
},
);
});
});

after('Delete role, user', () => {
cy.getAdminToken();
Users.deleteViaApi(testData.user.userId);
cy.deleteAuthorizationRoleApi(testData.roleId, true);
});

it(
'C446120 Delete a role with capabilities and users assigned (eureka)',
{ tags: ['smoke', 'eureka', 'eurekaPhase1'] },
() => {
AuthorizationRoles.searchRole(testData.roleName);
AuthorizationRoles.clickOnRoleName(testData.roleName);
AuthorizationRoles.checkCapabilitiesAccordionCounter('10');
AuthorizationRoles.checkCapabilitySetsAccordionCounter('3');
AuthorizationRoles.checkUsersAccordion(1);
AuthorizationRoles.clickDeleteRole();
AuthorizationRoles.cancelDeleteRole(testData.roleName);
AuthorizationRoles.clickDeleteRole();
AuthorizationRoles.confirmDeleteRole(testData.roleName);
},
);
});
});
});
3 changes: 2 additions & 1 deletion cypress/support/api/permissions.js
Expand Up @@ -177,11 +177,12 @@ Cypress.Commands.add(
},
);

Cypress.Commands.add('deleteAuthorizationRoleApi', (roleId) => {
Cypress.Commands.add('deleteAuthorizationRoleApi', (roleId, ignoreErrors = false) => {
cy.okapiRequest({
method: 'DELETE',
path: `roles/${roleId}`,
isDefaultSearchParamsRequired: false,
failOnStatusCode: !ignoreErrors,
});
});

Expand Down
Expand Up @@ -20,6 +20,8 @@ const rolesPane = Pane('Authorization roles');
const newButton = Button('+ New');
const actionsButton = Button('Actions');
const editButton = Button('Edit');
const deleteButton = Button('Delete');
const cancelButton = Button('Cancel');
const createRolePane = Pane('Create role');
const editRolePane = Pane('Edit role');
const roleNameInput = TextField('Name*');
Expand Down Expand Up @@ -48,6 +50,11 @@ const capabilityTables = {
Procedural: MultiColumnList({ dataTestId: 'capabilities-procedural-type' }),
};

const roleSearchInputField = rolesPane.find(TextField({ testid: 'search-field' }));
const roleSearchButton = rolesPane.find(Button({ dataTestID: 'search-button' }));
const usersAccordion = Accordion('Assigned users');
const deleteRoleModal = Modal('Delete role');

const getResultsListByColumn = (columnIndex) => {
const cells = [];

Expand Down Expand Up @@ -190,6 +197,7 @@ export default {
cy.do(rolesPane.find(HTML(roleName, { className: including('root') })).click());
cy.expect([
Pane(roleName).exists(),
Spinner().absent(),
capabilitiesAccordion.has({ open: false }),
capabilitySetsAccordion.has({ open: false }),
]);
Expand Down Expand Up @@ -306,4 +314,49 @@ export default {
verifyCapabilitySetTableAbsent(tableName) {
cy.expect(capabilitySetsAccordion.find(capabilityTables[tableName]).absent());
},

searchRole: (roleName) => {
cy.do([roleSearchInputField.fillIn(roleName), roleSearchButton.click()]);
},

checkCapabilitiesAccordionCounter: (expectedCount) => {
cy.expect(capabilitiesAccordion.has({ counter: expectedCount }));
},

checkCapabilitySetsAccordionCounter: (expectedCount) => {
cy.expect(capabilitySetsAccordion.has({ counter: expectedCount }));
},

checkUsersAccordion: (expectedCount = false) => {
cy.expect(usersAccordion.has({ open: true }));
if (expectedCount) cy.expect(usersAccordion.find(MultiColumnList({ rowCount: expectedCount })).exists());
else cy.expect(usersAccordion.find(MultiColumnList()).absent());
},

clickDeleteRole: () => {
cy.do([actionsButton.click(), deleteButton.click()]);
cy.expect([
deleteRoleModal.find(deleteButton).exists(),
deleteRoleModal.find(cancelButton).exists(),
]);
},

cancelDeleteRole: (roleName) => {
cy.do(deleteRoleModal.find(cancelButton).click());
cy.expect([deleteRoleModal.absent(), Pane(roleName).exists()]);
},

confirmDeleteRole: (roleName) => {
cy.do(deleteRoleModal.find(deleteButton).click());
cy.expect([
deleteRoleModal.absent(),
Pane(roleName).absent(),
rolesPane.find(HTML(roleName, { className: including('root') })).absent(),
]);
},

clickOnUsersAccordion: (checkOpen = true) => {
cy.do(usersAccordion.clickHeader());
if (checkOpen) cy.expect(usersAccordion.has({ open: true }));
},
};
1 change: 1 addition & 0 deletions interactors/accordion.js
Expand Up @@ -57,6 +57,7 @@ export default HTML.extend('accordion')
inputNames: (el) => [...el.querySelectorAll('input')].map((input) => input.getAttribute('name')),
isWrapper: (el) => /accordionsWrapper/.test(el.className),
validationMessage: (el) => el.querySelector('[class*=validationMessage]').textContent,
counter: (el) => el.querySelector('span[class^=badge] [class^=label]').textContent,
})
.actions({
clickHeader: ({ perform }) => perform((el) => el.querySelector('[class^=labelArea-]').click()),
Expand Down

0 comments on commit 5d332d6

Please sign in to comment.