package com.constellio.model.services.schemas.builders; import static com.constellio.model.entities.schemas.MetadataValueType.STRING; import static com.constellio.sdk.tests.TestUtils.getElementsClasses; import static org.assertj.core.api.Assertions.assertThat; import org.junit.Test; import com.constellio.model.services.schemas.testimpl.TestRecordMetadataValidator1; import com.constellio.model.services.schemas.testimpl.TestRecordMetadataValidator2; public class MetadataBuilder_ValidatorsTest extends MetadataBuilderTest { @Test public void givenRecordMetadataValidatorsDefinedInMetadataAndInheritanceWhenBuildingThenMetadataWithInheritanceHasAll() throws Exception { inheritedMetadataBuilder.setType(STRING).defineValidators().add(TestRecordMetadataValidator1.class); metadataWithInheritanceBuilder.defineValidators().add(TestRecordMetadataValidator2.class); build(); assertThat(getElementsClasses(inheritedMetadata.getValidators())).containsOnly(TestRecordMetadataValidator1.class); assertThat(getElementsClasses(metadataWithInheritance.getValidators())).containsOnly(TestRecordMetadataValidator1.class, TestRecordMetadataValidator2.class); } @Test public void givenRecordMetadataValidatorsDefinedInMetadataAndInheritanceWhenModifyingThenMetadataWithInheritanceHasOnlyCustomValidators() throws Exception { inheritedMetadataBuilder.setType(STRING).defineValidators().add(TestRecordMetadataValidator1.class); metadataWithInheritanceBuilder.defineValidators().add(TestRecordMetadataValidator2.class); buildAndModify(); assertThat(inheritedMetadataBuilder.defineValidators().implementationsClassname).containsOnly( TestRecordMetadataValidator1.class.getName()); assertThat(metadataWithInheritanceBuilder.defineValidators().implementationsClassname).containsOnly( TestRecordMetadataValidator2.class.getName()); } @Test public void givenRecordMetadataValidatorsDefinedDuplicatelyInMetadataAndInheritanceWhenBuildingThenNoDuplicate() throws Exception { inheritedMetadataBuilder.setType(STRING).defineValidators().add(TestRecordMetadataValidator1.class); metadataWithInheritanceBuilder.defineValidators().add(TestRecordMetadataValidator1.class) .add(TestRecordMetadataValidator2.class); build(); assertThat(getElementsClasses(inheritedMetadata.getValidators())).containsOnly(TestRecordMetadataValidator1.class); assertThat(getElementsClasses(metadataWithInheritance.getValidators())).containsOnly(TestRecordMetadataValidator1.class, TestRecordMetadataValidator2.class); } @Test public void givenRecordMetadataValidatorsDefinedDuplicatelyInMetadataAndInheritanceWhenModifyingThenNoDuplicate() throws Exception { inheritedMetadataBuilder.setType(STRING).defineValidators().add(TestRecordMetadataValidator1.class); metadataWithInheritanceBuilder.defineValidators().add(TestRecordMetadataValidator1.class) .add(TestRecordMetadataValidator2.class); buildAndModify(); assertThat(inheritedMetadataBuilder.defineValidators().implementationsClassname).containsOnly( TestRecordMetadataValidator1.class.getName()); assertThat(metadataWithInheritanceBuilder.defineValidators().implementationsClassname).containsOnly( TestRecordMetadataValidator2.class.getName()); } }