package com.constellio.app.services.schemas.bulkImport.authorization; import static com.constellio.app.services.schemas.bulkImport.authorization.AuthorizationImportServices.AUTHORIZATION_PRINCIPALS_MISSING; import static com.constellio.app.services.schemas.bulkImport.authorization.AuthorizationImportServices.AUTHORIZATION_TARGETS_MISSING; import static com.constellio.app.services.schemas.bulkImport.authorization.AuthorizationImportServices.INVALID_ACCESS; import static com.constellio.app.services.schemas.bulkImport.authorization.AuthorizationImportServices.INVALID_PRINCIPAL_TYPE; import static com.constellio.app.services.schemas.bulkImport.authorization.AuthorizationImportServices.INVALID_ROLE; import static com.constellio.app.services.schemas.bulkImport.authorization.AuthorizationImportServices.INVALID_TARGET_TYPE; import static com.constellio.app.services.schemas.bulkImport.authorization.AuthorizationImportServices.USE_ROLE_OR_ACCESS; import static com.constellio.app.ui.i18n.i18n.$; import static com.constellio.model.entities.security.global.AuthorizationAddRequest.authorizationInCollectionWithId; import static org.assertj.core.api.Assertions.assertThat; import java.io.File; import java.util.HashMap; import java.util.List; import java.util.Map; import org.junit.Before; import org.junit.Test; import com.constellio.app.modules.rm.RMTestRecords; import com.constellio.app.modules.rm.wrappers.AdministrativeUnit; import com.constellio.app.modules.rm.wrappers.Document; import com.constellio.app.modules.rm.wrappers.Folder; import com.constellio.app.services.schemas.bulkImport.BulkImportResults; import com.constellio.app.services.schemas.bulkImport.ImportError; import com.constellio.model.entities.records.Transaction; import com.constellio.model.entities.records.wrappers.Group; import com.constellio.model.entities.records.wrappers.User; import com.constellio.model.entities.security.Authorization; import com.constellio.model.services.records.RecordServices; import com.constellio.model.services.records.RecordServicesException; import com.constellio.model.services.search.SearchServices; import com.constellio.model.services.security.AuthorizationsServices; import com.constellio.sdk.tests.ConstellioTest; import com.constellio.sdk.tests.setups.Users; public class AuthorizationImportServicesAcceptanceTest extends ConstellioTest { RMTestRecords records = new RMTestRecords(zeCollection); AuthorizationImportServices importServices; SearchServices searchServices; AuthorizationsServices authorizationsServices; User alice; Group heroes; Folder folderHavingLegacyId; Document documentHavingLegacyId; AdministrativeUnit administrativeUnitHavingLegacyId; String existingAuthorizationToUpdateId = "existingAuthorizationToUpdate"; String existingAuthorizationToDeleteId = "existingAuthorizationToDelete"; Authorization existingAuthorizationToUpdate; Authorization existingAuthorizationToDelete; Users users = new Users(); @Before public void setUp() throws Exception { prepareSystem( withZeCollection().withConstellioRMModule().withRMTest(records) .withFoldersAndContainersOfEveryStatus().withAllTestUsers().withDocumentsHavingContent() ); //rm = new RMSchemasRecordsServices(zeCollection, getModelLayerFactory()); users.setUp(getModelLayerFactory().newUserServices()); searchServices = getModelLayerFactory().newSearchServices(); authorizationsServices = getModelLayerFactory().newAuthorizationsServices(); importServices = new AuthorizationImportServices(); initTestData(); existingAuthorizationToUpdate = grantReadForAliceOnFolderA01(existingAuthorizationToUpdateId); existingAuthorizationToDelete = grantReadForAliceOnFolderA01(existingAuthorizationToDeleteId); } private void initTestData() throws RecordServicesException { alice = users.aliceIn(zeCollection); heroes = users.heroesIn(zeCollection); folderHavingLegacyId = records.getFolder_A01(); documentHavingLegacyId = records.getDocumentWithContent_A19(); administrativeUnitHavingLegacyId = records.getUnit10(); RecordServices recordServices = getModelLayerFactory().newRecordServices(); Transaction transaction = new Transaction(); transaction.add(folderHavingLegacyId.setLegacyId("folderLegacyId")); transaction.add(documentHavingLegacyId.setLegacyId("documentLegacyId")); transaction.add(administrativeUnitHavingLegacyId.setLegacyId("administrativeUnitLegacyId")); recordServices.execute(transaction); } private Authorization grantReadForAliceOnFolderA01(String authorizationId) { authorizationId = authorizationsServices.add(authorizationInCollectionWithId(zeCollection, authorizationId) .forUsers(users.aliceIn(zeCollection)).on(records.getFolder_A01()).givingReadAccess()); return authorizationsServices.getAuthorization(zeCollection, authorizationId); } @Test public void whenImportingAuthorizationsThenImportedCorrectly() throws Exception { File authorizationFile = getTestResourceFile("authorizations.xml"); BulkImportResults results = importServices .bulkImport(authorizationFile, zeCollection, getModelLayerFactory()); System.out.println(results.getCorrectlyImportedCount() + ", " + results.getInvalidIds().size()); Map<String, ImportError> errorsMappedByAuthorizationId = getErrorsMap(results.getImportErrors()); assertThat(errorsMappedByAuthorizationId) .containsKeys("newInvalidAuthorizationWithInvalidRole", "newInvalidAuthorizationWithInvalidRole", "newInvalidAuthorizationWithMissingTargets", "newInvalidAuthorizationWithMissingPrincipals", "newInvalidAuthorizationWithInvalidTargetType", "newInvalidAuthorizationWithInvalidPrincipalType", "newInvalidAuthorizationWithAccessAndRoles"); ImportError newInvalidAuthorizationWithInvalidAccess = errorsMappedByAuthorizationId .get("newInvalidAuthorizationWithInvalidAccess"); assertThat(newInvalidAuthorizationWithInvalidAccess.getErrorMessage()).isEqualTo($(INVALID_ACCESS)); ImportError newInvalidAuthorizationWithMissingTargets = errorsMappedByAuthorizationId .get("newInvalidAuthorizationWithMissingTargets"); assertThat(newInvalidAuthorizationWithMissingTargets.getErrorMessage()).isEqualTo($(AUTHORIZATION_TARGETS_MISSING)); ImportError newInvalidAuthorizationWithMissingPrincipals = errorsMappedByAuthorizationId .get("newInvalidAuthorizationWithMissingPrincipals"); assertThat(newInvalidAuthorizationWithMissingPrincipals.getErrorMessage()) .isEqualTo($(AUTHORIZATION_PRINCIPALS_MISSING)); ImportError newInvalidAuthorizationWithInvalidTargetType = errorsMappedByAuthorizationId .get("newInvalidAuthorizationWithInvalidTargetType"); assertThat(newInvalidAuthorizationWithInvalidTargetType.getErrorMessage()).isEqualTo($(INVALID_TARGET_TYPE)); ImportError newInvalidAuthorizationWithInvalidPrincipalType = errorsMappedByAuthorizationId .get("newInvalidAuthorizationWithInvalidPrincipalType"); assertThat(newInvalidAuthorizationWithInvalidPrincipalType.getErrorMessage()).isEqualTo($(INVALID_PRINCIPAL_TYPE)); ImportError newInvalidAuthorizationWithAccessAndRoles = errorsMappedByAuthorizationId .get("newInvalidAuthorizationWithAccessAndRoles"); assertThat(newInvalidAuthorizationWithAccessAndRoles.getErrorMessage()).isEqualTo($(USE_ROLE_OR_ACCESS)); ImportError newInvalidAuthorizationWithInvalidRole = errorsMappedByAuthorizationId .get("newInvalidAuthorizationWithInvalidRole"); assertThat(newInvalidAuthorizationWithInvalidRole.getErrorMessage()).isEqualTo($(INVALID_ROLE)); } private Map<String, ImportError> getErrorsMap(List<ImportError> importErrors) { Map<String, ImportError> returnMap = new HashMap<>(); for (ImportError importError : importErrors) { returnMap.put(importError.getInvalidElementId(), importError); } return returnMap; } }