package com.constellio.app.modules.rm.migrations; import static com.constellio.model.services.records.reindexing.ReindexationMode.RECALCULATE_AND_REWRITE; import static junit.framework.TestCase.fail; import static org.assertj.core.api.Assertions.assertThat; import java.io.File; import org.apache.solr.common.params.ModifiableSolrParams; import org.junit.Test; import com.constellio.app.modules.rm.wrappers.Document; import com.constellio.app.modules.rm.wrappers.Folder; import com.constellio.model.entities.schemas.MetadataSchema; import com.constellio.model.entities.schemas.MetadataSchemaTypes; import com.constellio.model.entities.schemas.MetadataSchemasRuntimeException; import com.constellio.sdk.tests.ConstellioTest; import com.constellio.sdk.tests.SDKFoldersLocator; public class RMMigrationTo6_5_1AcceptanceTest extends ConstellioTest { @Test public void givenPreviousSystemWithEmptyMetadataToDeleteWhenMigratingThenAllMetadataToDeleteAreDeleted() throws Exception { givenPreviousSystemWithEmptyMetadtaToDelete(); MetadataSchemaTypes types = getModelLayerFactory() .getMetadataSchemasManager().getSchemaTypes(zeCollection); MetadataSchema folderSchema = types.getDefaultSchema(Folder.SCHEMA_TYPE); assertMetadataDeleted("calendarYearEntered", folderSchema); assertMetadataDeleted("calendarYear", folderSchema); MetadataSchema documentSchema = types.getDefaultSchema(Document.SCHEMA_TYPE); assertMetadataDeleted("calendarYearEntered", documentSchema); assertMetadataDeleted("calendarYear", documentSchema); assertFolderRangeDatesCreatedCorrectly(); getModelLayerFactory().newReindexingServices().reindexCollections(RECALCULATE_AND_REWRITE); types = getModelLayerFactory().getMetadataSchemasManager().getSchemaTypes(zeCollection); folderSchema = types.getDefaultSchema(Folder.SCHEMA_TYPE); assertMetadataDeleted("ruleAdminUnit", folderSchema); } @Test public void givenPreviousSystemWithMetadataToDeleteHavingValuesWhenMigratingThenAllMetadataToDeleteAreDisabled() throws Exception { givenPreviousSystemWithMetadtaToDeleteHavingValues(); ModifiableSolrParams params = new ModifiableSolrParams(); params.add("q", "ruleAdminUnitId_ss:*"); params.add("rows", "1"); assertThat(getDataLayerFactory().newRecordDao().query(params).getNumFound()).isNotEqualTo(0); MetadataSchemaTypes types = getModelLayerFactory().getMetadataSchemasManager().getSchemaTypes(zeCollection); MetadataSchema folderSchema = types.getDefaultSchema(Folder.SCHEMA_TYPE); MetadataSchema documentSchema = types.getDefaultSchema(Document.SCHEMA_TYPE); assertMetadataDisabledAndMarkForDeletion("calendarYearEntered", folderSchema); assertMetadataDisabledAndMarkForDeletion("calendarYear", folderSchema); // assertMetadataDisabledAndMarkForDeletion("calendarYearEntered", documentSchema); // assertMetadataDisabledAndMarkForDeletion("calendarYear", documentSchema); assertMetadataDisabledAndMarkForDeletion("ruleAdminUnit", folderSchema); assertFolderRangeDatesCreatedCorrectly(); assertThat(getDataLayerFactory().newRecordDao().query(params).getNumFound()).isNotEqualTo(0); getModelLayerFactory().newReindexingServices().reindexCollections(RECALCULATE_AND_REWRITE); types = getModelLayerFactory().getMetadataSchemasManager().getSchemaTypes(zeCollection); folderSchema = types.getDefaultSchema(Folder.SCHEMA_TYPE); documentSchema = types.getDefaultSchema(Document.SCHEMA_TYPE); assertMetadataDeleted("ruleAdminUnit", folderSchema); assertThat(getDataLayerFactory().newRecordDao().query(params).getNumFound()).isEqualTo(0); } private void assertMetadataDisabledAndMarkForDeletion(String metadataLocalCode, MetadataSchema schema) { assertThat(schema.getMetadata(metadataLocalCode).isEnabled()).isFalse(); //assertThat(schema.getMetadata(metadataLocalCode).is()).isFalse(); } private void assertMetadataDeleted(String metadataLocalCode, MetadataSchema schema) { try { schema.getMetadata(metadataLocalCode); fail("should be deleted"); } catch (MetadataSchemasRuntimeException.NoSuchMetadata e) { //OK } } private void assertFolderRangeDatesCreatedCorrectly() { MetadataSchema folderSchemaBuilder = getModelLayerFactory() .getMetadataSchemasManager().getSchemaTypes(zeCollection).getDefaultSchema(Folder.SCHEMA_TYPE); assertThat(folderSchemaBuilder.getMetadata(Folder.TIME_RANGE).isEnabled()).isFalse(); } private void givenPreviousSystemWithMetadtaToDeleteHavingValues() { givenTransactionLogIsEnabled(); File statesFolder = new SDKFoldersLocator().getInitialStatesFolder(); File state = new File(statesFolder, "6.4MetadataToDeleteWithValues.zip"); getCurrentTestSession().getFactoriesTestFeatures().givenSystemInState(state); } private void givenPreviousSystemWithEmptyMetadtaToDelete() { givenTransactionLogIsEnabled(); File statesFolder = new SDKFoldersLocator().getInitialStatesFolder(); File state = new File(statesFolder, "6.4MetadataToDeleteWithoutValues.zip"); getCurrentTestSession().getFactoriesTestFeatures().givenSystemInState(state); } }