package com.constellio.app.ui.pages.rm.document;
import static com.constellio.app.ui.pages.rm.document.DisplayDocumentMenuAcceptanceTest.AddEditDocumentAction.DELETE;
import static com.constellio.app.ui.pages.rm.document.DisplayDocumentMenuAcceptanceTest.AddEditDocumentAction.MANAGE_AUTHORIZATIONS;
import static com.constellio.app.ui.pages.rm.document.DisplayDocumentMenuAcceptanceTest.AddEditDocumentAction.MODIFY;
import static com.constellio.app.ui.pages.rm.document.DisplayDocumentMenuAcceptanceTest.AddEditDocumentAction.SHARE;
import static com.constellio.app.ui.pages.rm.document.DisplayDocumentMenuAcceptanceTest.AddEditDocumentAction.UPLOAD;
import static java.util.Arrays.asList;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.ArrayList;
import java.util.List;
import com.constellio.app.modules.rm.navigation.RMNavigationConfiguration;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import com.constellio.app.modules.rm.RMTestRecords;
import com.constellio.app.modules.rm.constants.RMPermissionsTo;
import com.constellio.app.modules.rm.constants.RMRoles;
import com.constellio.app.modules.rm.services.RMSchemasRecordsServices;
import com.constellio.app.ui.framework.components.ComponentState;
import com.constellio.app.ui.tools.ButtonWebElement;
import com.constellio.app.ui.tools.RecordFormWebElement;
import com.constellio.model.entities.security.Role;
import com.constellio.model.services.records.RecordServices;
import com.constellio.sdk.tests.ConstellioTest;
import com.constellio.sdk.tests.annotations.UiTest;
import com.constellio.sdk.tests.selenium.adapters.constellio.ConstellioWebDriver;
import com.constellio.sdk.tests.selenium.adapters.constellio.ConstellioWebElement;
@UiTest
public class DisplayDocumentMenuAcceptanceTest extends ConstellioTest {
enum AddEditDocumentAction {
MODIFY, DELETE, MANAGE_AUTHORIZATIONS, UPLOAD, SHARE
}
RecordFormWebElement zeForm;
RecordServices recordServices;
ConstellioWebDriver driver;
RMTestRecords records = new RMTestRecords(zeCollection);
RMSchemasRecordsServices schemas;
@Before
public void setUp()
throws Exception {
prepareSystem(
withZeCollection().withConstellioRMModule().withAllTestUsers().withRMTest(
records).withFoldersAndContainersOfEveryStatus()
.withEvents()
);
inCollection(zeCollection).setCollectionTitleTo("Collection de test");
recordServices = getModelLayerFactory().newRecordServices();
}
@Test
/** Alice is a USER
* Alice can READ
*/
public void givenAliceThenDisplayFolderMenuIsOk() {
logAsInZeCollection(aliceWonderland);
navigateToADocumentInUA10();
assertThatOnlyAvailableActionsAre(UPLOAD, SHARE);
navigateToSemiActiveDocumentInUA10();
assertThatOnlyAvailableActionsAre(UPLOAD, SHARE);
navigateToDestroyedDocumentInUA30();
assertThatOnlyAvailableActionsAre();
navigateToDepositedFolderInUA30();
assertThatOnlyAvailableActionsAre();
}
@Test
/** Admin is a RGD
*/
public void givenAdminThenDisplayDocumentMenuIsOk() {
logAsInZeCollection(admin);
navigateToADocumentInUA10();
assertThatOnlyAvailableActionsAre(MODIFY, DELETE, MANAGE_AUTHORIZATIONS, UPLOAD, SHARE);
navigateToSemiActiveDocumentInUA10();
assertThatOnlyAvailableActionsAre(MODIFY, DELETE, MANAGE_AUTHORIZATIONS, UPLOAD, SHARE);
navigateToDestroyedDocumentInUA30();
assertThatOnlyAvailableActionsAre(MODIFY, DELETE, MANAGE_AUTHORIZATIONS, UPLOAD, SHARE);
navigateToDepositedFolderInUA30();
assertThatOnlyAvailableActionsAre(MODIFY, DELETE, MANAGE_AUTHORIZATIONS, UPLOAD, SHARE);
}
@Test
/** Bob is a USER
* Bob can READ/WRITE in UA 10
* Bob can READ/WRITE in UA 30
*/
public void givenBobThenDisplayDocumentMenuIsOk() {
logAsInZeCollection(bobGratton);
navigateToADocumentInUA10();
assertThatOnlyAvailableActionsAre(MODIFY, UPLOAD, SHARE);
navigateToSemiActiveDocumentInUA10();
assertThatOnlyAvailableActionsAre(UPLOAD, SHARE);
navigateToDestroyedDocumentInUA30();
assertThatOnlyAvailableActionsAre();
navigateToDepositedFolderInUA30();
assertThatOnlyAvailableActionsAre();
}
@Test
/** Bob is a USER
* Bob can READ/WRITE in UA 10
* Bob can READ/WRITE in UA 30
*/
public void givenBobWithShareInactivePermissionThenDisplayDocumentMenuIsOk() {
givenUserRoleHas(RMPermissionsTo.SHARE_A_INACTIVE_DOCUMENT);
logAsInZeCollection(bobGratton);
navigateToADocumentInUA10();
assertThatOnlyAvailableActionsAre(MODIFY, UPLOAD, SHARE);
navigateToSemiActiveDocumentInUA10();
assertThatOnlyAvailableActionsAre(UPLOAD, SHARE);
navigateToDestroyedDocumentInUA30();
assertThatOnlyAvailableActionsAre(SHARE);
navigateToDepositedFolderInUA30();
assertThatOnlyAvailableActionsAre(SHARE);
}
@Test
/** Bob is a USER
* Bob can READ/WRITE in UA 10
* Bob can READ/WRITE in UA 30
*/
public void givenBobWithoutShareSemiActivePermissionThenDisplayDocumentMenuIsOk() {
givenUserRoleHasNo(RMPermissionsTo.SHARE_A_SEMIACTIVE_DOCUMENT);
logAsInZeCollection(bobGratton);
navigateToADocumentInUA10();
assertThatOnlyAvailableActionsAre(MODIFY, UPLOAD, SHARE);
navigateToSemiActiveDocumentInUA10();
assertThatOnlyAvailableActionsAre(UPLOAD);
navigateToDestroyedDocumentInUA30();
assertThatOnlyAvailableActionsAre();
navigateToDepositedFolderInUA30();
assertThatOnlyAvailableActionsAre();
}
private void givenUserRoleHas(String permission) {
Role role = getModelLayerFactory().getRolesManager().getRole(zeCollection, RMRoles.USER);
List<String> permissions = new ArrayList<>(role.getOperationPermissions());
permissions.add(permission);
getModelLayerFactory().getRolesManager().updateRole(role.withPermissions(permissions));
}
private void givenUserRoleHasNo(String permission) {
Role role = getModelLayerFactory().getRolesManager().getRole(zeCollection, RMRoles.USER);
List<String> permissions = new ArrayList<>(role.getOperationPermissions());
permissions.remove(permission);
getModelLayerFactory().getRolesManager().updateRole(role.withPermissions(permissions));
}
@Test
/** Charles is a USER
* Charles can READ/WRITE in UA 10
*/
public void givenCharlesThenDisplayDocumentMenuIsOk() {
logAsInZeCollection(charlesFrancoisXavier);
navigateToADocumentInUA10();
assertThatOnlyAvailableActionsAre(MODIFY, UPLOAD, SHARE);
navigateToSemiActiveDocumentInUA10();
assertThatOnlyAvailableActionsAre(UPLOAD, SHARE);
navigateToDestroyedDocumentInUA30();
assertThatOnlyAvailableActionsAre();
navigateToDepositedFolderInUA30();
assertThatOnlyAvailableActionsAre();
}
@Test
/** Dakota is a MANAGER
* Dakota can READ/WRITE/DELETE in UA 10, 11, 12
*/
public void givenDakotaThenDisplayDocumentMenuIsOk() {
logAsInZeCollection(dakota);
navigateToADocumentInUA10();
assertThatOnlyAvailableActionsAre(MODIFY, DELETE, MANAGE_AUTHORIZATIONS, UPLOAD, SHARE);
navigateToSemiActiveDocumentInUA10();
assertThatOnlyAvailableActionsAre(MANAGE_AUTHORIZATIONS, UPLOAD, DELETE, SHARE);
navigateToDestroyedDocumentInUA10();
assertThatOnlyAvailableActionsAre(MANAGE_AUTHORIZATIONS);
}
@Test
/** Edouard is a USER, but manager in UA 11, 12
* Edouard can READ/WRITE/DELETE in UA 11,12
* Edouard can READ/WRITE in UA 30
*/
public void givenEdouardThenDisplayDocumentMenuIsOk() {
logAsInZeCollection(edouard);
navigateToADocumentInUA11();
assertThatOnlyAvailableActionsAre(MODIFY, DELETE, MANAGE_AUTHORIZATIONS, UPLOAD, SHARE);
navigateToADocumentInUA12();
assertThatOnlyAvailableActionsAre(MODIFY, DELETE, MANAGE_AUTHORIZATIONS, UPLOAD, SHARE);
navigateToADocumentInUA30();
assertThatOnlyAvailableActionsAre(MODIFY, UPLOAD, SHARE);
navigateToSemiActiveDocumentInUA11();
assertThatOnlyAvailableActionsAre(DELETE, MANAGE_AUTHORIZATIONS, UPLOAD, SHARE);
navigateToSemiActiveDocumentInUA12();
assertThatOnlyAvailableActionsAre(DELETE, MANAGE_AUTHORIZATIONS, UPLOAD, SHARE);
navigateToSemiActiveDocumentInUA30();
assertThatOnlyAvailableActionsAre(UPLOAD, SHARE);
navigateToDestroyedDocumentInUA11();
assertThatOnlyAvailableActionsAre(MANAGE_AUTHORIZATIONS);
navigateToDestroyedDocumentInUA12();
assertThatOnlyAvailableActionsAre(MANAGE_AUTHORIZATIONS);
navigateToDestroyedDocumentInUA30();
assertThatOnlyAvailableActionsAre();
}
@Test
/** Gandalf is a MANAGER
* Gandalf can READ/WRITE/DELETE in UA 10
* Gandalf can READ/WRITE/DELETE in UA 30
*/
public void givenGandalfThenDisplayDocumentMenuIsOk() {
logAsInZeCollection(gandalf);
navigateToADocumentInUA10();
assertThatOnlyAvailableActionsAre(MODIFY, DELETE, MANAGE_AUTHORIZATIONS, UPLOAD, SHARE);
navigateToADocumentInUA30();
assertThatOnlyAvailableActionsAre(MODIFY, DELETE, MANAGE_AUTHORIZATIONS, UPLOAD, SHARE);
navigateToSemiActiveDocumentInUA10();
assertThatOnlyAvailableActionsAre(DELETE, MANAGE_AUTHORIZATIONS, UPLOAD, SHARE);
navigateToSemiActiveDocumentInUA30();
assertThatOnlyAvailableActionsAre(DELETE, MANAGE_AUTHORIZATIONS, UPLOAD, SHARE);
navigateToDestroyedDocumentInUA10();
assertThatOnlyAvailableActionsAre(MANAGE_AUTHORIZATIONS);
navigateToDestroyedDocumentInUA30();
assertThatOnlyAvailableActionsAre(MANAGE_AUTHORIZATIONS);
navigateToDepositedFolderInUA30();
assertThatOnlyAvailableActionsAre(MANAGE_AUTHORIZATIONS);
}
@Test
/** Chuck is a RGD
*/
public void givenChuckThenDisplayDocumentMenuIsOk() {
logAsInZeCollection(chuckNorris);
navigateToADocumentInUA10();
assertThatOnlyAvailableActionsAre(MODIFY, DELETE, MANAGE_AUTHORIZATIONS, UPLOAD, SHARE);
navigateToADocumentInUA11();
assertThatOnlyAvailableActionsAre(MODIFY, DELETE, MANAGE_AUTHORIZATIONS, UPLOAD, SHARE);
navigateToADocumentInUA12();
assertThatOnlyAvailableActionsAre(MODIFY, DELETE, MANAGE_AUTHORIZATIONS, UPLOAD, SHARE);
navigateToADocumentInUA30();
assertThatOnlyAvailableActionsAre(MODIFY, DELETE, MANAGE_AUTHORIZATIONS, UPLOAD, SHARE);
navigateToSemiActiveDocumentInUA10();
assertThatOnlyAvailableActionsAre(MODIFY, DELETE, MANAGE_AUTHORIZATIONS, UPLOAD, SHARE);
navigateToSemiActiveDocumentInUA11();
assertThatOnlyAvailableActionsAre(MODIFY, DELETE, MANAGE_AUTHORIZATIONS, UPLOAD, SHARE);
navigateToSemiActiveDocumentInUA12();
assertThatOnlyAvailableActionsAre(MODIFY, DELETE, MANAGE_AUTHORIZATIONS, UPLOAD, SHARE);
navigateToSemiActiveDocumentInUA30();
assertThatOnlyAvailableActionsAre(MODIFY, DELETE, MANAGE_AUTHORIZATIONS, UPLOAD, SHARE);
navigateToDestroyedDocumentInUA10();
assertThatOnlyAvailableActionsAre(MODIFY, DELETE, MANAGE_AUTHORIZATIONS, UPLOAD, SHARE);
navigateToDestroyedDocumentInUA11();
assertThatOnlyAvailableActionsAre(MODIFY, DELETE, MANAGE_AUTHORIZATIONS, UPLOAD, SHARE);
navigateToDestroyedDocumentInUA12();
assertThatOnlyAvailableActionsAre(MODIFY, DELETE, MANAGE_AUTHORIZATIONS, UPLOAD, SHARE);
navigateToDestroyedDocumentInUA30();
assertThatOnlyAvailableActionsAre(MODIFY, DELETE, MANAGE_AUTHORIZATIONS, UPLOAD, SHARE);
navigateToDepositedFolderInUA30();
assertThatOnlyAvailableActionsAre(MODIFY, DELETE, MANAGE_AUTHORIZATIONS, UPLOAD, SHARE);
}
private void logAsInZeCollection(String user) {
driver = newWebDriver(loggedAsUserInCollection(user, zeCollection));
}
private void navigateToSemiActiveDocumentInUA10() {
String id = recordIdWithTitleInCollection("Orange - Petit guide", zeCollection);
driver.navigateTo().url(RMNavigationConfiguration.DISPLAY_DOCUMENT + "/" + id);
}
private void navigateToSemiActiveDocumentInUA11() {
String id = recordIdWithTitleInCollection("Poire - Typologie", zeCollection);
driver.navigateTo().url(RMNavigationConfiguration.DISPLAY_DOCUMENT + "/" + id);
}
private void navigateToSemiActiveDocumentInUA12() {
String id = recordIdWithTitleInCollection("Pomme - Petit guide", zeCollection);
driver.navigateTo().url(RMNavigationConfiguration.DISPLAY_DOCUMENT + "/" + id);
}
private void navigateToSemiActiveDocumentInUA30() {
String id = recordIdWithTitleInCollection("Laitue - Petit guide", zeCollection);
driver.navigateTo().url(RMNavigationConfiguration.DISPLAY_DOCUMENT + "/" + id);
}
private void navigateToDestroyedDocumentInUA30() {
String id = recordIdWithTitleInCollection("Epinard - Livre de recettes", zeCollection);
driver.navigateTo().url(RMNavigationConfiguration.DISPLAY_DOCUMENT + "/" + id);
}
private void navigateToDestroyedDocumentInUA10() {
String id = recordIdWithTitleInCollection("Souris - Livre de recettes", zeCollection);
driver.navigateTo().url(RMNavigationConfiguration.DISPLAY_DOCUMENT + "/" + id);
}
private void navigateToDestroyedDocumentInUA11() {
String id = recordIdWithTitleInCollection("Cerise - Typologie", zeCollection);
driver.navigateTo().url(RMNavigationConfiguration.DISPLAY_DOCUMENT + "/" + id);
}
private void navigateToDestroyedDocumentInUA12() {
String id = recordIdWithTitleInCollection("Avocat - Petit guide", zeCollection);
driver.navigateTo().url(RMNavigationConfiguration.DISPLAY_DOCUMENT + "/" + id);
}
private void navigateToDepositedFolderInUA30() {
String id = recordIdWithTitleInCollection("Pois - Livre de recettes", zeCollection);
driver.navigateTo().url(RMNavigationConfiguration.DISPLAY_DOCUMENT + "/" + id);
}
private void navigateToADocumentInUA10() {
String id = recordIdWithTitleInCollection("Abeille - Livre de recettes", zeCollection);
driver.navigateTo().url(RMNavigationConfiguration.DISPLAY_DOCUMENT + "/" + id);
}
private void navigateToADocumentInUA11() {
String id = recordIdWithTitleInCollection("Abricot - Livre de recettes", zeCollection);
driver.navigateTo().url(RMNavigationConfiguration.DISPLAY_DOCUMENT + "/" + id);
}
private void navigateToADocumentInUA12() {
String id = recordIdWithTitleInCollection("Banane - Livre de recettes", zeCollection);
driver.navigateTo().url(RMNavigationConfiguration.DISPLAY_DOCUMENT + "/" + id);
}
private void navigateToADocumentInUA30() {
String id = recordIdWithTitleInCollection("Chou - Livre de recettes", zeCollection);
driver.navigateTo().url(RMNavigationConfiguration.DISPLAY_DOCUMENT + "/" + id);
}
private org.assertj.core.api.ObjectAssert<ComponentState> assertThatModifyButtonState() {
return assertThatButtonState("Éditer la fiche du document");
}
private org.assertj.core.api.ObjectAssert<ComponentState> assertThatDeleteButtonState() {
return assertThatButtonState("Supprimer ce document");
}
private org.assertj.core.api.ObjectAssert<ComponentState> assertThatAuthorizationsButtonState() {
return assertThatButtonState("Autorisations");
}
private org.assertj.core.api.ObjectAssert<ComponentState> assertThatShareButtonState() {
return assertThatButtonState("Partager ce document");
}
private org.assertj.core.api.ObjectAssert<ComponentState> assertThatUploadButtonState() {
return assertThatButtonState("Téléverser");
}
private void assertThatOnlyAvailableActionsAre(AddEditDocumentAction... expectedActions) {
List<AddEditDocumentAction> expectedActionsList = asList(expectedActions);
if (expectedActionsList.contains(MODIFY)) {
assertThatModifyButtonState().isEqualTo(ComponentState.ENABLED);
} else {
assertThatModifyButtonState().isEqualTo(ComponentState.INVISIBLE);
}
if (expectedActionsList.contains(DELETE)) {
assertThatDeleteButtonState().isEqualTo(ComponentState.ENABLED);
} else {
assertThatDeleteButtonState().isEqualTo(ComponentState.INVISIBLE);
}
if (expectedActionsList.contains(MANAGE_AUTHORIZATIONS)) {
assertThatAuthorizationsButtonState().isEqualTo(ComponentState.ENABLED);
} else {
assertThatAuthorizationsButtonState().isEqualTo(ComponentState.INVISIBLE);
}
if (expectedActionsList.contains(UPLOAD)) {
assertThatUploadButtonState().isEqualTo(ComponentState.ENABLED);
} else {
assertThatUploadButtonState().isEqualTo(ComponentState.INVISIBLE);
}
if (expectedActionsList.contains(SHARE)) {
assertThatShareButtonState().isEqualTo(ComponentState.ENABLED);
} else {
assertThatShareButtonState().isEqualTo(ComponentState.INVISIBLE);
}
}
private org.assertj.core.api.ObjectAssert<ComponentState> assertThatButtonState(String label) {
return assertThat(getButtonState(label)).describedAs(label);
}
private ComponentState getButtonState(String buttonName) {
List<ConstellioWebElement> listButtonActionMenu = driver.findAdaptElements(By.className("action-menu-button"));
for (ConstellioWebElement buttonElement : listButtonActionMenu) {
if (buttonElement.getText().contains(buttonName)) {
ButtonWebElement currentButton = new ButtonWebElement(buttonElement);
if (currentButton.isEnabled()) {
return ComponentState.ENABLED;
} else {
return ComponentState.DISABLED;
}
}
}
return ComponentState.INVISIBLE;
}
}