package com.constellio.model.services.schemas;
import static com.constellio.model.entities.schemas.MetadataValueType.CONTENT;
import static com.constellio.model.entities.schemas.MetadataValueType.NUMBER;
import static com.constellio.model.entities.schemas.MetadataValueType.REFERENCE;
import static com.constellio.model.entities.schemas.MetadataValueType.STRING;
import static com.constellio.model.entities.schemas.MetadataValueType.TEXT;
import static com.constellio.model.entities.schemas.Schemas.TITLE;
import static com.constellio.model.entities.schemas.entries.DataEntryType.AGGREGATED;
import static com.constellio.model.entities.schemas.entries.DataEntryType.CALCULATED;
import static com.constellio.model.entities.schemas.entries.DataEntryType.COPIED;
import static com.constellio.model.entities.schemas.entries.DataEntryType.MANUAL;
import static com.constellio.model.entities.schemas.entries.DataEntryType.SEQUENCE;
import static com.constellio.model.services.schemas.builders.MetadataPopulateConfigsBuilder.create;
import static com.constellio.sdk.tests.TestUtils.asList;
import static com.constellio.sdk.tests.TestUtils.getElementsClasses;
import static com.constellio.sdk.tests.TestUtils.onlyElementsOfClass;
import static com.constellio.sdk.tests.schemas.TestsSchemasSetup.ANOTHER_SCHEMA_TYPE_CODE;
import static com.constellio.sdk.tests.schemas.TestsSchemasSetup.ZE_SCHEMA_TYPE_CODE;
import static com.constellio.sdk.tests.schemas.TestsSchemasSetup.limitedTo50Characters;
import static com.constellio.sdk.tests.schemas.TestsSchemasSetup.limitedTo50CharactersInCustomSchema;
import static com.constellio.sdk.tests.schemas.TestsSchemasSetup.whichAllowsAnotherDefaultSchema;
import static com.constellio.sdk.tests.schemas.TestsSchemasSetup.whichAllowsThirdSchemaType;
import static com.constellio.sdk.tests.schemas.TestsSchemasSetup.whichHasDefaultRequirement;
import static com.constellio.sdk.tests.schemas.TestsSchemasSetup.whichHasDefaultRequirementInCustomSchema;
import static com.constellio.sdk.tests.schemas.TestsSchemasSetup.whichHasDefaultValue;
import static com.constellio.sdk.tests.schemas.TestsSchemasSetup.whichHasInputMask;
import static com.constellio.sdk.tests.schemas.TestsSchemasSetup.whichHasLabel;
import static com.constellio.sdk.tests.schemas.TestsSchemasSetup.whichHasLabelInCustomSchema;
import static com.constellio.sdk.tests.schemas.TestsSchemasSetup.whichHasNoDefaultRequirement;
import static com.constellio.sdk.tests.schemas.TestsSchemasSetup.whichHasNoDefaultRequirementInCustomSchema;
import static com.constellio.sdk.tests.schemas.TestsSchemasSetup.whichHasStructureFactory;
import static com.constellio.sdk.tests.schemas.TestsSchemasSetup.whichIsChildOfRelationship;
import static com.constellio.sdk.tests.schemas.TestsSchemasSetup.whichIsDisabled;
import static com.constellio.sdk.tests.schemas.TestsSchemasSetup.whichIsDisabledInCustomSchema;
import static com.constellio.sdk.tests.schemas.TestsSchemasSetup.whichIsEnabled;
import static com.constellio.sdk.tests.schemas.TestsSchemasSetup.whichIsEnabledInCustomSchema;
import static com.constellio.sdk.tests.schemas.TestsSchemasSetup.whichIsMultivalue;
import static com.constellio.sdk.tests.schemas.TestsSchemasSetup.whichIsSchemaAutocomplete;
import static com.constellio.sdk.tests.schemas.TestsSchemasSetup.whichIsTaxonomyRelationship;
import static com.constellio.sdk.tests.schemas.TestsSchemasSetup.whichIsUndeletable;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.groups.Tuple.tuple;
import static org.junit.Assert.fail;
import static org.mockito.Mockito.verify;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Pattern;
import org.junit.Before;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runners.MethodSorters;
import org.mockito.Mock;
import com.constellio.app.modules.rm.wrappers.Folder;
import com.constellio.data.dao.managers.config.ConfigManager;
import com.constellio.data.dao.services.DataStoreTypesFactory;
import com.constellio.data.utils.Delayed;
import com.constellio.model.api.impl.schemas.validation.impl.CreationDateIsBeforeOrEqualToLastModificationDateValidator;
import com.constellio.model.api.impl.schemas.validation.impl.Maximum50CharsRecordMetadataValidator;
import com.constellio.model.entities.Language;
import com.constellio.model.entities.calculators.CalculatorParameters;
import com.constellio.model.entities.calculators.InitializedMetadataValueCalculator;
import com.constellio.model.entities.calculators.MetadataValueCalculator;
import com.constellio.model.entities.calculators.dependencies.Dependency;
import com.constellio.model.entities.calculators.dependencies.LocalDependency;
import com.constellio.model.entities.records.wrappers.UserDocument;
import com.constellio.model.entities.schemas.Metadata;
import com.constellio.model.entities.schemas.MetadataSchema;
import com.constellio.model.entities.schemas.MetadataSchemaType;
import com.constellio.model.entities.schemas.MetadataSchemaTypes;
import com.constellio.model.entities.schemas.MetadataSchemasRuntimeException;
import com.constellio.model.entities.schemas.MetadataValueType;
import com.constellio.model.entities.schemas.RegexConfig;
import com.constellio.model.entities.schemas.RegexConfig.RegexConfigType;
import com.constellio.model.entities.schemas.entries.AggregatedDataEntry;
import com.constellio.model.entities.schemas.entries.AggregationType;
import com.constellio.model.entities.schemas.entries.CalculatedDataEntry;
import com.constellio.model.entities.schemas.entries.CopiedDataEntry;
import com.constellio.model.entities.schemas.entries.DataEntry;
import com.constellio.model.entities.schemas.entries.DataEntryType;
import com.constellio.model.entities.schemas.entries.SequenceDataEntry;
import com.constellio.model.services.batch.manager.BatchProcessesManager;
import com.constellio.model.services.collections.CollectionsListManager;
import com.constellio.model.services.contents.ContentFactory;
import com.constellio.model.services.schemas.MetadataSchemasManagerRuntimeException.MetadataSchemasManagerRuntimeException_NoSuchCollection;
import com.constellio.model.services.schemas.builders.DataEntryBuilderRuntimeException.DataEntryBuilderRuntimeException_InvalidMetadataCode;
import com.constellio.model.services.schemas.builders.MetadataBuilder;
import com.constellio.model.services.schemas.builders.MetadataBuilder_EnumClassTest;
import com.constellio.model.services.schemas.builders.MetadataPopulateConfigsBuilder;
import com.constellio.model.services.schemas.builders.MetadataSchemaBuilder;
import com.constellio.model.services.schemas.builders.MetadataSchemaBuilderRuntimeException;
import com.constellio.model.services.schemas.builders.MetadataSchemaTypeBuilder;
import com.constellio.model.services.schemas.builders.MetadataSchemaTypesBuilder;
import com.constellio.model.services.schemas.builders.MetadataSchemaTypesBuilderRuntimeException.CannotDeleteSchemaTypeSinceItHasRecords;
import com.constellio.model.services.schemas.testimpl.TestMetadataValidator3;
import com.constellio.model.services.schemas.testimpl.TestRecordMetadataValidator1;
import com.constellio.model.services.schemas.testimpl.TestRecordMetadataValidator2;
import com.constellio.model.services.schemas.testimpl.TestRecordValidator1;
import com.constellio.model.services.schemas.testimpl.TestRecordValidator2;
import com.constellio.model.services.schemas.testimpl.TestRecordValidator3;
import com.constellio.model.services.schemas.testimpl.TestStructureFactory1;
import com.constellio.model.services.search.SearchServices;
import com.constellio.model.services.taxonomies.TaxonomiesManager;
import com.constellio.model.utils.ClassProvider;
import com.constellio.model.utils.DefaultClassProvider;
import com.constellio.model.utils.Parametrized;
import com.constellio.sdk.tests.ConstellioTest;
import com.constellio.sdk.tests.TestRecord;
import com.constellio.sdk.tests.annotations.SlowTest;
import com.constellio.sdk.tests.schemas.DaysBetweenSingleLocalDateAndAnotherSchemaRequiredDateCalculator;
import com.constellio.sdk.tests.schemas.MetadataBuilderConfigurator;
import com.constellio.sdk.tests.schemas.MetadataSchemaTypesConfigurator;
import com.constellio.sdk.tests.schemas.TestsSchemasSetup;
import com.constellio.sdk.tests.schemas.TestsSchemasSetup.AnotherSchemaMetadatas;
import com.constellio.sdk.tests.schemas.TestsSchemasSetup.ThirdSchemaMetadatas;
import com.constellio.sdk.tests.schemas.TestsSchemasSetup.ZeCustomSchemaMetadatas;
import com.constellio.sdk.tests.schemas.TestsSchemasSetup.ZeSchemaMetadatas;
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
@SlowTest
public class MetadataSchemasManagerAcceptanceTest extends ConstellioTest {
TaxonomiesManager taxonomiesManager;
MetadataSchemasManager schemasManager;
ConfigManager configManager;
TestsSchemasSetup defaultSchema, schemas;
ZeSchemaMetadatas zeSchema;
ZeCustomSchemaMetadatas zeCustomSchema;
AnotherSchemaMetadatas anotherSchema;
ThirdSchemaMetadatas thirdSchema;
DataStoreTypesFactory typesFactory;
CollectionsListManager collectionsListManager;
BatchProcessesManager batchProcessesManager;
SearchServices searchServices;
ClassProvider classProvider;
@Mock MetadataSchemasManagerListener schemasManagerFirstCollection1Listener, schemasManagerSecondCollection1Listener, otherSchemasManagerFirstCollection1Listener, otherSchemasManagerSecondCollection1Listener, schemasManagerCollection2Listener, otherSchemasManagerCollection2Listener;
@Before
public void setUp()
throws Exception {
classProvider = new DefaultClassProvider();
prepareSystem(withZeCollection());
configManager = getDataLayerFactory().getConfigManager();
schemasManager = getModelLayerFactory().getMetadataSchemasManager();
schemas = defaultSchema = new TestsSchemasSetup();
zeSchema = defaultSchema.new ZeSchemaMetadatas();
zeCustomSchema = defaultSchema.new ZeCustomSchemaMetadatas();
anotherSchema = defaultSchema.new AnotherSchemaMetadatas();
thirdSchema = defaultSchema.new ThirdSchemaMetadatas();
taxonomiesManager = getModelLayerFactory().getTaxonomiesManager();
searchServices = getModelLayerFactory().newSearchServices();
typesFactory = getDataLayerFactory().newTypesFactory();
collectionsListManager = getModelLayerFactory().getCollectionsListManager();
batchProcessesManager = getModelLayerFactory().getBatchProcessesManager();
}
@Test
public void givenSchemasInMultipleCollectionsThenAllIndependent()
throws Exception {
givenCollection("collection1");
givenCollection("collection2");
int sizeCollection1 = schemasManager.getSchemaTypes("collection1").getSchemaTypes().size();
int sizeCollection2 = schemasManager.getSchemaTypes("collection2").getSchemaTypes().size();
MetadataSchemaTypesBuilder collection1Builder = schemasManager.modify("collection1");
MetadataSchemaTypesBuilder collection2Builder = schemasManager.modify("collection2");
collection1Builder.createNewSchemaType("a");
collection2Builder.createNewSchemaType("b");
schemasManager.saveUpdateSchemaTypes(collection1Builder);
schemasManager.saveUpdateSchemaTypes(collection2Builder);
MetadataSchemaTypes systemTypes = schemasManager.getSchemaTypes("_system_");
MetadataSchemaTypes typesCollection1 = schemasManager.getSchemaTypes("collection1");
MetadataSchemaTypes typesCollection2 = schemasManager.getSchemaTypes("collection2");
MetadataSchemaTypes zeCollectionTypes = schemasManager.getSchemaTypes(zeCollection);
assertThat(schemasManager.getAllCollectionsSchemaTypes())
.containsOnly(typesCollection1, typesCollection2, zeCollectionTypes, systemTypes);
assertThat(typesCollection1.getCollection()).isEqualTo("collection1");
assertThat(typesCollection1.getSchemaTypes()).hasSize(sizeCollection1 + 1);
assertThat(typesCollection1.getSchemaType("a")).isNotNull();
assertThat(typesCollection2.getCollection()).isEqualTo("collection2");
assertThat(typesCollection2.getSchemaTypes()).hasSize(sizeCollection2 + 1);
assertThat(typesCollection2.getSchemaType("b")).isNotNull();
}
@Test
public void whenSavingSchemaTypeThenSaveTransactionLogStatus()
throws Exception {
MetadataSchemaTypesBuilder collection1Builder = schemasManager.modify(zeCollection);
collection1Builder.createNewSchemaType("a");
collection1Builder.createNewSchemaType("b").setInTransactionLog(true);
collection1Builder.createNewSchemaType("c").setInTransactionLog(false);
schemasManager.saveUpdateSchemaTypes(collection1Builder);
MetadataSchemaTypes zeCollectionTypes = schemasManager.getSchemaTypes(zeCollection);
assertThat(zeCollectionTypes.getSchemaType("a").isInTransactionLog()).isTrue();
assertThat(zeCollectionTypes.getSchemaType("b").isInTransactionLog()).isTrue();
assertThat(zeCollectionTypes.getSchemaType("c").isInTransactionLog()).isFalse();
}
@Test
public void givenSchemasManagerIsInstanciatedThenLoadTypesAndListenThem()
throws Exception {
givenCollection("collection1");
givenCollection("collection2");
int sizeCollection1 = schemasManager.getSchemaTypes("collection1").getSchemaTypes().size();
int sizeCollection2 = schemasManager.getSchemaTypes("collection2").getSchemaTypes().size();
MetadataSchemaTypesBuilder collection1Builder = schemasManager.modify("collection1");
MetadataSchemaTypesBuilder collection2Builder = schemasManager.modify("collection2");
collection1Builder.createNewSchemaType("a");
collection2Builder.createNewSchemaType("b");
MetadataSchemasManager otherManager = new MetadataSchemasManager(getModelLayerFactory(),
new Delayed<>(getAppLayerFactory().getModulesManager()));
otherManager.initialize();
schemasManager.saveUpdateSchemaTypes(collection1Builder);
schemasManager.saveUpdateSchemaTypes(collection2Builder);
MetadataSchemaTypes typesCollection1 = otherManager.getSchemaTypes("collection1");
MetadataSchemaTypes typesCollection2 = otherManager.getSchemaTypes("collection2");
assertThat(typesCollection1.getCollection()).isEqualTo("collection1");
assertThat(typesCollection1.getSchemaTypes()).hasSize(sizeCollection1 + 1);
assertThat(typesCollection1.getSchemaType("a")).isNotNull();
assertThat(typesCollection2.getCollection()).isEqualTo("collection2");
assertThat(typesCollection2.getSchemaTypes()).hasSize(sizeCollection2 + 1);
assertThat(typesCollection2.getSchemaType("b")).isNotNull();
}
@Test
public void givenSchemasInMultipleCollectionsModifiedThenOtherManagerNotified()
throws Exception {
MetadataSchemasManager otherManager = new MetadataSchemasManager(getModelLayerFactory(),
new Delayed<>(getAppLayerFactory().getModulesManager()));
otherManager.initialize();
givenCollection("collection1");
givenCollection("collection2");
int sizeCollection1 = schemasManager.getSchemaTypes("collection1").getSchemaTypes().size();
int sizeCollection2 = schemasManager.getSchemaTypes("collection2").getSchemaTypes().size();
MetadataSchemaTypesBuilder collection1Builder = schemasManager.modify("collection1");
MetadataSchemaTypesBuilder collection2Builder = schemasManager.modify("collection2");
collection1Builder.createNewSchemaType("a");
collection2Builder.createNewSchemaType("b");
schemasManager.saveUpdateSchemaTypes(collection1Builder);
schemasManager.saveUpdateSchemaTypes(collection2Builder);
MetadataSchemaTypes typesCollection1 = otherManager.getSchemaTypes("collection1");
MetadataSchemaTypes typesCollection2 = otherManager.getSchemaTypes("collection2");
assertThat(typesCollection1.getCollection()).isEqualTo("collection1");
assertThat(typesCollection1.getSchemaTypes()).hasSize(sizeCollection1 + 1);
assertThat(typesCollection1.getSchemaType("a")).isNotNull();
assertThat(typesCollection2.getCollection()).isEqualTo("collection2");
assertThat(typesCollection2.getSchemaTypes()).hasSize(sizeCollection2 + 1);
assertThat(typesCollection2.getSchemaType("b")).isNotNull();
}
@Test
public void givenSchemasInMultipleCollectionsModifiedThenAllListenersNotified()
throws Exception {
MetadataSchemasManager otherManager = new MetadataSchemasManager(getModelLayerFactory(),
new Delayed<>(getAppLayerFactory().getModulesManager()));
otherManager.initialize();
givenCollection("collection1");
givenCollection("collection2");
schemasManager.registerListener(schemasManagerFirstCollection1Listener);
schemasManager.registerListener(schemasManagerSecondCollection1Listener);
schemasManager.registerListener(schemasManagerCollection2Listener);
otherManager.registerListener(otherSchemasManagerFirstCollection1Listener);
otherManager.registerListener(otherSchemasManagerSecondCollection1Listener);
otherManager.registerListener(otherSchemasManagerCollection2Listener);
MetadataSchemaTypesBuilder collection1Builder = MetadataSchemaTypesBuilder
.modify(schemasManager.getSchemaTypes("collection1"), new DefaultClassProvider());
collection1Builder.createNewSchemaType("a");
schemasManager.saveUpdateSchemaTypes(collection1Builder);
verify(schemasManagerFirstCollection1Listener).onCollectionSchemasModified("collection1");
verify(schemasManagerSecondCollection1Listener).onCollectionSchemasModified("collection1");
verify(schemasManagerCollection2Listener).onCollectionSchemasModified("collection1");
verify(otherSchemasManagerFirstCollection1Listener).onCollectionSchemasModified("collection1");
verify(otherSchemasManagerSecondCollection1Listener).onCollectionSchemasModified("collection1");
verify(otherSchemasManagerCollection2Listener).onCollectionSchemasModified("collection1");
}
@Test
public void whenSavingMetadataWithAccessRestrictionsThenSaved()
throws Exception {
defineSchemasManager().using(defaultSchema.withAStringMetadata(new MetadataBuilderConfigurator() {
@Override
public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) {
builder.defineAccessRestrictions().withRequiredReadRole("read").withRequiredWriteRole("write")
.withRequiredModificationRole("modification").withRequiredDeleteRole("delete");
}
}));
assertThat(zeSchema.stringMetadata().getAccessRestrictions().getRequiredReadRoles()).containsOnly("read");
assertThat(zeSchema.stringMetadata().getAccessRestrictions().getRequiredWriteRoles()).containsOnly("write");
assertThat(zeSchema.stringMetadata().getAccessRestrictions().getRequiredModificationRoles())
.containsOnly("modification");
assertThat(zeSchema.stringMetadata().getAccessRestrictions().getRequiredDeleteRoles()).containsOnly("delete");
}
@Test
public void whenSavingMetadataWithPopulatedConfigsThenSaved()
throws Exception {
defineSchemasManager().using(defaultSchema.withAStringMetadata(new MetadataBuilderConfigurator() {
@Override
public void configure(MetadataBuilder builder, MetadataSchemaTypesBuilder schemaTypes) {
builder.definePopulateConfigsBuilder(createPopulateConfigsBuilder(1));
}
}));
assertThat(zeSchema.stringMetadata().getPopulateConfigs().getStyles()).containsOnly("style1");
assertThat(zeSchema.stringMetadata().getPopulateConfigs().getProperties()).containsOnly("property1");
assertThat(zeSchema.stringMetadata().getPopulateConfigs().getRegexes())
.extracting("inputMetadata", "regex.pattern", "value")
.containsOnly(tuple("inputMetadata1", "regex1", "value1"));
}
@Test
public void whenModifyingPopulateConfigsOfAMetadataWithInheritanceThenModifyValuesOfCustomSchemasWithSameValue()
throws Exception {
defineSchemasManager().using(defaultSchema);
schemasManager.modify(zeCollection, new MetadataSchemaTypesAlteration() {
@Override
public void alter(MetadataSchemaTypesBuilder types) {
types.getSchemaType("zeSchemaType").getDefaultSchema().create("ze").setType(STRING)
.getPopulateConfigsBuilder().setStyles(asList("style1"));
types.getSchemaType("zeSchemaType").createCustomSchema("custom1");
types.getSchemaType("zeSchemaType").createCustomSchema("custom2");
}
});
MetadataSchemaTypes types = schemasManager.getSchemaTypes(zeCollection);
assertThat(types.getMetadata("zeSchemaType_default_ze").getPopulateConfigs())
.isEqualTo(create().setStyles(asList("style1")).build());
assertThat(types.getMetadata("zeSchemaType_custom1_ze").getPopulateConfigs())
.isEqualTo(create().setStyles(asList("style1")).build());
assertThat(types.getMetadata("zeSchemaType_custom2_ze").getPopulateConfigs())
.isEqualTo(create().setStyles(asList("style1")).build());
schemasManager.modify(zeCollection, new MetadataSchemaTypesAlteration() {
@Override
public void alter(MetadataSchemaTypesBuilder types) {
types.getMetadata("zeSchemaType_custom2_ze").getPopulateConfigsBuilder().setProperties(asList("property1"));
}
});
types = schemasManager.getSchemaTypes(zeCollection);
assertThat(types.getMetadata("zeSchemaType_default_ze").getPopulateConfigs())
.isEqualTo(create().setStyles(asList("style1")).build());
assertThat(types.getMetadata("zeSchemaType_custom1_ze").getPopulateConfigs())
.isEqualTo(create().setStyles(asList("style1")).build());
assertThat(types.getMetadata("zeSchemaType_custom2_ze").getPopulateConfigs()).isEqualTo(
create().setStyles(asList("style1")).setProperties(asList("property1")).build());
schemasManager.modify(zeCollection, new MetadataSchemaTypesAlteration() {
@Override
public void alter(MetadataSchemaTypesBuilder types) {
types.getMetadata("zeSchemaType_default_ze").getPopulateConfigsBuilder().setStyles(asList("style2"));
}
});
types = schemasManager.getSchemaTypes(zeCollection);
assertThat(types.getMetadata("zeSchemaType_default_ze").getPopulateConfigs())
.isEqualTo(create().setStyles(asList("style2")).build());
assertThat(types.getMetadata("zeSchemaType_custom1_ze").getPopulateConfigs())
.isEqualTo(create().setStyles(asList("style2")).build());
assertThat(types.getMetadata("zeSchemaType_custom2_ze").getPopulateConfigs()).isEqualTo(
create().setStyles(asList("style1")).setProperties(asList("property1")).build());
}
private MetadataPopulateConfigsBuilder createPopulateConfigsBuilder(int i) {
MetadataPopulateConfigsBuilder metadataPopulateConfigsBuilder = create();
metadataPopulateConfigsBuilder.setProperties(Arrays.asList("property" + i));
metadataPopulateConfigsBuilder.setStyles(Arrays.asList("style" + i));
metadataPopulateConfigsBuilder.setRegexes(Arrays.asList(createRegexConfig(i)));
return metadataPopulateConfigsBuilder;
}
private RegexConfig createRegexConfig(int i) {
Pattern regex = Pattern.compile("regex" + i);
return new RegexConfig("inputMetadata" + i, regex, "value" + i, RegexConfigType.SUBSTITUTION);
}
@Test
public void givenSchemaWithCodeContainingDefaultThenWorkNormally()
throws Exception {
defineSchemasManager().using(defaultSchema.with(new MetadataSchemaTypesConfigurator() {
@Override
public void configure(MetadataSchemaTypesBuilder schemaTypes) {
MetadataSchemaBuilder builder = schemaTypes.getSchemaType("zeSchemaType").createCustomSchema("USRdefaults");
builder.create("zeMeta").setType(STRING);
}
}));
}
@Test
public void whenSavingDefaultSchemaMetadataThenCodeConserved()
throws Exception {
defineSchemasManager().using(defaultSchema.withAStringMetadata());
assertThat(zeSchema.stringMetadata().getLocalCode()).isEqualTo("stringMetadata");
}
@Test
public void whenSavingDefaultSchemaMetadataThenCompleteCodeConserved()
throws Exception {
defineSchemasManager().using(defaultSchema.withAStringMetadata());
assertThat(zeSchema.stringMetadata().getCode()).isEqualTo("zeSchemaType_default_stringMetadata");
}
@Test
public void whenSavingDefaultSchemaMetadataThenLabelConserved()
throws Exception {
defineSchemasManager().using(defaultSchema.withAStringMetadata(whichHasLabel("aLabel")));
assertThat(zeSchema.stringMetadata().getLabel(Language.French)).isEqualTo("aLabel");
}
@Test
public void whenSavingDefaultSchemaMetadataWithDefaultRequirementThenDefaultRequirementFlagConserved()
throws Exception {
defineSchemasManager().using(defaultSchema.withAStringMetadata(whichHasDefaultRequirement));
assertThat(zeSchema.stringMetadata().isDefaultRequirement()).isTrue();
}
@Test
public void whenSavingDefaultSchemaMetadataWithoutDefaultRequirementThenDefaultRequirementFlagConserved()
throws Exception {
defineSchemasManager().using(defaultSchema.withAStringMetadata(whichHasNoDefaultRequirement));
assertThat(zeSchema.stringMetadata().isDefaultRequirement()).isFalse();
}
@Test
public void whenSavingDefaultSchemaEnabledMetadataThenDefaultRequirementFlagConserved()
throws Exception {
defineSchemasManager().using(defaultSchema.withAStringMetadata(whichIsEnabled));
assertThat(zeSchema.stringMetadata().isEnabled()).isTrue();
}
@Test
public void whenSavingDefaultSchemaDisabledMetadataWithoutDefaultRequirementThenDefaultRequirementFlagConserved()
throws Exception {
defineSchemasManager().using(defaultSchema.withAStringMetadata(whichIsDisabled));
assertThat(zeSchema.stringMetadata().isEnabled()).isFalse();
}
@Test
public void whenSavingSchemaSingleMetadatThenFlagConserved()
throws Exception {
defineSchemasManager().using(defaultSchema.andCustomSchema().withAStringMetadata());
assertThat(zeSchema.stringMetadata().isMultivalue()).isFalse();
assertThat(schemas.getMetadata("zeSchemaType_custom_stringMetadata").isMultivalue()).isFalse();
}
@Test
public void whenSavingSchemaWithEnumMetadataThenConserved()
throws Exception {
defineSchemasManager()
.using(defaultSchema.andCustomSchema().withAnEnumMetadata(MetadataBuilder_EnumClassTest.AValidEnum.class)
.withAStringMetadata());
assertThat(zeSchema.enumMetadata().getType()).isEqualTo(MetadataValueType.ENUM);
assertThat(zeSchema.enumMetadata().getEnumClass()).isEqualTo(MetadataBuilder_EnumClassTest.AValidEnum.class);
assertThat(zeCustomSchema.enumMetadata().getType()).isEqualTo(MetadataValueType.ENUM);
assertThat(zeCustomSchema.enumMetadata().getEnumClass()).isEqualTo(MetadataBuilder_EnumClassTest.AValidEnum.class);
}
@Test
public void whenSavingSchemaMultivalueMetadatThenFlagConserved()
throws Exception {
defineSchemasManager().using(defaultSchema.andCustomSchema().withAStringMetadata(whichIsMultivalue));
assertThat(zeSchema.stringMetadata().isMultivalue()).isTrue();
assertThat(schemas.getMetadata("zeSchemaType_custom_stringMetadata").isMultivalue()).isTrue();
}
@SuppressWarnings("unchecked")
@Test
public void whenSavingDefaultSchemaMetadataWithValidationThenValidatorConserved()
throws Exception {
defineSchemasManager().using(defaultSchema.withAStringMetadata(limitedTo50Characters));
assertThat(zeSchema.stringMetadata().getValidators()).has(
onlyElementsOfClass(Maximum50CharsRecordMetadataValidator.class));
}
@SuppressWarnings("unchecked")
@Test
public void whenSavingDefaultSchemaWithValidationThenValidatorConserved()
throws Exception {
defineSchemasManager().using(defaultSchema.andCustomSchema().withCreationAndModificationDateInZeSchema());
assertThat(zeSchema.instance().getValidators()).has(
onlyElementsOfClass(CreationDateIsBeforeOrEqualToLastModificationDateValidator.class));
assertThat(zeCustomSchema.instance().getValidators()).has(
onlyElementsOfClass(CreationDateIsBeforeOrEqualToLastModificationDateValidator.class));
assertThat(zeSchema.instance().getValidators()).isNotEmpty();
assertThat(zeCustomSchema.instance().getValidators()).isNotEmpty();
}
@SuppressWarnings("unchecked")
@Test
public void whenSavingCustomSchemaWithValidationThenDefaultSchemaHasNoValidator()
throws Exception {
defineSchemasManager().using(defaultSchema.andCustomSchema().withCreationAndModificationDateInZeCustomSchema());
assertThat(zeSchema.instance().getValidators()).isEmpty();
assertThat(zeCustomSchema.instance().getValidators()).isNotEmpty();
assertThat(zeCustomSchema.instance().getValidators()).has(
onlyElementsOfClass(CreationDateIsBeforeOrEqualToLastModificationDateValidator.class));
}
@Test
public void whenSavingDeletableMetadataThenUndeletableFlagConserved()
throws Exception {
defineSchemasManager().using(defaultSchema.withAStringMetadata());
assertThat(zeSchema.stringMetadata().isUndeletable()).isFalse();
}
@Test
public void whenSavingUndeletableMetadataThenUndeletableFlagConserved()
throws Exception {
defineSchemasManager().using(defaultSchema.withAStringMetadata(whichIsUndeletable));
assertThat(zeSchema.stringMetadata().isUndeletable()).isTrue();
}
@Test
public void whenSavingSchemaAutocompleteMetadataThenUndeletableFlagConserved()
throws Exception {
defineSchemasManager().using(defaultSchema.withAStringMetadata(whichIsSchemaAutocomplete));
assertThat(zeSchema.stringMetadata().isSchemaAutocomplete()).isTrue();
}
@Test
public void whenSavingSingleValueMetadataThenMultivalueFlagConserved()
throws Exception {
defineSchemasManager().using(defaultSchema.withAStringMetadata());
assertThat(zeSchema.stringMetadata().isMultivalue()).isFalse();
}
@Test
public void whenSavingMultiValueMetadataThenMultivalueFlagConserved()
throws Exception {
defineSchemasManager().using(defaultSchema.withAStringMetadata(whichIsMultivalue));
assertThat(zeSchema.stringMetadata().isMultivalue()).isTrue();
}
@Test
public void whenSavingNumberMetadataThenTypeConserved()
throws Exception {
defineSchemasManager().using(defaultSchema.withANumberMetadata());
assertThat(zeSchema.numberMetadata().getType()).isEqualTo(NUMBER);
}
@Test
public void whenSavingTextMetadataThenTypeConserved()
throws Exception {
defineSchemasManager().using(defaultSchema.withAStringMetadata());
assertThat(zeSchema.stringMetadata().getType()).isEqualTo(STRING);
}
@Test
public void whenSavingLargeTextMetadataThenTypeConserved()
throws Exception {
defineSchemasManager().using(defaultSchema.withALargeTextMetadata());
assertThat(zeSchema.largeTextMetadata().getType()).isEqualTo(TEXT);
}
@Test
public void whenSavingContentMetadataThenTypeConserved()
throws Exception {
defineSchemasManager().using(defaultSchema.withAContentMetadata());
assertThat(zeSchema.contentMetadata().getType()).isEqualTo(CONTENT);
assertThat(zeSchema.contentMetadata().getStructureFactory().getClass()).isEqualTo(ContentFactory.class);
}
@Test
public void whenSavingTextMetadataWithStructureFactoryThenSettingConserved()
throws Exception {
defineSchemasManager().using(defaultSchema.withAStringMetadata(whichHasStructureFactory));
assertThat(zeSchema.stringMetadata().getStructureFactory().getClass()).isEqualTo(TestStructureFactory1.class);
}
@Test
public void whenSavingTextMetadataWithStructureFactoryThenSettingConservedInCustomSchema()
throws Exception {
defineSchemasManager().using(defaultSchema.andCustomSchema().withAStringMetadata(whichHasStructureFactory));
assertThat(zeCustomSchema.stringMetadata().getStructureFactory().getClass()).isEqualTo(TestStructureFactory1.class);
}
@Test
public void whenSavingDoubleMetadataThenHasCorrectDataStoreType()
throws Exception {
defineSchemasManager().using(defaultSchema.withANumberMetadata());
assertThat(zeSchema.numberMetadata().getDataStoreType()).isEqualTo("d");
}
@Test
public void whenSavingMultivalueStringMetadataThenHasCorrectDataStoreType()
throws Exception {
defineSchemasManager().using(defaultSchema.withAStringMetadata(whichIsMultivalue));
assertThat(zeSchema.stringMetadata().getDataStoreType()).isEqualTo("ss");
}
@Test
public void whenSavingDoubleMetadataThenHasCorrectDataStoreTypeInCustomSchema()
throws Exception {
defineSchemasManager().using(defaultSchema.andCustomSchema().withANumberMetadata());
assertThat(zeCustomSchema.numberMetadata().getDataStoreType()).isEqualTo("d");
}
@Test
public void whenSavingMultivalueStringMetadataThenHasCorrectDataStoreTypeInCustomSchema()
throws Exception {
defineSchemasManager().using(defaultSchema.andCustomSchema().withAStringMetadata(whichIsMultivalue));
assertThat(zeCustomSchema.stringMetadata().getDataStoreType()).isEqualTo("ss");
}
@Test
public void whenSavingCustomSchemaDateMetadataThenHasCorrectDataStoreType()
throws Exception {
defineSchemasManager().using(defaultSchema.andCustomSchema().withADateTimeMetadataInCustomSchema());
assertThat(zeCustomSchema.customDateMetadata().getDataStoreType()).isEqualTo("dt");
}
@Test
public void whenSavingCustomSchemaStringMetadataThenHasCorrectDataStoreType()
throws Exception {
defineSchemasManager().using(defaultSchema.andCustomSchema().withAStringMetadataInCustomSchema(whichIsMultivalue));
assertThat(zeCustomSchema.customStringMetadata().getDataStoreType()).isEqualTo("ss");
}
@Test
public void whenSavingReferencedMetadataThenAllowedSchemasConserved()
throws Exception {
defineSchemasManager().using(defaultSchema.withAReferenceMetadata(whichAllowsThirdSchemaType));
assertThat(zeSchema.referenceMetadata().getAllowedReferences().getAllowedSchemaType()).isEqualTo(
schemas.aThirdSchemaTypeCode());
assertThat(zeSchema.referenceMetadata().isChildOfRelationship()).isFalse();
}
@Test
public void whenSavingChildOfReferencedMetadataThenFlagConserved()
throws Exception {
defineSchemasManager().using(
defaultSchema.withAReferenceMetadata(whichAllowsThirdSchemaType, whichIsChildOfRelationship));
assertThat(zeSchema.referenceMetadata().isChildOfRelationship()).isTrue();
}
@Test
public void whenSavingTaxonomyReferencedMetadataThenFlagConserved()
throws Exception {
defineSchemasManager().using(
defaultSchema.withAReferenceMetadata(whichAllowsThirdSchemaType, whichIsTaxonomyRelationship));
assertThat(zeSchema.referenceMetadata().isTaxonomyRelationship()).isTrue();
}
@Test
public void whenSavingReferencedMetadataThenAllowedSchemaTypeConserved()
throws Exception {
defineSchemasManager().using(defaultSchema.withAReferenceMetadata(whichAllowsAnotherDefaultSchema));
assertThat(zeSchema.referenceMetadata().getAllowedReferences().getAllowedSchemas()).containsOnly(
schemas.anotherDefaultSchemaCode());
}
@Test
public void whenSavingManualEntryMetadataThenDataTypeConserved()
throws Exception {
defineSchemasManager().using(defaultSchema.withAStringMetadata());
assertThat(zeSchema.stringMetadata().getDataEntry().getType()).isEqualTo(MANUAL);
}
@Test
public void whenSavingCopiedMetadataThenDataTypeConserved()
throws Exception {
defineSchemasManager()
.using(defaultSchema.withTwoMetadatasCopyingAnotherSchemaValuesUsingTwoDifferentReferenceMetadata(false, false,
false));
DataEntry dataEntry = zeSchema.stringCopiedFromFirstReferenceStringMeta().getDataEntry();
assertThat(dataEntry.getType()).isEqualTo(COPIED);
assertThat(((CopiedDataEntry) dataEntry).getCopiedMetadata()).isEqualTo(anotherSchema.stringMetadata().getCode());
assertThat(((CopiedDataEntry) dataEntry).getReferenceMetadata()).isEqualTo(
zeSchema.firstReferenceToAnotherSchema().getCode());
}
@Test
public void whenSavingAgregatedMetadatasThenDataTypeAndParametersConserved()
throws Exception {
defineSchemasManager().using(defaultSchema.with(new MetadataSchemaTypesConfigurator() {
@Override
public void configure(MetadataSchemaTypesBuilder schemaTypes) {
MetadataSchemaBuilder anotherSchemaBuilder = schemaTypes.getSchema("anotherSchemaType_default");
schemaTypes.getSchema(anotherSchema.code()).create("ref")
.defineReferencesTo(schemaTypes.getSchemaType("zeSchemaType"));
schemaTypes.getSchema(anotherSchema.code()).create("number").setType(MetadataValueType.NUMBER);
schemaTypes.getSchema(zeSchema.code()).create("sum").setType(STRING).defineDataEntry()
.asSum(anotherSchemaBuilder.get("ref"), anotherSchemaBuilder.get("number"));
}
}));
AggregatedDataEntry dataEntry = (AggregatedDataEntry) zeSchema.metadata("sum").getDataEntry();
assertThat(dataEntry.getType()).isEqualTo(AGGREGATED);
assertThat(dataEntry.getInputMetadata()).isEqualTo("anotherSchemaType_default_number");
assertThat(dataEntry.getReferenceMetadata()).isEqualTo("anotherSchemaType_default_ref");
assertThat(dataEntry.getAgregationType()).isEqualTo(AggregationType.SUM);
}
@Test
public void whenCreateAgregatedMetadataWithIncompleteMetadataCodesOrCodeOfMetadataInCustomSchema()
throws Exception {
defineSchemasManager().using(defaultSchema.with(new MetadataSchemaTypesConfigurator() {
@Override
public void configure(MetadataSchemaTypesBuilder schemaTypes) {
schemaTypes.getSchema(anotherSchema.code()).create("ref")
.defineReferencesTo(schemaTypes.getSchemaType("zeSchemaType"));
schemaTypes.getSchema(anotherSchema.code()).create("number").setType(MetadataValueType.NUMBER);
schemaTypes.getSchema(thirdSchema.code()).create("number").setType(MetadataValueType.NUMBER);
schemaTypes.getSchemaType(anotherSchema.typeCode()).createCustomSchema("custom1");
schemaTypes.getSchemaType(zeSchema.typeCode()).createCustomSchema("custom2");
}
}));
MetadataSchemaTypesBuilder builder = schemasManager.modify(zeCollection);
MetadataBuilder metadataBuilder = builder.getSchema("zeSchemaType_default").create("zeMeta");
MetadataBuilder numberMetadata = builder.getSchema("anotherSchemaType_default").get("number");
MetadataBuilder refMetadata = builder.getSchema("anotherSchemaType_default").get("ref");
try {
metadataBuilder.defineDataEntry().asSum(numberMetadata, builder.getSchema("anotherSchemaType_custom1").get("ref"));
fail("exception expected");
} catch (DataEntryBuilderRuntimeException_InvalidMetadataCode e) {
//OK
}
try {
metadataBuilder.defineDataEntry().asSum(builder.getSchema("anotherSchemaType_custom1").get("number"), refMetadata);
fail("exception expected");
} catch (DataEntryBuilderRuntimeException_InvalidMetadataCode e) {
//OK
}
try {
metadataBuilder.defineDataEntry().asSum(refMetadata, refMetadata);
fail("exception expected");
} catch (DataEntryBuilderRuntimeException_InvalidMetadataCode e) {
//OK
}
try {
metadataBuilder.defineDataEntry().asSum(numberMetadata, numberMetadata);
fail("exception expected");
} catch (DataEntryBuilderRuntimeException_InvalidMetadataCode e) {
//OK
}
try {
metadataBuilder.defineDataEntry().asSum(builder.getSchema(thirdSchema.code()).get("number"), refMetadata);
fail("exception expected");
} catch (DataEntryBuilderRuntimeException_InvalidMetadataCode e) {
//OK
}
metadataBuilder.defineDataEntry().asSum(refMetadata, numberMetadata);
}
@Test
public void whenSavingParameterizedCalculatedMetadataThenDataTypeAndParametersConserved()
throws Exception {
defineSchemasManager().using(defaultSchema.with(new MetadataSchemaTypesConfigurator() {
@Override
public void configure(MetadataSchemaTypesBuilder schemaTypes) {
schemaTypes.getSchema(zeSchema.code()).create("calculatedString").setType(STRING).defineDataEntry()
.asCalculated(new TestParametrizedMetadataValueCalculator("value1", 42));
}
}));
CalculatedDataEntry dataEntry = (CalculatedDataEntry) zeSchema.metadata("calculatedString").getDataEntry();
TestParametrizedMetadataValueCalculator calculator = (TestParametrizedMetadataValueCalculator) dataEntry.getCalculator();
assertThat(dataEntry.getType()).isEqualTo(CALCULATED);
assertThat(calculator.parameter1).isEqualTo("value1");
assertThat(calculator.parameter2).isEqualTo(42);
}
@Test
public void whenSavingInitializedCalculatedMetadataThenInitializedWhenBuilt()
throws Exception {
defineSchemasManager().using(defaultSchema.with(new MetadataSchemaTypesConfigurator() {
@Override
public void configure(MetadataSchemaTypesBuilder schemaTypes) {
schemaTypes.getSchema(zeSchema.code()).create("calculatedString").setType(STRING).defineDataEntry()
.asCalculated(TestInitializedMetadataValueCalculator.class);
}
}));
//TODO : initialize(List<Metadata> schemaMetadatas, Metadata calculatedMetadata) is called twice
CalculatedDataEntry dataEntry = (CalculatedDataEntry) zeSchema.metadata("calculatedString").getDataEntry();
TestInitializedMetadataValueCalculator calculator = (TestInitializedMetadataValueCalculator) dataEntry.getCalculator();
assertThat(calculator.initializationCounter1).isEqualTo(2);
assertThat(calculator.initializationCounter2).isEqualTo(1);
schemas.modify(new MetadataSchemaTypesAlteration() {
@Override
public void alter(MetadataSchemaTypesBuilder types) {
types.getSchema(zeSchema.code()).get("title").setDefaultRequirement(true);
}
});
dataEntry = (CalculatedDataEntry) zeSchema.metadata("calculatedString").getDataEntry();
calculator = (TestInitializedMetadataValueCalculator) dataEntry.getCalculator();
assertThat(calculator.initializationCounter1).isEqualTo(2);
assertThat(calculator.initializationCounter2).isEqualTo(1);
}
@Test
public void whenSavingSequenceMetadataThenDataTypeConserved()
throws Exception {
defineSchemasManager().using(defaultSchema.withAFixedSequence().withADynamicSequence());
SequenceDataEntry fixedSeqDataEntry = (SequenceDataEntry) zeSchema.fixedSequenceMetadata().getDataEntry();
SequenceDataEntry dynamicSeqDataEntry = (SequenceDataEntry) zeSchema.dynamicSequenceMetadata().getDataEntry();
assertThat(fixedSeqDataEntry.getType()).isEqualTo(SEQUENCE);
assertThat(fixedSeqDataEntry.getFixedSequenceCode()).isEqualTo("zeSequence");
assertThat(fixedSeqDataEntry.getMetadataProvidingSequenceCode()).isNull();
assertThat(dynamicSeqDataEntry.getType()).isEqualTo(SEQUENCE);
assertThat(dynamicSeqDataEntry.getFixedSequenceCode()).isNull();
assertThat(dynamicSeqDataEntry.getMetadataProvidingSequenceCode()).isEqualTo("metadataDefiningSequenceNumber");
}
@Test
public void whenSavingCalculatedMetadataThenDataTypeConserved()
throws Exception {
defineSchemasManager().using(defaultSchema.withCalculatedDaysBetweenLocalDateAndAnotherSchemaRequiredDate(false));
DataEntry dataEntry = zeSchema.calculatedDaysBetween().getDataEntry();
assertThat(dataEntry.getType()).isEqualTo(CALCULATED);
assertThat(((CalculatedDataEntry) dataEntry).getCalculator()).isInstanceOf(
DaysBetweenSingleLocalDateAndAnotherSchemaRequiredDateCalculator.class);
}
@Test
public void whenSavingCustomSchemaMetadataThenCodeConserved()
throws Exception {
defineSchemasManager().using(defaultSchema.andCustomSchema().withAStringMetadata());
assertThat(zeCustomSchema.stringMetadata().getLocalCode()).isEqualTo("stringMetadata");
}
@Test
public void whenSavingCustomSchemaMetadataThenCompleteCodeConserved()
throws Exception {
defineSchemasManager().using(defaultSchema.andCustomSchema().withAStringMetadata());
assertThat(zeCustomSchema.stringMetadata().getCode()).isEqualTo("zeSchemaType_custom_stringMetadata");
}
@Test
public void whenSavingCustomSchemaMetadataThenLabelConserved()
throws Exception {
defineSchemasManager().using(
defaultSchema.andCustomSchema().withAStringMetadata(whichHasLabelInCustomSchema("customLabel")));
assertThat(zeSchema.stringMetadata().getLabel(Language.French)).isNotEqualTo("customLabel");
assertThat(zeCustomSchema.stringMetadata().getLabel(Language.French)).isEqualTo("customLabel");
}
@Test
public void whenSavingCustomSchemaMetadataWithDefaultRequirementThenDefaultRequirementFlagConserved()
throws Exception {
defineSchemasManager().using(
defaultSchema.andCustomSchema().withAStringMetadata(whichHasDefaultRequirementInCustomSchema));
assertThat(zeSchema.stringMetadata().isDefaultRequirement()).isFalse();
assertThat(zeCustomSchema.stringMetadata().isDefaultRequirement()).isTrue();
}
@Test
public void whenSavingCustomSchemaMetadataWithoutDefaultRequirementThenDefaultRequirementFlagConserved()
throws Exception {
defineSchemasManager().using(
defaultSchema.andCustomSchema().withAStringMetadata(whichHasDefaultRequirement,
whichHasNoDefaultRequirementInCustomSchema));
assertThat(zeSchema.stringMetadata().isDefaultRequirement()).isTrue();
assertThat(zeCustomSchema.stringMetadata().isDefaultRequirement()).isFalse();
}
@Test
public void whenSavingCustomSchemaEnabledMetadataThenEnabledFlagConserved()
throws Exception {
defineSchemasManager().using(defaultSchema.andCustomSchema().withAStringMetadata(whichIsDisabledInCustomSchema));
assertThat(zeSchema.stringMetadata().isEnabled()).isTrue();
assertThat(zeCustomSchema.stringMetadata().isEnabled()).isFalse();
}
@Test
public void whenSavingCustomSchemaDisabledMetadataThenEnabledFlagConserved()
throws Exception {
defineSchemasManager().using(
defaultSchema.andCustomSchema().withAStringMetadata(whichIsDisabled, whichIsEnabledInCustomSchema));
assertThat(zeSchema.stringMetadata().isEnabled()).isFalse();
assertThat(zeCustomSchema.stringMetadata().isEnabled()).isTrue();
}
@SuppressWarnings("unchecked")
@Test
public void whenSavingCustomSchemaWithInheritedValidatorThenValidatorConserved()
throws Exception {
defineSchemasManager().using(defaultSchema.andCustomSchema().withAStringMetadata(limitedTo50Characters));
assertThat(zeSchema.stringMetadata().getValidators()).has(
onlyElementsOfClass(Maximum50CharsRecordMetadataValidator.class))
.hasSize(1);
assertThat(zeCustomSchema.stringMetadata().getValidators())
.has(onlyElementsOfClass(Maximum50CharsRecordMetadataValidator.class))
.hasSize(1);
}
@SuppressWarnings("unchecked")
@Test
public void whenSavingCustomSchemaWithCustomValidatorThenValidatorConserved()
throws Exception {
defineSchemasManager()
.using(defaultSchema.andCustomSchema().withAStringMetadata(limitedTo50CharactersInCustomSchema));
assertThat(zeSchema.stringMetadata().getValidators()).isEmpty();
assertThat(zeCustomSchema.stringMetadata().getValidators()).has(
onlyElementsOfClass(Maximum50CharsRecordMetadataValidator.class));
}
@Test
public void whenSavingDefaultSchemaThenDefaultCodeConserved()
throws Exception {
defineSchemasManager().using(defaultSchema);
assertThat(zeSchema.instance().getLocalCode()).isEqualTo("default");
}
@Test
public void whenSavingDefaultSchemaThenCodeConserved()
throws Exception {
defineSchemasManager().using(defaultSchema);
assertThat(zeSchema.instance().getCode()).isEqualTo("zeSchemaType_default");
}
@Test
public void whenSavingDefaultSchemaThenLabelConserved()
throws Exception {
defineSchemasManager().using(defaultSchema.withSchemaFrenchLabel("zeLabel"));
assertThat(zeSchema.instance().getLabel(Language.French)).isEqualTo("zeLabel");
}
@Test
public void whenSavingCustomSchemaThenCodeConserved()
throws Exception {
defineSchemasManager().using(defaultSchema.andCustomSchema());
assertThat(zeCustomSchema.instance().getLocalCode()).isEqualTo("custom");
}
@Test
public void whenSavingCustomSchemaWithThenCodeConserved()
throws Exception {
defineSchemasManager().using(defaultSchema.andCustomSchema());
assertThat(zeCustomSchema.instance().getCode()).isEqualTo("zeSchemaType_custom");
}
@Test
public void whenSavingCustomSchemaThenLabelConserved()
throws Exception {
defineSchemasManager().using(defaultSchema.andCustomSchema().withCustomSchemaFrenchLabel("zeLabel"));
assertThat(zeCustomSchema.instance().getLabel(Language.French)).isEqualTo("zeLabel");
}
@Test
public void whenSavingCustomUndeletableSchemaThenItIsUndeletable()
throws Exception {
defineSchemasManager().using(defaultSchema.andCustomSchema().whichCustomSchemaIsUndeletable());
assertThat(zeCustomSchema.instance().isUndeletable()).isTrue();
}
@Test
public void whenSavingCustomDeletableSchemaThenUndeletableIsConserved()
throws Exception {
defineSchemasManager().using(defaultSchema.andCustomSchema().whichCustomSchemaIsDeletable());
assertThat(zeCustomSchema.instance().isUndeletable()).isFalse();
}
@Test()
public void whenSavingSchemaTypesThenCanRetreiveThemWithManager()
throws Exception {
MetadataSchemaTypesBuilder typesBuilder = modifySchemaTypesAddingTwoNewTypes();
MetadataSchemaTypes types = saveAndLoadSavedSchemaTypes(typesBuilder);
MetadataSchemaTypes builtTypes = typesBuilder.build(getDataLayerFactory().newTypesFactory(), getModelLayerFactory());
assertThat(types.getSchema(UserDocument.DEFAULT_SCHEMA).getMetadata(UserDocument.USER))
.isEqualTo(builtTypes.getSchema(UserDocument.DEFAULT_SCHEMA).getMetadata(UserDocument.USER));
Metadata content = types.getSchema(UserDocument.DEFAULT_SCHEMA).getMetadata(UserDocument.CONTENT);
Metadata builtContent = builtTypes.getSchema(UserDocument.DEFAULT_SCHEMA).getMetadata(UserDocument.CONTENT);
assertThat(content).isEqualTo(builtContent);
assertThat(types.getSchema(UserDocument.DEFAULT_SCHEMA)).isEqualTo(
builtTypes.getSchema(UserDocument.DEFAULT_SCHEMA));
for (Metadata metadata : types.getAllMetadatasIncludingThoseWithInheritance()) {
Metadata builtMetadata = builtTypes.getMetadata(metadata.getCode());
assertThat(metadata).describedAs(metadata.getCode()).isEqualTo(builtMetadata);
}
for (MetadataSchemaType type : types.getSchemaTypes()) {
MetadataSchemaType builtType = builtTypes.getSchemaType(type.getCode());
for (MetadataSchema schema : type.getAllSchemas()) {
MetadataSchema builtSchema = builtTypes.getSchema(schema.getCode());
for (int i = 0; i < schema.getMetadatas().size(); i++) {
Metadata metadata = schema.getMetadatas().get(i);
Metadata builtMetadata = builtSchema.getMetadatas().get(i);
assertThat(metadata).describedAs(metadata.getCode()).isEqualTo(builtMetadata);
}
assertThat(schema.getMetadatas()).describedAs(schema.getCode()).isEqualTo(builtSchema.getMetadatas());
assertThat(schema).describedAs(schema.getCode()).isEqualTo(builtSchema);
}
assertThat(type.getAllMetadatas()).describedAs(type.getCode()).isEqualTo(builtType.getAllMetadatas());
assertThat(type.getAllSchemas()).describedAs(type.getCode()).isEqualTo(builtType.getAllSchemas());
assertThat(type).describedAs(type.getCode()).isEqualTo(builtType);
}
assertThat(types).isEqualTo(builtTypes);
}
@Test
public void whenSavingDefaultSchemaWithAMetadataThenCustomSchemaHasThisMetadata()
throws Exception {
defineSchemasManager().using(defaultSchema.withAStringMetadata().andCustomSchema());
assertThat(zeCustomSchema.stringMetadata().getLocalCode()).isEqualTo(zeSchema.stringMetadata().getLocalCode());
}
@Test
public void whenModifyingDefaultMetadataThenCustomMetadataIsModified()
throws Exception {
defineSchemasManager().using(defaultSchema.withAModifiedStringMetadata().andCustomSchema());
assertThat(zeSchema.stringMetadata().getLabel(Language.French))
.isEqualTo(zeCustomSchema.stringMetadata().getLabel(Language.French));
}
@Test(expected = MetadataSchemasRuntimeException.NoSuchMetadata.class)
public void whenSavingCustomSchemaWithAMetadataThenDefaultSchemaHasNotThisMetadata()
throws Exception {
defineSchemasManager().using(defaultSchema.andCustomSchema().withADateTimeMetadataInCustomSchema());
assertThat(zeCustomSchema.customStringMetadata()).isNotNull();
}
@Test()
public void whenSavingMetadataWithInheritedValuesThenInheritDefaultValuesAfterSave()
throws Exception {
MetadataSchemaTypes types = createTwoSchemas();
assertThat(types.getMetadata("folder_default_rule").isEnabled()).isEqualTo(
types.getMetadata("folder_employee_rule").isEnabled()).isTrue();
assertThat(types.getMetadata("folder_default_rule").getLabel(Language.French)).isEqualTo(
types.getMetadata("folder_employee_rule").getLabel(Language.French)).isEqualTo("Rule");
assertThat(types.getMetadata("folder_default_rule").getAllowedReferences()).isEqualTo(
types.getMetadata("folder_employee_rule").getAllowedReferences());
assertThat(types.getMetadata("folder_default_rule").isDefaultRequirement()).isEqualTo(
types.getMetadata("folder_employee_rule").isDefaultRequirement()).isFalse();
assertThat(types.getMetadata("folder_default_rule").isUndeletable()).isFalse();
assertThat(types.getMetadata("folder_default_rule").isMultivalue()).isFalse();
}
@Test()
public void whenUpdateDefaultMetadataThenCustomMetadataInheritingItHaveNew()
throws Exception {
MetadataSchemaTypes types = createTwoSchemas();
types = modifyDefaultMetadata(types);
assertThat(types.getMetadata("folder_default_rule").isEnabled()).isEqualTo(
types.getMetadata("folder_employee_rule").isEnabled()).isFalse();
assertThat(types.getMetadata("folder_default_rule").getLabel(Language.French)).isEqualTo(
types.getMetadata("folder_employee_rule").getLabel(Language.French)).isEqualTo("Ze Rule");
assertThat(types.getMetadata("folder_default_rule").getAllowedReferences()).isEqualTo(
types.getMetadata("folder_employee_rule").getAllowedReferences());
assertThat(types.getMetadata("folder_default_rule").isDefaultRequirement()).isEqualTo(
types.getMetadata("folder_employee_rule").isDefaultRequirement()).isTrue();
assertThat(types.getMetadata("folder_default_rule").isUndeletable()).isEqualTo(
types.getMetadata("folder_employee_rule").isUndeletable()).isFalse();
assertThat(types.getMetadata("folder_default_rule").isMultivalue()).isEqualTo(
types.getMetadata("folder_employee_rule").isMultivalue()).isFalse();
}
@Test()
public void givenInheritingMetadataWhenChangeEnabledThenStopInheritingDefaultValueUntilResetToNull()
throws Exception {
MetadataSchemaTypes types = createTwoSchemas();
MetadataSchemaTypesBuilder typesBuilder = MetadataSchemaTypesBuilder.modify(types, classProvider);
typesBuilder.getMetadata("folder_employee_rule").setEnabled(false);
types = saveAndLoadSavedSchemaTypes(typesBuilder);
assertThat(types.getMetadata("folder_default_rule").isEnabled()).isTrue();
assertThat(types.getMetadata("folder_employee_rule").isEnabled()).isFalse();
typesBuilder = MetadataSchemaTypesBuilder.modify(types, classProvider);
typesBuilder.getMetadata("folder_employee_rule").setEnabled(null);
types = saveAndLoadSavedSchemaTypes(typesBuilder);
assertThat(types.getMetadata("folder_default_rule").isEnabled()).isTrue();
assertThat(types.getMetadata("folder_employee_rule").isEnabled()).isTrue();
}
@Test()
public void givenInheritingMetadataWhenChangeDefaultRequirementThenStopInheritingDefaultValueUntilResetToNull()
throws Exception {
MetadataSchemaTypes types = createTwoSchemas();
MetadataSchemaTypesBuilder typesBuilder = MetadataSchemaTypesBuilder.modify(types, classProvider);
typesBuilder.getMetadata("folder_employee_rule").setDefaultRequirement(true);
types = saveAndLoadSavedSchemaTypes(typesBuilder);
assertThat(types.getMetadata("folder_default_rule").isDefaultRequirement()).isFalse();
assertThat(types.getMetadata("folder_employee_rule").isDefaultRequirement()).isTrue();
typesBuilder = MetadataSchemaTypesBuilder.modify(types, classProvider);
typesBuilder.getMetadata("folder_employee_rule").setDefaultRequirement(null);
types = saveAndLoadSavedSchemaTypes(typesBuilder);
assertThat(types.getMetadata("folder_default_rule").isDefaultRequirement()).isFalse();
assertThat(types.getMetadata("folder_employee_rule").isDefaultRequirement()).isFalse();
}
@Test()
public void givenInheritingMetadataWhenChangeLabelThenStopInheritingDefaultValueUntilResetToNull()
throws Exception {
MetadataSchemaTypes types = createTwoSchemas();
MetadataSchemaTypesBuilder typesBuilder = MetadataSchemaTypesBuilder.modify(types, classProvider);
typesBuilder.getMetadata("folder_employee_rule").addLabel(Language.French, "a custom rule");
types = saveAndLoadSavedSchemaTypes(typesBuilder);
assertThat(types.getMetadata("folder_default_rule").getLabel(Language.French)).isEqualTo("Rule");
assertThat(types.getMetadata("folder_employee_rule").getLabel(Language.French)).isEqualTo("a custom rule");
typesBuilder = MetadataSchemaTypesBuilder.modify(types, classProvider);
typesBuilder.getMetadata("folder_default_rule").addLabel(Language.French, "Ze Rule");
types = saveAndLoadSavedSchemaTypes(typesBuilder);
assertThat(types.getMetadata("folder_default_rule").getLabel(Language.French)).isEqualTo("Ze Rule");
assertThat(types.getMetadata("folder_employee_rule").getLabel(Language.French)).isEqualTo("a custom rule");
typesBuilder = MetadataSchemaTypesBuilder.modify(types, classProvider);
typesBuilder.getMetadata("folder_employee_rule").addLabel(Language.French, null);
types = saveAndLoadSavedSchemaTypes(typesBuilder);
assertThat(types.getMetadata("folder_default_rule").getLabel(Language.French)).isEqualTo("Ze Rule");
assertThat(types.getMetadata("folder_employee_rule").getLabel(Language.French)).isEqualTo("Ze Rule");
}
@Test(expected = MetadataSchemasManagerRuntimeException_NoSuchCollection.class)
public void whenGetTypesOfInvalidCollectionThenException()
throws Exception {
schemasManager.getSchemaTypes("invalidCollection");
}
@Test(expected = MetadataSchemaBuilderRuntimeException.CannotModifyAttributeOfInheritingMetadata.class)
public void whenModifyUndeletableOnInheritingMetadataThenUnmodifiableAttributeException()
throws Exception {
MetadataSchemaTypes types = createTwoSchemas();
MetadataSchemaTypesBuilder typesBuilder = MetadataSchemaTypesBuilder.modify(types, classProvider);
typesBuilder.getMetadata("folder_employee_rule").setUndeletable(false);
typesBuilder.getSchema("folder_employee").getMetadata("rule").setUndeletable(false);
}
@Test(expected = MetadataSchemaBuilderRuntimeException.CannotModifyAttributeOfInheritingMetadata.class)
public void whenModifyReferencesOnInheritingMetadataThenUnmodifiableAttributeException()
throws Exception {
MetadataSchemaTypes types = createTwoSchemas();
MetadataSchemaTypesBuilder typesBuilder = MetadataSchemaTypesBuilder.modify(types, classProvider);
typesBuilder.getMetadata("folder_employee_rule").defineReferences();
}
@Test()
public void givenInheritingMetadataThenHasItsValidatorsAndItsInheritedRecordMetadataValidators()
throws Exception {
MetadataSchemaTypes types = createTwoSchemas();
MetadataSchemaTypesBuilder typesBuilder = MetadataSchemaTypesBuilder.modify(types, classProvider);
typesBuilder.getMetadata("folder_default_rule").defineValidators().add(TestRecordMetadataValidator1.class)
.add(TestRecordMetadataValidator2.class);
typesBuilder.getMetadata("folder_employee_rule").defineValidators().add(TestMetadataValidator3.class);
types = saveAndLoadSavedSchemaTypes(typesBuilder);
//
assertThat(getElementsClasses(types.getMetadata("folder_default_rule").getValidators())).containsOnly(
TestRecordMetadataValidator1.class, TestRecordMetadataValidator2.class);
assertThat(getElementsClasses(types.getMetadata("folder_employee_rule").getValidators())).containsOnly(
TestRecordMetadataValidator1.class, TestRecordMetadataValidator2.class, TestMetadataValidator3.class);
typesBuilder = MetadataSchemaTypesBuilder.modify(types, new DefaultClassProvider());
typesBuilder.getMetadata("folder_default_rule").defineValidators().remove(TestRecordMetadataValidator2.class);
types = saveAndLoadSavedSchemaTypes(typesBuilder);
assertThat(getElementsClasses(types.getMetadata("folder_default_rule").getValidators())).containsOnly(
TestRecordMetadataValidator1.class);
assertThat(getElementsClasses(types.getMetadata("folder_employee_rule").getValidators())).containsOnly(
TestRecordMetadataValidator1.class, TestMetadataValidator3.class);
typesBuilder = MetadataSchemaTypesBuilder.modify(types, classProvider);
typesBuilder.getMetadata("folder_default_rule").defineValidators().add(TestRecordMetadataValidator2.class);
typesBuilder.getMetadata("folder_employee_rule").defineValidators().remove(TestMetadataValidator3.class);
types = saveAndLoadSavedSchemaTypes(typesBuilder);
assertThat(getElementsClasses(types.getMetadata("folder_default_rule").getValidators())).containsOnly(
TestRecordMetadataValidator1.class, TestRecordMetadataValidator2.class);
assertThat(getElementsClasses(types.getMetadata("folder_employee_rule").getValidators())).containsOnly(
TestRecordMetadataValidator1.class, TestRecordMetadataValidator2.class);
}
@Test()
public void givenInheritingSchemaThenHasItsValidatorsAndItsInheritedSchemaValidators()
throws Exception {
MetadataSchemaTypes types = createTwoSchemas();
MetadataSchemaTypesBuilder typesBuilder = MetadataSchemaTypesBuilder.modify(types, classProvider);
typesBuilder.getSchema("folder_default").defineValidators().add(TestRecordValidator1.class)
.add(TestRecordValidator2.class);
typesBuilder.getSchema("folder_employee").defineValidators().add(TestRecordValidator3.class);
types = saveAndLoadSavedSchemaTypes(typesBuilder);
assertThat(getElementsClasses(types.getSchema("folder_default").getValidators())).containsOnly(
TestRecordValidator1.class, TestRecordValidator2.class);
assertThat(getElementsClasses(types.getSchema("folder_employee").getValidators())).containsOnly(
TestRecordValidator1.class, TestRecordValidator2.class, TestRecordValidator3.class);
typesBuilder = MetadataSchemaTypesBuilder.modify(types, classProvider);
typesBuilder.getSchema("folder_default").defineValidators().remove(TestRecordValidator2.class);
types = saveAndLoadSavedSchemaTypes(typesBuilder);
assertThat(getElementsClasses(types.getSchema("folder_default").getValidators())).containsOnly(
TestRecordValidator1.class);
assertThat(getElementsClasses(types.getSchema("folder_employee").getValidators())).containsOnly(
TestRecordValidator1.class, TestRecordValidator3.class);
typesBuilder = MetadataSchemaTypesBuilder.modify(types, classProvider);
typesBuilder.getSchema("folder_default").defineValidators().add(TestRecordValidator2.class);
typesBuilder.getSchema("folder_employee").defineValidators().remove(TestRecordValidator3.class);
types = saveAndLoadSavedSchemaTypes(typesBuilder);
assertThat(getElementsClasses(types.getSchema("folder_default").getValidators())).containsOnly(
TestRecordValidator1.class, TestRecordValidator2.class);
assertThat(getElementsClasses(types.getSchema("folder_employee").getValidators())).containsOnly(
TestRecordValidator1.class, TestRecordValidator2.class);
}
@Test
public void givenSecurityFlagsWhenSavingAndModifyingThenFlagsConserved()
throws Exception {
MetadataSchemaTypes types = createTwoSchemas();
assertThat(types.getSchemaType("folder").hasSecurity()).isTrue();
assertThat(types.getSchemaType("rule").hasSecurity()).isFalse();
MetadataSchemaTypesBuilder typesBuilder = MetadataSchemaTypesBuilder.modify(types, new DefaultClassProvider());
types = saveAndLoadSavedSchemaTypes(typesBuilder);
assertThat(types.getSchemaType("folder").hasSecurity()).isTrue();
assertThat(types.getSchemaType("rule").hasSecurity()).isFalse();
}
@Test
public void givenReadOnlyLockedFlagsWhenSavingAndModifyingThenReadOnlyLockedConserved()
throws Exception {
MetadataSchemaTypes types = createTwoSchemas();
assertThat(types.getSchemaType("folder").isReadOnlyLocked()).isFalse();
assertThat(types.getSchemaType("rule").isReadOnlyLocked()).isFalse();
schemasManager.modify(zeCollection, new MetadataSchemaTypesAlteration() {
@Override
public void alter(MetadataSchemaTypesBuilder types) {
types.getSchemaType("folder").setReadOnlyLocked(true);
}
});
types = schemasManager.getSchemaTypes("zeCollection");
assertThat(types.getSchemaType("folder").isReadOnlyLocked()).isTrue();
assertThat(types.getSchemaType("rule").isReadOnlyLocked()).isFalse();
schemasManager.modify(zeCollection, new MetadataSchemaTypesAlteration() {
@Override
public void alter(MetadataSchemaTypesBuilder types) {
types.getSchemaType("folder").setReadOnlyLocked(false);
types.getSchemaType("rule").setReadOnlyLocked(true);
}
});
types = schemasManager.getSchemaTypes("zeCollection");
assertThat(types.getSchemaType("folder").isReadOnlyLocked()).isFalse();
assertThat(types.getSchemaType("rule").isReadOnlyLocked()).isTrue();
}
@Test
public void givenNewSchemaTypesThenSchemaHasCommonMetadatas()
throws Exception {
MetadataSchema aSchema = createTwoSchemas().getSchemaType(Folder.SCHEMA_TYPE).getDefaultSchema();
Metadata idMetadata = aSchema.getMetadata("id");
assertThat(idMetadata.isUndeletable()).isTrue();
assertThat(idMetadata.isSystemReserved()).isTrue();
assertThat(idMetadata.isUnmodifiable()).isTrue();
assertThat(idMetadata.isMultivalue()).isFalse();
assertThat(idMetadata.isSortable()).isTrue();
assertThat(idMetadata.isSearchable()).isTrue();
assertThat(idMetadata.getDataEntry().getType()).isSameAs(DataEntryType.MANUAL);
assertThat(idMetadata.getType()).isSameAs(STRING);
assertThat(idMetadata.getLocalCode()).isEqualTo("id");
assertThat(idMetadata.getCode()).isEqualTo("folder_default_id");
assertThat(idMetadata.isEnabled()).isTrue();
assertThat(idMetadata.isDefaultRequirement()).isTrue();
assertThat(idMetadata.getDataStoreCode()).isEqualTo("id");
Metadata schemaMetadata = aSchema.getMetadata("schema");
assertThat(schemaMetadata.isUndeletable()).isTrue();
assertThat(schemaMetadata.isSystemReserved()).isTrue();
assertThat(schemaMetadata.isUnmodifiable()).isFalse();
assertThat(schemaMetadata.isMultivalue()).isFalse();
assertThat(schemaMetadata.isSortable()).isFalse();
assertThat(schemaMetadata.isSearchable()).isFalse();
assertThat(schemaMetadata.getDataEntry().getType()).isSameAs(DataEntryType.MANUAL);
assertThat(schemaMetadata.getType()).isSameAs(STRING);
assertThat(schemaMetadata.getLocalCode()).isEqualTo("schema");
assertThat(schemaMetadata.getCode()).isEqualTo("folder_default_schema");
assertThat(schemaMetadata.isEnabled()).isTrue();
assertThat(schemaMetadata.isDefaultRequirement()).isTrue();
assertThat(schemaMetadata.getDataStoreCode()).isEqualTo("schema_s");
Metadata titleMetadata = aSchema.getMetadata("title");
assertThat(titleMetadata.isUndeletable()).isTrue();
assertThat(titleMetadata.isSystemReserved()).isFalse();
assertThat(titleMetadata.isUnmodifiable()).isFalse();
assertThat(titleMetadata.isMultivalue()).isFalse();
assertThat(titleMetadata.isSortable()).isFalse();
assertThat(titleMetadata.isSearchable()).isTrue();
assertThat(titleMetadata.getDataEntry().getType()).isSameAs(DataEntryType.MANUAL);
assertThat(titleMetadata.getType()).isSameAs(STRING);
assertThat(titleMetadata.getLocalCode()).isEqualTo("title");
assertThat(titleMetadata.getCode()).isEqualTo("folder_default_title");
assertThat(titleMetadata.isEnabled()).isTrue();
assertThat(titleMetadata.isDefaultRequirement()).isFalse();
assertThat(titleMetadata.getDataStoreCode()).isEqualTo("title_s");
}
@Test
public void givenSchemaTypeHasRecordsWhenDeletingThenException()
throws Exception {
defineSchemasManager().using(defaultSchema.withAStringMetadata());
getModelLayerFactory().newRecordServices().add(new TestRecord(anotherSchema, "2").set(TITLE, "2"));
try {
schemasManager.deleteSchemaTypes(asList(zeSchema.type(), anotherSchema.type()));
fail("exception expected");
} catch (CannotDeleteSchemaTypeSinceItHasRecords e) {
//OK
}
MetadataSchemaTypes types = schemasManager.getSchemaTypes(zeCollection);
assertThat(types.hasType(zeSchema.typeCode())).isTrue();
assertThat(types.hasType(anotherSchema.typeCode())).isTrue();
}
@Test
public void givenSchemaTypesHasNoRecordsWhenDeletingSchemaTypesThenDeleted()
throws Exception {
defineSchemasManager().using(defaultSchema.withAStringMetadata());
schemasManager.deleteSchemaTypes(asList(zeSchema.type(), anotherSchema.type()));
MetadataSchemaTypes types = schemasManager.getSchemaTypes(zeCollection);
assertThat(types.hasType(zeSchema.typeCode())).isFalse();
assertThat(types.hasType(anotherSchema.typeCode())).isFalse();
}
@Test
public void givenCustomSchemaHasNoRecordsWhenDeletingSchemaThenDeleted()
throws Exception {
defineSchemasManager().using(defaultSchema.andCustomSchema());
schemasManager.deleteCustomSchemas(asList(zeCustomSchema.instance()));
MetadataSchemaType type = schemasManager.getSchemaTypes(zeCollection).getSchemaType(zeSchema.typeCode());
assertThat(type.getCustomSchemas()).doesNotContain(zeCustomSchema.instance());
}
@Test
public void givenACustomSchemaWithAMetadataWhenCreatingAMetadataWithSameCodeAndTypeThenCorrectlyCreated()
throws Exception {
defineSchemasManager()
.using(defaultSchema.andCustomSchema().withAStringMetadataInCustomSchema(whichHasLabel("zeUltimateCustom")));
assertThat(zeSchema.instance().hasMetadataWithCode("customString")).isFalse();
assertThat(zeCustomSchema.instance().hasMetadataWithCode("customString")).isTrue();
assertThat(zeCustomSchema.instance().get("customString").getType()).isEqualTo(MetadataValueType.STRING);
schemas.modify(new MetadataSchemaTypesAlteration() {
@Override
public void alter(MetadataSchemaTypesBuilder types) {
types.getSchema(zeSchema.code()).create("customString").setType(MetadataValueType.STRING)
.addLabel(Language.French, "zeUltimate");
}
});
assertThat(zeSchema.instance().hasMetadataWithCode("customString")).isTrue();
assertThat(zeSchema.instance().get("customString").getType()).isEqualTo(MetadataValueType.STRING);
assertThat(zeSchema.instance().get("customString").getLabel(Language.French)).isEqualTo("zeUltimate");
assertThat(zeCustomSchema.instance().hasMetadataWithCode("customString")).isTrue();
assertThat(zeCustomSchema.instance().get("customString").getType()).isEqualTo(MetadataValueType.STRING);
assertThat(zeCustomSchema.instance().get("customString").getInheritance())
.isEqualTo(zeSchema.instance().get("customString"));
}
@Test
public void whenSavingSchemaTypesThenPersistPropertiesOfGlobalMetadatas()
throws Exception {
defineSchemasManager().using(schemas);
schemas.modify(new MetadataSchemaTypesAlteration() {
@Override
public void alter(MetadataSchemaTypesBuilder types) {
MetadataSchemaBuilder zeSchemaType = types.getSchemaType(ZE_SCHEMA_TYPE_CODE).getDefaultSchema();
MetadataSchemaBuilder anotherSchema = types.getSchemaType(ANOTHER_SCHEMA_TYPE_CODE).getDefaultSchema();
zeSchemaType.get(TITLE.getCode()).addLabel(Language.French, "ze title label").setSortable(true)
.setEssentialInSummary(true).setEssential(true).setDefaultRequirement(true).setDefaultValue("toto")
.setEnabled(true).setSchemaAutocomplete(true).setSearchable(true).setSystemReserved(true)
.setUniqueValue(true).setUnmodifiable(true);
anotherSchema.get(TITLE.getCode()).addLabel(Language.French, "another title label").setSortable(false)
.setEssentialInSummary(false).setEssential(false).setDefaultRequirement(false).setDefaultValue("tata")
.setEnabled(false).setSchemaAutocomplete(false).setSearchable(false).setSystemReserved(false)
.setUniqueValue(false).setUnmodifiable(false);
}
});
Metadata zeSchemaLabel = schemas.getTypes().getDefaultSchema(ZE_SCHEMA_TYPE_CODE).get(TITLE.getCode());
assertThat(zeSchemaLabel.getLabel(Language.French)).isEqualTo("ze title label");
assertThat(zeSchemaLabel.isSortable()).isTrue();
assertThat(zeSchemaLabel.isEssentialInSummary()).isTrue();
assertThat(zeSchemaLabel.isEssential()).isTrue();
assertThat(zeSchemaLabel.isDefaultRequirement()).isTrue();
assertThat(zeSchemaLabel.getDefaultValue()).isEqualTo("toto");
assertThat(zeSchemaLabel.isEnabled()).isTrue();
assertThat(zeSchemaLabel.isSchemaAutocomplete()).isTrue();
assertThat(zeSchemaLabel.isSearchable()).isTrue();
assertThat(zeSchemaLabel.isSystemReserved()).isTrue();
assertThat(zeSchemaLabel.isUniqueValue()).isTrue();
assertThat(zeSchemaLabel.isUnmodifiable()).isTrue();
Metadata anotherSchemaLabel = schemas.getTypes().getDefaultSchema(ANOTHER_SCHEMA_TYPE_CODE).get(TITLE.getCode());
assertThat(anotherSchemaLabel.getLabel(Language.French)).isEqualTo("another title label");
assertThat(anotherSchemaLabel.isSortable()).isFalse();
assertThat(anotherSchemaLabel.isEssentialInSummary()).isFalse();
assertThat(anotherSchemaLabel.isEssential()).isFalse();
assertThat(anotherSchemaLabel.isDefaultRequirement()).isFalse();
assertThat(anotherSchemaLabel.getDefaultValue()).isEqualTo("tata");
assertThat(anotherSchemaLabel.isEnabled()).isFalse();
assertThat(anotherSchemaLabel.isSchemaAutocomplete()).isFalse();
assertThat(anotherSchemaLabel.isSearchable()).isFalse();
assertThat(anotherSchemaLabel.isSystemReserved()).isFalse();
assertThat(anotherSchemaLabel.isUniqueValue()).isFalse();
assertThat(anotherSchemaLabel.isUnmodifiable()).isFalse();
}
@Test
public void givenStringMetadataWithInputMaskThenValueSaved()
throws Exception {
defineSchemasManager().using(schemas.andCustomSchema().withAStringMetadata(whichHasInputMask("(###) ###-####")));
assertThat(zeSchema.stringMetadata().getInputMask()).isEqualTo("(###) ###-####");
assertThat(zeCustomSchema.stringMetadata().getInputMask()).isEqualTo("(###) ###-####");
schemas.modify(new MetadataSchemaTypesAlteration() {
@Override
public void alter(MetadataSchemaTypesBuilder types) {
types.getMetadata(zeSchema.stringMetadata().getCode()).setInputMask("###.###.####");
}
});
assertThat(zeSchema.stringMetadata().getInputMask()).isEqualTo("###.###.####");
assertThat(zeCustomSchema.stringMetadata().getInputMask()).isEqualTo("###.###.####");
schemas.modify(new MetadataSchemaTypesAlteration() {
@Override
public void alter(MetadataSchemaTypesBuilder types) {
types.getSchema(zeCustomSchema.code()).get(zeSchema.stringMetadata().getLocalCode())
.setInputMask("(###) ### ####");
}
});
assertThat(zeSchema.stringMetadata().getInputMask()).isEqualTo("###.###.####");
assertThat(zeCustomSchema.stringMetadata().getInputMask()).isEqualTo("(###) ### ####");
}
@Test
public void givenStringMetadataWithDefaultValueThenValueSaved()
throws Exception {
defineSchemasManager().using(schemas.andCustomSchema().withAStringMetadata(whichHasDefaultValue("value1")));
assertThat(zeSchema.stringMetadata().getDefaultValue()).isEqualTo("value1");
assertThat(zeCustomSchema.stringMetadata().getDefaultValue()).isEqualTo("value1");
schemas.modify(new MetadataSchemaTypesAlteration() {
@Override
public void alter(MetadataSchemaTypesBuilder types) {
types.getMetadata(zeSchema.stringMetadata().getCode()).setDefaultValue("value2");
}
});
assertThat(zeSchema.stringMetadata().getDefaultValue()).isEqualTo("value2");
assertThat(zeCustomSchema.stringMetadata().getDefaultValue()).isEqualTo("value2");
schemas.modify(new MetadataSchemaTypesAlteration() {
@Override
public void alter(MetadataSchemaTypesBuilder types) {
types.getSchema(zeCustomSchema.code()).get(zeSchema.stringMetadata().getLocalCode())
.setDefaultValue("value3");
}
});
assertThat(zeSchema.stringMetadata().getDefaultValue()).isEqualTo("value2");
assertThat(zeCustomSchema.stringMetadata().getDefaultValue()).isEqualTo("value3");
}
private MetadataSchemaTypes createTwoSchemas()
throws Exception {
MetadataSchemaTypesBuilder typesBuilder = modifySchemaTypesAddingTwoNewTypes();
assertThat(typesBuilder.getMetadata("folder_default_rule").getInheritance()).isNull();
assertThat(typesBuilder.getMetadata("folder_default_rule").isMultivalue()).isFalse();
assertThat(typesBuilder.getMetadata("folder_default_path").isMultivalue()).isTrue();
assertThat(typesBuilder.getMetadata("folder_employee_path").isMultivalue()).isTrue();
MetadataSchemaTypes types = saveAndLoadSavedSchemaTypes(typesBuilder);
assertThat(types.getMetadata("folder_default_rule").inheritDefaultSchema()).isFalse();
assertThat(types.getMetadata("folder_default_rule").isMultivalue()).isFalse();
return types;
}
private MetadataSchemaTypes modifyDefaultMetadata(MetadataSchemaTypes types)
throws MetadataSchemasManagerException {
MetadataSchemaTypesBuilder typesBuilder = MetadataSchemaTypesBuilder.modify(types, new DefaultClassProvider());
MetadataBuilder rule = typesBuilder.getMetadata("folder_default_rule");
rule.setEnabled(false).addLabel(Language.French, "Ze Rule").setDefaultRequirement(true);
// rule.defineReferences().add(types.getDefaultSchema("rule"));
types = saveAndLoadSavedSchemaTypes(typesBuilder);
return types;
}
private MetadataSchemaTypesBuilder modifySchemaTypesAddingTwoNewTypes()
throws Exception {
MetadataSchemaTypes types = schemasManager.getSchemaTypes("zeCollection");
MetadataSchemaTypesBuilder typesBuilder = MetadataSchemaTypesBuilder.modify(types, new DefaultClassProvider());
MetadataSchemaTypeBuilder folderType = addFolderSchemaTypeBuilderWithoutRuleMetadatas(typesBuilder);
MetadataSchemaTypeBuilder ruleType = addRuleSchemaTypeBuilder(typesBuilder);
MetadataBuilder rule = folderType.getDefaultSchema().create("rule").addLabel(Language.French, "Rule").setType(REFERENCE)
.setMultivalue(false);
rule.defineReferences().set(ruleType);
folderType.getDefaultSchema().create("ruleCode").addLabel(Language.French, "Rule code").setType(STRING).defineDataEntry()
.asCopied(rule, ruleType.getDefaultSchema().getMetadata("code"));
return typesBuilder;
}
private MetadataSchemaTypeBuilder addFolderSchemaTypeBuilderWithoutRuleMetadatas(MetadataSchemaTypesBuilder types)
throws Exception {
MetadataSchemaTypeBuilder folderBuilder = types.createNewSchemaType("folder").addLabel(Language.French, "Folder")
.setSecurity(true);
folderBuilder.getDefaultSchema().create("zetitle").setType(STRING).addLabel(Language.French, "Title").setUndeletable(true)
.setUnmodifiable(true);
folderBuilder.createCustomSchema("employee").create("employeeName").setType(STRING)
.addLabel(Language.French, "Name of employee")
.setUndeletable(true).setSystemReserved(true).setMultivalue(false).setUniqueValue(true);
return folderBuilder;
}
private MetadataSchemaTypeBuilder addRuleSchemaTypeBuilder(MetadataSchemaTypesBuilder types) {
MetadataSchemaTypeBuilder ruleBuilder = types.createNewSchemaType("rule").addLabel(Language.French, "Rule")
.setSecurity(false);
ruleBuilder.getDefaultSchema().create("zetitle").setType(STRING).addLabel(Language.French, "Title").setUndeletable(true);
ruleBuilder.getDefaultSchema().create("code").setType(STRING).addLabel(Language.French, "Code").setUndeletable(true);
return ruleBuilder;
}
private MetadataSchemaTypes saveAndLoadSavedSchemaTypes(MetadataSchemaTypesBuilder typesBuilder)
throws MetadataSchemasManagerException {
schemasManager.saveUpdateSchemaTypes(typesBuilder);
MetadataSchemaTypes newTypes = schemasManager.getSchemaTypes("zeCollection");
return newTypes;
}
public static class TestInitializedMetadataValueCalculator implements InitializedMetadataValueCalculator<String> {
int initializationCounter1 = 0;
int initializationCounter2 = 0;
MetadataSchemaTypes types;
MetadataSchema schema;
LocalDependency<String> titleParam = LocalDependency.toAString("title");
@Override
public String calculate(CalculatorParameters parameters) {
return parameters.get(titleParam);
}
@Override
public String getDefaultValue() {
return null;
}
@Override
public MetadataValueType getReturnType() {
return MetadataValueType.STRING;
}
@Override
public boolean isMultiValue() {
return false;
}
@Override
public List<? extends Dependency> getDependencies() {
return Arrays.asList(titleParam);
}
@Override
public void initialize(List<Metadata> schemaMetadatas, Metadata calculatedMetadata) {
initializationCounter1++;
}
@Override
public void initialize(MetadataSchemaTypes types, MetadataSchema schema, Metadata metadata) {
initializationCounter2++;
}
}
public static class TestParametrizedMetadataValueCalculator implements Parametrized, MetadataValueCalculator<String> {
String parameter1;
int parameter2;
LocalDependency<String> titleParam = LocalDependency.toAString("title");
public TestParametrizedMetadataValueCalculator(String parameter1, Integer parameter2) {
this.parameter1 = parameter1;
this.parameter2 = parameter2;
}
@Override
public String calculate(CalculatorParameters parameters) {
return parameter1 + ":" + parameter2 + parameters.get(titleParam);
}
@Override
public String getDefaultValue() {
return null;
}
@Override
public MetadataValueType getReturnType() {
return MetadataValueType.STRING;
}
@Override
public boolean isMultiValue() {
return false;
}
@Override
public List<? extends Dependency> getDependencies() {
return Arrays.asList(titleParam);
}
@Override
public Object[] getInstanceParameters() {
return new Object[] { parameter1, parameter2 };
}
}
}