package com.constellio.app.ui.acceptation.collection; import static org.assertj.core.api.Assertions.assertThat; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.junit.Before; import org.junit.Test; import org.openqa.selenium.By; import org.openqa.selenium.Keys; import com.constellio.app.modules.rm.RMTestRecords; import com.constellio.app.ui.framework.buttons.AuthorizationsButton; import com.constellio.app.ui.framework.buttons.DeleteButton; import com.constellio.app.ui.framework.buttons.DisplayButton; import com.constellio.app.ui.framework.buttons.RolesButton; import com.constellio.app.ui.tools.RecordContainerWebElement; import com.constellio.model.entities.records.wrappers.Group; import com.constellio.model.entities.records.wrappers.User; import com.constellio.model.entities.security.global.GlobalGroupStatus; import com.constellio.model.entities.security.global.UserCredential; import com.constellio.model.services.security.roles.RolesManager; import com.constellio.model.services.users.UserServices; import com.constellio.sdk.tests.ConstellioTest; import com.constellio.sdk.tests.annotations.UiTest; import com.constellio.sdk.tests.selenium.adapters.constellio.ConstellioWebDriver; @UiTest public class ListCollectionUserViewAcceptTest extends ConstellioTest { public static final int USERNAME_COLUMN = 1; public static final int GROUPCODE_COLUMN = 0; public static final String GROUP_CODE = "test"; public static final String GROUP_NAME = "Test group"; public static final String CHUCK = "chuck"; public static final String CHUCK_NORRIS = "Chuck Norris"; public static final String SYSTEM_ADMIN = "System Admin"; UserServices userServices; RolesManager rolesManager; RMTestRecords records = new RMTestRecords(zeCollection); ConstellioWebDriver driver; CollectionSecurityPage page; @Before public void setUp() throws Exception { prepareSystem( withZeCollection().withConstellioRMModule().withAllTestUsers().withRMTest(records) ); userServices = getModelLayerFactory().newUserServices(); userServices.addUpdateGlobalGroup(userServices.createGlobalGroup( GROUP_CODE, GROUP_NAME, Arrays.asList(zeCollection), null, GlobalGroupStatus.ACTIVE, true)); rolesManager = getModelLayerFactory().getRolesManager(); driver = newWebDriver(loggedAsUserInCollection(admin, zeCollection)); page = new CollectionSecurityPage(driver).navigateToPage(); } @Test public void givenBaseConfigurationThenDisplayCorrectInformation() throws Exception { RecordContainerWebElement groups = page.getGroupTable(); assertThat(groups.countRows()).isEqualTo(1); assertThat(groups.hasRowWithValueInColumn(GROUP_CODE, GROUPCODE_COLUMN)).isTrue(); List<UserCredential> test_users = records.getUsers().getAllUsers(); RecordContainerWebElement users = page.getUserTable(); assertThat(users.countRows()).isEqualTo(test_users.size()); for (UserCredential user : test_users) { String fullName = user.getFirstName() + " " + user.getLastName(); assertThat(users.hasRowWithValueInColumn(fullName, USERNAME_COLUMN)).isTrue(); } } @Test public void givenNavigationButtonsClickedThenNavigateToTheCorrectPage() { page.getGroupWithCode(GROUP_CODE).clickButton(DisplayButton.BUTTON_STYLE); assertThat(driver.findRequiredElement(By.id("display-value-group_default_code")).getText()).isEqualTo(GROUP_CODE); page.navigateToPage().getGroupWithCode(GROUP_CODE).clickButton(AuthorizationsButton.BUTTON_STYLE); assertThat(page.getTitle()).contains("Autorisations").contains(GROUP_NAME); page.navigateToPage().getGroupWithCode(GROUP_CODE).clickButton(RolesButton.BUTTON_STYLE); assertThat(page.getTitle()).contains("Rôles").contains(GROUP_NAME); page.navigateToPage().getUserWithName(CHUCK_NORRIS).clickButton(DisplayButton.BUTTON_STYLE); assertThat(driver.findRequiredElement(By.id("display-value-user_default_username")).getText()).isEqualTo(CHUCK); page.navigateToPage().getUserWithName(CHUCK_NORRIS).clickButton(AuthorizationsButton.BUTTON_STYLE); assertThat(page.getTitle()).contains("Autorisations").contains(CHUCK_NORRIS); page.navigateToPage().getUserWithName(CHUCK_NORRIS).clickButton(RolesButton.BUTTON_STYLE); assertThat(page.getTitle()).contains("Rôles").contains(CHUCK_NORRIS); } @Test public void givenUserTriesToRemoveHimselfThenDontRemoveTheUser() { String message = page.getUserWithName(SYSTEM_ADMIN) .clickButtonAndConfirmAndWaitForWarningMessage(DeleteButton.BUTTON_STYLE); assertThat(message).isNotNull(); assertThat(page.getUserTable().hasRowWithValueInColumn(SYSTEM_ADMIN, USERNAME_COLUMN)).isTrue(); } @Test public void givenGroupIsAddedAndRemovedThenAddAndRemoveTheGroup() { page.getGroupWithCode(GROUP_CODE).clickButtonAndConfirm(DeleteButton.BUTTON_STYLE); assertThat(page.getGroupTable().hasRowWithValueInColumn(GROUP_CODE, GROUPCODE_COLUMN)).isFalse(); page.addGroupAndRole(GROUP_CODE, "Utilisateur"); assertThat(page.getGroupTable().hasRowWithValueInColumn(GROUP_CODE, GROUPCODE_COLUMN)).isTrue(); } @Test public void givenUserIsAddedAndRemovedThenAddAndRemoveTheUser() { page.getUserWithName(CHUCK_NORRIS).clickButtonAndConfirm(DeleteButton.BUTTON_STYLE); assertThat(page.getUserTable().hasRowWithValueInColumn(CHUCK_NORRIS, USERNAME_COLUMN)).isFalse(); page.addUserAndRole(CHUCK, "Utilisateur"); page.waitForPageReload(); assertThat(page.getUserTable().hasRowWithValueInColumn(CHUCK_NORRIS, USERNAME_COLUMN)).isTrue(); } @Test public void whenSelectGroupAndRoleThenVerifyIfAddButtonIsEnable() throws Exception { assertThat(page.getGroupAddButton().isEnabled()).isFalse(); page.getGroupLookup().typeAndSelectFirst(GROUP_CODE); Thread.sleep(1000); assertThat(page.getGroupAddButton().isEnabled()).isFalse(); page.getGroupRolesListSelect().select("Utilisateur"); assertThat(page.getGroupAddButton().isEnabled()).isTrue(); page.getGroupLookup().typeAndSelectFirst("" + Keys.BACK_SPACE); // page.getGroupLookup().expandOptions().select(0); assertThat(page.getGroupAddButton().isEnabled()).isFalse(); } @Test public void whenSelectUserAndRoleThenVerifyIfAddButtonIsEnable() throws Exception { assertThat(page.getUserAddButton().isEnabled()).isFalse(); page.getUserLookup().typeAndSelectFirst(CHUCK); Thread.sleep(1000); assertThat(page.getUserAddButton().isEnabled()).isFalse(); page.getUserRolesListSelect().select("Utilisateur"); assertThat(page.getUserAddButton().isEnabled()).isTrue(); page.getUserLookup().clear(); // page.getUserLookup().expandOptions().select(0); assertThat(page.getUserAddButton().isEnabled()).isFalse(); } @Test public void whenRemoveOrAddUserWithRolesThenOk() throws Exception { page.addUserAndRole(CHUCK, "Gestionnaire"); page.waitForPageReload(); assertThat(getUserRoles(CHUCK)).contains("M"); page.getUserWithName(CHUCK_NORRIS).clickButtonAndConfirm(DeleteButton.BUTTON_STYLE); assertThat(page.getUserTable().hasRowWithValueInColumn(CHUCK_NORRIS, USERNAME_COLUMN)).isFalse(); page.addUserAndRole(CHUCK, "Utilisateur"); page.waitForPageReload(); assertThat(page.getUserTable().hasRowWithValueInColumn(CHUCK_NORRIS, USERNAME_COLUMN)).isTrue(); assertThat(getUserRoles(CHUCK)).contains("U"); } @Test public void whenRemoveOrAddGroupWithRolesThenOk() throws Exception { page.addGroupAndRole(GROUP_CODE, "Gestionnaire"); page.getGroupWithCode(GROUP_CODE).clickButtonAndConfirm(DeleteButton.BUTTON_STYLE); assertThat(getGroupRoles(GROUP_CODE)).contains("M"); page.addGroupAndRole(GROUP_CODE, "Utilisateur"); assertThat(page.getGroupTable().hasRowWithValueInColumn(GROUP_CODE, GROUPCODE_COLUMN)).isTrue(); assertThat(getGroupRoles(GROUP_CODE)).contains("U"); } public List<String> getUserRoles(String username) { List<String> result = new ArrayList<>(); User user = userServices.getUserRecordInCollection(username, zeCollection); if (user != null) { for (String role : user.getUserRoles()) { result.add(role); } } return result; } public List<String> getGroupRoles(String groupCode) { List<String> result = new ArrayList<>(); Group group = userServices.getGroupInCollection(groupCode, zeCollection); if (group != null) { for (String role : group.getRoles()) { result.add(role); } } return result; } }