package com.constellio.app.ui.acceptation.permissions;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.ArrayList;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import com.constellio.app.ui.pages.management.permissions.PermissionsManagementViewImpl.CreateRoleButton;
import com.constellio.model.entities.security.Role;
import com.constellio.model.services.extensions.ConstellioModulesManager;
import com.constellio.model.services.security.roles.RolesManager;
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 PermissionsManagementViewAcceptTest extends ConstellioTest {
ConstellioWebDriver driver;
PermissionsManagementPage page;
List<String> permissions;
Role loser;
Role god;
@Before
public void setUp()
throws Exception {
prepareSystem(
withZeCollection().withConstellioRMModule().withAllTestUsers()
);
inCollection(zeCollection).giveWriteAndDeleteAccessTo(admin);
permissions = new ArrayList<>();
ConstellioModulesManager modulesManager = getAppLayerFactory().getModulesManager();
for (String permissionGroup : modulesManager.getPermissionGroups(zeCollection)) {
permissions.addAll(modulesManager.getPermissionsInGroup(zeCollection, permissionGroup));
}
loser = new Role(zeCollection, "L", "Loser", new ArrayList<String>());
god = new Role(zeCollection, "G", "God", permissions);
RolesManager roleManager = getModelLayerFactory().getRolesManager();
roleManager.addRole(loser);
roleManager.addRole(god);
driver = newWebDriver(loggedAsUserInCollection(admin, zeCollection));
page = new PermissionsManagementPage(driver).navigateToPage();
}
@Test
public void givenBaseConfigurationThenDisplayCorrectPermissions() {
verifyCleanPermissionState();
}
@Test
public void givenPermissionsModifiedThenUpdateTheActionButtons() {
assertThat(page.getCreateRoleButton().isEnabled()).isTrue();
assertThat(page.getSaveButton().isEnabled()).isFalse();
assertThat(page.getRevertButton().isEnabled()).isFalse();
page.getPermission("L", permissions.get(0)).toggle();
assertThat(page.getPermission("L", permissions.get(0)).isChecked()).isTrue();
assertThat(page.getCreateRoleButton().isEnabled()).isTrue();
assertThat(page.getSaveButton().isEnabled()).isTrue();
assertThat(page.getRevertButton().isEnabled()).isTrue();
page.getPermission("L", permissions.get(0)).toggle();
assertThat(page.getPermission("L", permissions.get(0)).isChecked()).isFalse();
assertThat(page.getCreateRoleButton().isEnabled()).isTrue();
assertThat(page.getSaveButton().isEnabled()).isFalse();
assertThat(page.getRevertButton().isEnabled()).isFalse();
}
@Test
public void givenPermissionsModifiedAndRevertedThenDisplayCorrectPermissions() {
for (String permission : permissions) {
page.getPermission("L", permission).toggle();
page.getPermission("G", permission).toggle();
}
page.getRevertButton().click();
verifyCleanPermissionState();
}
@Test
public void givenPermissionsModifiedAndSavedThenDisplayCorrectPermissions() {
for (String permission : permissions) {
page.getPermission("L", permission).toggle();
page.getPermission("G", permission).toggle();
}
page.getSaveButton().click();
verifyInvertedPermissionState();
}
@Test
public void givenRoleAddedThenDisplayAddedRole() {
page.openCreateRoleForm()
.setValue(CreateRoleButton.ROLE_CODE, "N")
.setValue(CreateRoleButton.ROLE_TITLE, "New")
.clickSaveButtonAndWaitForPageReload();
verifyCleanPermissionState();
for (String permission : permissions) {
assertThat(page.getPermission("N", permission).isChecked()).isFalse();
}
}
private void verifyCleanPermissionState() {
for (String permission : permissions) {
assertThat(page.getPermission("L", permission).isChecked()).isFalse();
assertThat(page.getPermission("G", permission).isChecked()).isTrue();
}
}
private void verifyInvertedPermissionState() {
for (String permission : permissions) {
assertThat(page.getPermission("L", permission).isChecked()).isTrue();
assertThat(page.getPermission("G", permission).isChecked()).isFalse();
}
}
}