package com.constellio.app.ui.acceptation.management.authorizations; import static com.constellio.model.entities.security.global.AuthorizationAddRequest.authorizationInCollection; import static org.assertj.core.api.Assertions.assertThat; import java.util.Arrays; import java.util.List; import org.junit.Before; import org.junit.Test; import com.constellio.app.modules.rm.RMTestRecords; import com.constellio.model.entities.records.wrappers.RecordWrapper; import com.constellio.model.entities.security.Authorization; import com.constellio.model.entities.security.Role; import com.constellio.model.services.security.AuthorizationsServices; import com.constellio.sdk.tests.ConstellioTest; import com.constellio.sdk.tests.annotations.InDevelopmentTest; import com.constellio.sdk.tests.annotations.UiTest; import com.constellio.sdk.tests.selenium.adapters.constellio.ConstellioWebDriver; @UiTest public class ListAuthorizationsViewAcceptTest extends ConstellioTest { AuthorizationsServices authorizationsService; RMTestRecords records = new RMTestRecords(zeCollection); ConstellioWebDriver driver; ListAuthorizationsPage page; RecordWrapper record; @Before public void setUp() throws Exception { prepareSystem( withZeCollection().withConstellioRMModule().withAllTestUsers().withRMTest(records) ); authorizationsService = getModelLayerFactory().newAuthorizationsServices(); driver = newWebDriver(loggedAsUserInCollection(admin, zeCollection)); } @Test @InDevelopmentTest public void openThePrincipalPage() { givenHeroesWithMultiplePermissions(); waitUntilICloseTheBrowsers(); } @Test @InDevelopmentTest public void openTheObjectPage() { givenUnit10WithMultiplePermissions(); waitUntilICloseTheBrowsers(); } @Test public void givenGroupWithTwoAuthorizationsThenDisplayTwoAuthorizations() { givenHeroesWithMultiplePermissions(); assertThat(page.getTitle()).contains(record.getTitle()); assertThat(page.getOwnAuthorizationsTable().countRows()).isEqualTo(2); } @Test public void givenUserWithOwnAndInheritedAuthorizationsThenDisplayAuthorizations() { givenAliceWithMultiplePermissions(); assertThat(page.getTitle()).contains(record.getTitle()); assertThat(page.getOwnAuthorizationsTable().countRows()).isEqualTo(1); assertThat(page.getInheritedAuthorizationsTable().countRows()).isEqualTo(1); } @Test public void givenAdministrativeUnitWithTwoAuthorizationsThenDisplayTwoAuthorizations() { givenUnit10WithMultiplePermissions(); assertThat(page.getTitle()).contains(record.getTitle()); assertThat(page.getOwnAuthorizationsTable().countRows()).isEqualTo(2); } private void givenHeroesWithMultiplePermissions() { record = records.getHeroes(); addAuthorizationWithoutDetaching(readWriteDelete(), Arrays.asList(record.getId()), records.unitId_10); addAuthorizationWithoutDetaching(read(), Arrays.asList(records.getHeroes().getId(), records.getLegends().getId()), records.unitId_30); waitForBatchProcesses(); page = new ListAuthorizationsPage(driver).navigateToPrincipalPage(record); } private void givenAliceWithMultiplePermissions() { record = records.getAlice(); addAuthorizationWithoutDetaching(readWriteDelete(), Arrays.asList(record.getId()), records.unitId_10); addAuthorizationWithoutDetaching(read(), Arrays.asList(records.getHeroes().getId(), records.getLegends().getId()), records.unitId_30); waitForBatchProcesses(); page = new ListAuthorizationsPage(driver).navigateToPrincipalPage(record); } private void givenUnit10WithMultiplePermissions() { record = records.getUnit10(); page = new ListAuthorizationsPage(driver).navigateToObjectPage(record); } private Authorization addAuthorizationWithoutDetaching(List<String> roles, List<String> principals, String record) { String id = authorizationsService.add( authorizationInCollection(zeCollection).forPrincipalsIds(principals).on(record).giving(roles)); return authorizationsService.getAuthorization(zeCollection, id); } private List<String> read() { return Arrays.asList(Role.READ); } private List<String> readWriteDelete() { return Arrays.asList(Role.READ, Role.WRITE, Role.DELETE); } private void waitForBatchProcesses() { getModelLayerFactory().getBatchProcessesManager().waitUntilAllFinished(); } }