package com.constellio.model.services.schemas; import static com.constellio.model.entities.schemas.MetadataTransiency.TRANSIENT_EAGER; import static com.constellio.model.entities.schemas.MetadataTransiency.TRANSIENT_LAZY; import static com.constellio.sdk.tests.schemas.TestsSchemasSetup.whichHasCustomAttributes; import static com.constellio.sdk.tests.schemas.TestsSchemasSetup.whichHasTransiency; import static com.constellio.sdk.tests.schemas.TestsSchemasSetup.whichIsEncrypted; import static com.constellio.sdk.tests.schemas.TestsSchemasSetup.whichIsEssential; import static com.constellio.sdk.tests.schemas.TestsSchemasSetup.whichIsEssentialInSummary; import static com.constellio.sdk.tests.schemas.TestsSchemasSetup.whichIsDuplicable; import static com.constellio.sdk.tests.schemas.TestsSchemasSetup.whichIsMarkedForDeletion; import static com.constellio.sdk.tests.schemas.TestsSchemasSetup.whichIncreaseDependencyLevel; import static com.constellio.sdk.tests.schemas.TestsSchemasSetup.whichIsScripted; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.fail; import org.junit.Before; import org.junit.Test; import com.constellio.data.dao.managers.config.ConfigManager; import com.constellio.data.dao.services.DataStoreTypesFactory; import com.constellio.data.dao.services.solr.SolrDataStoreTypesFactory; import com.constellio.data.utils.Delayed; import com.constellio.model.entities.schemas.MetadataTransiency; import com.constellio.model.services.batch.manager.BatchProcessesManager; import com.constellio.model.services.collections.CollectionsListManager; import com.constellio.model.services.schemas.builders.MetadataBuilderRuntimeException; import com.constellio.model.services.schemas.builders.MetadataSchemaBuilder; import com.constellio.model.services.schemas.builders.MetadataSchemaTypesBuilder; import com.constellio.model.services.search.SearchServices; import com.constellio.model.services.taxonomies.TaxonomiesManager; import com.constellio.sdk.tests.ConstellioTest; import com.constellio.sdk.tests.schemas.TestsSchemasSetup; import com.constellio.sdk.tests.schemas.TestsSchemasSetup.ZeSchemaMetadatas; public class MetadataSchemasManagerMetadataFlagsAcceptanceTest extends ConstellioTest { MetadataSchemasManager otherMetadataSchemasManager; TestsSchemasSetup schemas = new TestsSchemasSetup(); ZeSchemaMetadatas zeSchema = schemas.new ZeSchemaMetadatas(); @Test public void whenAddUpdateSchemasThenSaveEssentialFlag() throws Exception { defineSchemasManager().using(schemas.withAStringMetadata(whichIsEssential).withABooleanMetadata()); assertThat(zeSchema.stringMetadata().isEssential()).isTrue(); assertThat(zeSchema.booleanMetadata().isEssential()).isFalse(); schemas.modify(new MetadataSchemaTypesAlteration() { @Override public void alter(MetadataSchemaTypesBuilder types) { types.getSchema(zeSchema.code()).get(zeSchema.stringMetadata().getLocalCode()).setEssential(false); types.getSchema(zeSchema.code()).get(zeSchema.booleanMetadata().getLocalCode()).setEssential(true); } }); assertThat(zeSchema.stringMetadata().isEssential()).isFalse(); assertThat(zeSchema.booleanMetadata().isEssential()).isTrue(); } @Test public void whenAddUpdateSchemasThenSaveMarkedForDeletionFlag() throws Exception { defineSchemasManager().using(schemas.withAStringMetadata(whichIsMarkedForDeletion).withABooleanMetadata()); assertThat(zeSchema.stringMetadata().isMarkedForDeletion()).isTrue(); assertThat(zeSchema.booleanMetadata().isMarkedForDeletion()).isFalse(); schemas.modify(new MetadataSchemaTypesAlteration() { @Override public void alter(MetadataSchemaTypesBuilder types) { types.getSchema(zeSchema.code()).get(zeSchema.stringMetadata().getLocalCode()).setMarkedForDeletion(false); types.getSchema(zeSchema.code()).get(zeSchema.booleanMetadata().getLocalCode()).setMarkedForDeletion(true); } }); assertThat(zeSchema.stringMetadata().isMarkedForDeletion()).isFalse(); assertThat(zeSchema.booleanMetadata().isMarkedForDeletion()).isTrue(); } @Test public void whenAddUpdateSchemasThenSaveEncryptedFlag() throws Exception { defineSchemasManager().using(schemas.withAStringMetadata().withAnotherStringMetadata(whichIsEncrypted)); assertThat(zeSchema.stringMetadata().isEncrypted()).isFalse(); assertThat(zeSchema.anotherStringMetadata().isEncrypted()).isTrue(); schemas.modify(new MetadataSchemaTypesAlteration() { @Override public void alter(MetadataSchemaTypesBuilder types) { types.getSchema(zeSchema.code()).get(zeSchema.stringMetadata().getLocalCode()).setEncrypted(true); types.getSchema(zeSchema.code()).get(zeSchema.anotherStringMetadata().getLocalCode()).setEncrypted(false); } }); assertThat(zeSchema.stringMetadata().isEncrypted()).isTrue(); assertThat(zeSchema.anotherStringMetadata().isEncrypted()).isFalse(); } @Test public void whenAddUpdateSchemasThenSaveTransientFlag() throws Exception { defineSchemasManager().using(schemas .withAStringMetadata(whichIsScripted("title")) .withAnotherStringMetadata(whichIsScripted("title"), whichHasTransiency(TRANSIENT_EAGER)) .withANumberMetadata(whichIsScripted("title.length"), whichHasTransiency(MetadataTransiency.TRANSIENT_LAZY))); assertThat(zeSchema.stringMetadata().getTransiency()).isEqualTo(MetadataTransiency.PERSISTED); assertThat(zeSchema.anotherStringMetadata().getTransiency()).isEqualTo(TRANSIENT_EAGER); assertThat(zeSchema.numberMetadata().getTransiency()).isEqualTo(MetadataTransiency.TRANSIENT_LAZY); schemas.modify(new MetadataSchemaTypesAlteration() { @Override public void alter(MetadataSchemaTypesBuilder types) { types.getSchema(zeSchema.code()).get(zeSchema.stringMetadata().getLocalCode()) .setTransiency(TRANSIENT_EAGER); types.getSchema(zeSchema.code()).get(zeSchema.anotherStringMetadata().getLocalCode()).setTransiency(null); types.getSchema(zeSchema.code()).get(zeSchema.numberMetadata().getLocalCode()) .setTransiency(MetadataTransiency.PERSISTED); } }); assertThat(zeSchema.stringMetadata().getTransiency()).isEqualTo(TRANSIENT_EAGER); assertThat(zeSchema.anotherStringMetadata().getTransiency()).isEqualTo(MetadataTransiency.PERSISTED); assertThat(zeSchema.numberMetadata().getTransiency()).isEqualTo(MetadataTransiency.PERSISTED); } @Test(expected = MetadataBuilderRuntimeException.ReferenceCannotBeTransient.class) public void whenAddTransientLazyAutomaticReferenceMetadataThenException() throws Exception { defineSchemasManager().using(schemas .withAReferenceFromAnotherSchemaToZeSchema(whichIsScripted("title"), whichHasTransiency(TRANSIENT_LAZY))); } @Test(expected = MetadataBuilderRuntimeException.MetadataEnteredManuallyCannotBeTransient.class) public void whenAddManualMetadataWithTransientEagerThenException() throws Exception { defineSchemasManager().using(schemas.withAStringMetadata(whichHasTransiency(TRANSIENT_EAGER))); } @Test(expected = MetadataBuilderRuntimeException.MetadataEnteredManuallyCannotBeTransient.class) public void whenAddManualMetadataWithTransientLazyThenException() throws Exception { defineSchemasManager().using(schemas.withAStringMetadata(whichHasTransiency(MetadataTransiency.TRANSIENT_LAZY))); } @Test public void whenUpdateManualMetadataWithTransientLazyThenException() throws Exception { defineSchemasManager().using(schemas.withAStringMetadata(whichHasTransiency(MetadataTransiency.PERSISTED))); try { getModelLayerFactory().getMetadataSchemasManager().modify(zeCollection, new MetadataSchemaTypesAlteration() { @Override public void alter(MetadataSchemaTypesBuilder types) { types.getSchemaType(zeSchema.typeCode()).getDefaultSchema().get("stringMetadata") .setTransiency(TRANSIENT_EAGER); } }); fail("Exception expected"); } catch (MetadataBuilderRuntimeException.MetadataEnteredManuallyCannotBeTransient e) { //OK } try { getModelLayerFactory().getMetadataSchemasManager().modify(zeCollection, new MetadataSchemaTypesAlteration() { @Override public void alter(MetadataSchemaTypesBuilder types) { types.getSchemaType(zeSchema.typeCode()).getDefaultSchema().get("stringMetadata") .setTransiency(TRANSIENT_LAZY); } }); fail("Exception expected"); } catch (MetadataBuilderRuntimeException.MetadataEnteredManuallyCannotBeTransient e) { //OK } } @Test public void whenAddUpdateSchemasThenSaveEssentialInSummaryFlag() throws Exception { defineSchemasManager().using(schemas.withAStringMetadata().withAnotherStringMetadata(whichIsEssentialInSummary)); assertThat(zeSchema.stringMetadata().isEssentialInSummary()).isFalse(); assertThat(zeSchema.anotherStringMetadata().isEssentialInSummary()).isTrue(); schemas.modify(new MetadataSchemaTypesAlteration() { @Override public void alter(MetadataSchemaTypesBuilder types) { types.getSchema(zeSchema.code()).get(zeSchema.stringMetadata().getLocalCode()).setEssentialInSummary(true); types.getSchema(zeSchema.code()).get(zeSchema.anotherStringMetadata().getLocalCode()) .setEssentialInSummary(false); } }); assertThat(zeSchema.stringMetadata().isEssentialInSummary()).isTrue(); assertThat(zeSchema.anotherStringMetadata().isEssentialInSummary()).isFalse(); } @Test public void whenAddUpdateSchemasThenSaveReversedDependencyInSummaryFlag() throws Exception { defineSchemasManager().using(schemas.withAStringMetadata().withAnotherStringMetadata(whichIncreaseDependencyLevel)); assertThat(zeSchema.stringMetadata().isIncreasedDependencyLevel()).isFalse(); assertThat(zeSchema.anotherStringMetadata().isIncreasedDependencyLevel()).isTrue(); schemas.modify(new MetadataSchemaTypesAlteration() { @Override public void alter(MetadataSchemaTypesBuilder types) { types.getSchema(zeSchema.code()).get(zeSchema.stringMetadata().getLocalCode()).setIncreasedDependencyLevel(true); types.getSchema(zeSchema.code()).get(zeSchema.anotherStringMetadata().getLocalCode()) .setIncreasedDependencyLevel(false); } }); assertThat(zeSchema.stringMetadata().isIncreasedDependencyLevel()).isTrue(); assertThat(zeSchema.anotherStringMetadata().isIncreasedDependencyLevel()).isFalse(); } @Test public void whenAddUpdateSchemasThenSaveCustomAttributes() throws Exception { defineSchemasManager().using(schemas .withAStringMetadata(whichHasCustomAttributes("flag1", "flag2")) .withANumberMetadata(whichHasCustomAttributes("flag3", "flag4")) .withABooleanMetadata()); assertThat(zeSchema.stringMetadata().getCustomAttributes()).containsOnly("flag1", "flag2"); assertThat(zeSchema.numberMetadata().getCustomAttributes()).containsOnly("flag3", "flag4"); assertThat(zeSchema.booleanMetadata().getCustomAttributes()).isEmpty(); schemas.modify(new MetadataSchemaTypesAlteration() { @Override public void alter(MetadataSchemaTypesBuilder types) { MetadataSchemaBuilder schema = types.getSchema(zeSchema.code()); schema.get(zeSchema.stringMetadata()).removeCustomAttribute("flag1").addCustomAttribute("flag5"); schema.get(zeSchema.numberMetadata()).removeCustomAttribute("flag3").removeCustomAttribute("flag4"); schema.get(zeSchema.booleanMetadata()).addCustomAttribute("flag6"); } }); assertThat(zeSchema.stringMetadata().getCustomAttributes()).containsOnly("flag5", "flag2"); assertThat(zeSchema.numberMetadata().getCustomAttributes()).isEmpty(); assertThat(zeSchema.booleanMetadata().getCustomAttributes()).containsOnly("flag6"); } @Test public void whenAddUpdateSchemasThenSaveDuplicableFlag() throws Exception { defineSchemasManager().using(schemas.withAStringMetadata(whichIsDuplicable).withABooleanMetadata()); assertThat(zeSchema.stringMetadata().isDuplicable()).isTrue(); assertThat(zeSchema.booleanMetadata().isDuplicable()).isFalse(); schemas.modify(new MetadataSchemaTypesAlteration() { @Override public void alter(MetadataSchemaTypesBuilder types) { types.getSchema(zeSchema.code()).get(zeSchema.stringMetadata().getLocalCode()).setDuplicable(false); types.getSchema(zeSchema.code()).get(zeSchema.booleanMetadata().getLocalCode()).setDuplicable(true); } }); assertThat(zeSchema.stringMetadata().isDuplicable()).isFalse(); assertThat(zeSchema.booleanMetadata().isDuplicable()).isTrue(); } @Before public void setUp() throws Exception { ConfigManager configManager = getDataLayerFactory().getConfigManager(); DataStoreTypesFactory typesFactory = new SolrDataStoreTypesFactory(); TaxonomiesManager taxonomiesManager = getModelLayerFactory().getTaxonomiesManager(); CollectionsListManager collectionsListManager = getModelLayerFactory().getCollectionsListManager(); BatchProcessesManager batchProcessesManager = getModelLayerFactory().getBatchProcessesManager(); SearchServices searchServices = getModelLayerFactory().newSearchServices(); otherMetadataSchemasManager = new MetadataSchemasManager(getModelLayerFactory(), new Delayed<>(getAppLayerFactory().getModulesManager())); } }