package com.constellio.app.modules.rm.migrations; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Fail.fail; import org.junit.Before; import org.junit.Test; import com.constellio.app.modules.rm.RMTestRecords; import com.constellio.app.modules.rm.constants.RMTaxonomies; import com.constellio.app.modules.rm.migrations.RMMigrationTo6_5_1.Migration6_5_1_Helper; import com.constellio.app.modules.rm.services.RMSchemasRecordsServices; import com.constellio.app.modules.rm.wrappers.Folder; import com.constellio.model.entities.schemas.Metadata; import com.constellio.model.entities.schemas.MetadataSchemasRuntimeException; import com.constellio.model.entities.schemas.MetadataValueType; import com.constellio.model.services.records.RecordServices; import com.constellio.model.services.records.RecordServicesException; import com.constellio.model.services.schemas.MetadataSchemaTypesAlteration; import com.constellio.model.services.schemas.builders.MetadataSchemaTypesBuilder; import com.constellio.sdk.tests.ConstellioTest; public class Migration6_5_1_HelperAcceptanceTest extends ConstellioTest { RMSchemasRecordsServices rm; RMTestRecords records = new RMTestRecords(zeCollection); RecordServices recordServices; @Before public void setUp() throws Exception { prepareSystem( withZeCollection().withConstellioRMModule().withAllTestUsers().withRMTest(records) .withFoldersAndContainersOfEveryStatus() ); assertThat(getModelLayerFactory().getTaxonomiesManager().getPrincipalTaxonomy(zeCollection).getCode()) .isEqualTo(RMTaxonomies.ADMINISTRATIVE_UNITS); rm = new RMSchemasRecordsServices(zeCollection, getAppLayerFactory()); recordServices = getModelLayerFactory().newRecordServices(); } @Test public void givenInexistingMetadataWhenIsUsedThenReturnFalse() throws Exception { assertThat(Migration6_5_1_Helper.isUsed("inexistingMetadata", Folder.SCHEMA_TYPE, zeCollection, getAppLayerFactory())) .isFalse(); } @Test public void givenInexistingSchemaWhenIsUsedThenReturnFalse() throws Exception { assertThat(Migration6_5_1_Helper.isUsed(Folder.CATEGORY, "inexistingSchemaType", zeCollection, getAppLayerFactory())) .isFalse(); } @Test public void givenUnusedMetadataWhenIsUsedThenReturnFalse() throws Exception { String metadtaLocalCode = givenUnusedMetadata(); assertThat(Migration6_5_1_Helper.isUsed(metadtaLocalCode, Folder.SCHEMA_TYPE, zeCollection, getAppLayerFactory())) .isFalse(); } @Test public void givenUsedMetadataWhenIsUsedThenReturnTrue() throws Exception { String metadtaLocalCode = givenUsedMetadataInFolder(); assertThat(Migration6_5_1_Helper.isUsed(metadtaLocalCode, Folder.SCHEMA_TYPE, zeCollection, getAppLayerFactory())) .isTrue(); } @Test public void givenInexistingMetadataWhenDeleteIfPossibleOrDisableMetadataThenOk() throws Exception { Migration6_5_1_Helper .deleteIfPossibleOrDisableMetadata("inexistingMetadata", Folder.SCHEMA_TYPE, zeCollection, getAppLayerFactory()); } @Test public void givenInexistingSchemaWhenDeleteIfPossibleOrDisableMetadataThenOK() throws Exception { Migration6_5_1_Helper .deleteIfPossibleOrDisableMetadata(Folder.CATEGORY, "inexistingSchemaType", zeCollection, getAppLayerFactory()); } @Test public void givenUnusedMetadataWhenDeleteIfPossibleOrDisableMetadataThenDeleted() throws Exception { String metadtaLocalCode = givenUnusedMetadata(); Migration6_5_1_Helper .deleteIfPossibleOrDisableMetadata(metadtaLocalCode, Folder.SCHEMA_TYPE, zeCollection, getAppLayerFactory()); try { getModelLayerFactory().getMetadataSchemasManager().getSchemaTypes(zeCollection).getDefaultSchema(Folder.SCHEMA_TYPE) .getMetadata(metadtaLocalCode); fail("Metadata should be deleted!"); } catch (MetadataSchemasRuntimeException.NoSuchMetadata e) { //OK } } @Test public void givenUsedMetadataWhenDeleteIfPossibleOrDisableMetadataThenDisabled() throws Exception { String metadtaLocalCode = givenUsedMetadataInFolder(); Migration6_5_1_Helper .deleteIfPossibleOrDisableMetadata(metadtaLocalCode, Folder.SCHEMA_TYPE, zeCollection, getAppLayerFactory()); Metadata metadata = getModelLayerFactory().getMetadataSchemasManager() .getSchemaTypes(zeCollection).getDefaultSchema(Folder.SCHEMA_TYPE) .getMetadata(metadtaLocalCode); assertThat(metadata.isEnabled()).isFalse(); } private String givenUsedMetadataInFolder() throws RecordServicesException { String metadataLocalCode = createNewStringMetadataInFolder(); Folder folderA01 = records.getFolder_A01(); recordServices.add(folderA01.set(metadataLocalCode, "nonNullValue")); return metadataLocalCode; } private String givenUnusedMetadata() throws RecordServicesException { String metadataLocalCode = createNewStringMetadataInFolder(); Folder folderA01 = records.getFolder_A01(); recordServices.add(folderA01.set(metadataLocalCode, null)); return metadataLocalCode; } private String createNewStringMetadataInFolder() { final String newMetadataLocalCode = "zeMetaInFolder"; getModelLayerFactory() .getMetadataSchemasManager().modify(zeCollection, new MetadataSchemaTypesAlteration() { @Override public void alter(MetadataSchemaTypesBuilder types) { types.getDefaultSchema(Folder.SCHEMA_TYPE).createUndeletable(newMetadataLocalCode) .setType(MetadataValueType.STRING); } }); return newMetadataLocalCode; } }