package com.constellio.model.services.schemas.builders; import static com.constellio.model.entities.schemas.MetadataValueType.STRING; import static java.util.Arrays.asList; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.groups.Tuple.tuple; import java.util.regex.Pattern; import org.junit.Test; import com.constellio.model.entities.schemas.RegexConfig; import com.constellio.model.entities.schemas.RegexConfig.RegexConfigType; public class MetadataBuilder_MetadataPopulateConfigTest extends MetadataBuilderTest { @Test public void givenMetadataWithoutInheritanceBuilderWhenBuildThenPopuplatedConfigsNotnull() throws Exception { metadataWithoutInheritanceBuilder.setType(STRING); build(); assertThat(metadataWithoutInheritanceBuilder.getPopulateConfigsBuilder()).isNotNull(); assertThat(metadataWithoutInheritanceBuilder.getPopulateConfigsBuilder().getStyles()).isEmpty(); assertThat(metadataWithoutInheritanceBuilder.getPopulateConfigsBuilder().getProperties()).isEmpty(); assertThat(metadataWithoutInheritanceBuilder.getPopulateConfigsBuilder().getRegexes()).isEmpty(); } @Test public void givenPopulateConfigsDefinedInMetadataAndInheritanceWhenBuildingThenMetadataWithInheritanceIsDetached() throws Exception { MetadataPopulateConfigsBuilder metadataPopulateConfigsBuilder1 = createPopulateConfigsBuilder(1); MetadataPopulateConfigsBuilder metadataPopulateConfigsBuilder2 = createPopulateConfigsBuilder(2); inheritedMetadataBuilder.setType(STRING).definePopulateConfigsBuilder(metadataPopulateConfigsBuilder1); metadataWithInheritanceBuilder.definePopulateConfigsBuilder(metadataPopulateConfigsBuilder2); build(); assertThat(inheritedMetadataBuilder.getPopulateConfigsBuilder().getStyles()).containsOnly("style1"); assertThat(inheritedMetadataBuilder.getPopulateConfigsBuilder().getProperties()).containsOnly("property1"); assertThat(inheritedMetadataBuilder.getPopulateConfigsBuilder().getRegexes()) .extracting("inputMetadata", "regex.pattern", "value") .containsOnly(tuple("inputMetadata1", "regex1", "value1")); assertThat(metadataWithInheritanceBuilder.getPopulateConfigsBuilder().getStyles()).containsOnly("style2"); assertThat(metadataWithInheritanceBuilder.getPopulateConfigsBuilder().getProperties()).containsOnly("property2"); assertThat(metadataWithInheritanceBuilder.getPopulateConfigsBuilder().getRegexes()) .extracting("inputMetadata", "regex.pattern", "value") .containsOnly(tuple("inputMetadata2", "regex2", "value2")); } @Test public void givenPopulateConfigsDefinedInMetadataAndInheritanceWhenBuildingThenMetadataWithInheritanceHasSame() throws Exception { MetadataPopulateConfigsBuilder metadataPopulateConfigsBuilder1 = createPopulateConfigsBuilder(1); inheritedMetadataBuilder.setType(STRING).definePopulateConfigsBuilder(metadataPopulateConfigsBuilder1); build(); assertThat(inheritedMetadataBuilder.getPopulateConfigsBuilder().getStyles()).containsOnly("style1"); assertThat(inheritedMetadataBuilder.getPopulateConfigsBuilder().getProperties()).containsOnly("property1"); assertThat(inheritedMetadataBuilder.getPopulateConfigsBuilder().getRegexes()) .extracting("inputMetadata", "regex.pattern", "value") .containsOnly(tuple("inputMetadata1", "regex1", "value1")); assertThat(metadataWithInheritanceBuilder.getPopulateConfigsBuilder().getStyles()).containsOnly("style1"); assertThat(metadataWithInheritanceBuilder.getPopulateConfigsBuilder().getProperties()).containsOnly("property1"); assertThat(metadataWithInheritanceBuilder.getPopulateConfigsBuilder().getRegexes()) .extracting("inputMetadata", "regex.pattern", "value") .containsOnly(tuple("inputMetadata1", "regex1", "value1")); } @Test public void givenPopulateConfigsDefinedInMetadataAndInheritanceWhenModifyingThenMetadataWithInheritanceHasOnlyCustomPopulateConfigs() throws Exception { MetadataPopulateConfigsBuilder metadataPopulateConfigsBuilder1 = createPopulateConfigsBuilder(1); MetadataPopulateConfigsBuilder metadataPopulateConfigsBuilder2 = MetadataPopulateConfigsBuilder.modify( metadataPopulateConfigsBuilder1); inheritedMetadataBuilder.setType(STRING).definePopulateConfigsBuilder(metadataPopulateConfigsBuilder1); metadataWithInheritanceBuilder.definePopulateConfigsBuilder(metadataPopulateConfigsBuilder2).addProperty("property3") .addStyle("style3").addRegex(createRegexConfig(3)); buildAndModify(); assertThat(inheritedMetadataBuilder.getPopulateConfigsBuilder().getStyles()).containsOnly("style1"); assertThat(inheritedMetadataBuilder.getPopulateConfigsBuilder().getProperties()).containsOnly("property1"); assertThat(inheritedMetadataBuilder.getPopulateConfigsBuilder().getRegexes()) .extracting("inputMetadata", "regex.pattern", "value") .containsOnly(tuple("inputMetadata1", "regex1", "value1")); assertThat(metadataWithInheritanceBuilder.getPopulateConfigsBuilder().getStyles()).containsOnly("style1", "style3"); assertThat(metadataWithInheritanceBuilder.getPopulateConfigsBuilder().getProperties()) .containsOnly("property1", "property3"); assertThat(metadataWithInheritanceBuilder.getPopulateConfigsBuilder().getRegexes()) .extracting("inputMetadata", "regex.pattern", "value") .containsOnly(tuple("inputMetadata1", "regex1", "value1"), tuple("inputMetadata3", "regex3", "value3")); } @Test public void givenPopulateConfigsDefinedDuplicatelyInMetadataAndInheritanceWhenBuildingThenNoDuplicate() throws Exception { MetadataPopulateConfigsBuilder metadataPopulateConfigsBuilder1 = createPopulateConfigsBuilder(1); MetadataPopulateConfigsBuilder metadataPopulateConfigsBuilder2 = MetadataPopulateConfigsBuilder.modify( metadataPopulateConfigsBuilder1); inheritedMetadataBuilder.setType(STRING).definePopulateConfigsBuilder(metadataPopulateConfigsBuilder1); metadataWithInheritanceBuilder.definePopulateConfigsBuilder(metadataPopulateConfigsBuilder2).addProperty("property1") .addStyle("style1"); build(); assertThat(inheritedMetadataBuilder.getPopulateConfigsBuilder().getStyles()).containsOnlyOnce("style1"); assertThat(inheritedMetadataBuilder.getPopulateConfigsBuilder().getProperties()).containsOnlyOnce("property1"); assertThat(inheritedMetadataBuilder.getPopulateConfigsBuilder().getRegexes()) .extracting("inputMetadata", "regex.pattern", "value") .containsOnly(tuple("inputMetadata1", "regex1", "value1")); assertThat(metadataWithInheritanceBuilder.getPopulateConfigsBuilder().getStyles()).containsOnlyOnce("style1"); assertThat(metadataWithInheritanceBuilder.getPopulateConfigsBuilder().getProperties()) .containsOnlyOnce("property1"); assertThat(metadataWithInheritanceBuilder.getPopulateConfigsBuilder().getRegexes()) .extracting("inputMetadata", "regex.pattern", "value") .containsOnly(tuple("inputMetadata1", "regex1", "value1")); } @Test public void givenPopulateConfigsDefinedDuplicatelyInMetadataAndInheritanceWhenModifyingThenNoDuplicate() throws Exception { MetadataPopulateConfigsBuilder metadataPopulateConfigsBuilder1 = createPopulateConfigsBuilder(1); MetadataPopulateConfigsBuilder metadataPopulateConfigsBuilder2 = MetadataPopulateConfigsBuilder.modify( metadataPopulateConfigsBuilder1); inheritedMetadataBuilder.setType(STRING).definePopulateConfigsBuilder(metadataPopulateConfigsBuilder1); metadataWithInheritanceBuilder.definePopulateConfigsBuilder(metadataPopulateConfigsBuilder2).addProperty("property1") .addStyle("style1"); buildAndModify(); assertThat(inheritedMetadataBuilder.getPopulateConfigsBuilder().getStyles()).containsOnlyOnce("style1"); assertThat(inheritedMetadataBuilder.getPopulateConfigsBuilder().getProperties()).containsOnlyOnce("property1"); assertThat(inheritedMetadataBuilder.getPopulateConfigsBuilder().getRegexes()) .extracting("inputMetadata", "regex.pattern", "value") .containsOnly(tuple("inputMetadata1", "regex1", "value1")); assertThat(metadataWithInheritanceBuilder.getPopulateConfigsBuilder().getStyles()).containsOnlyOnce("style1"); assertThat(metadataWithInheritanceBuilder.getPopulateConfigsBuilder().getProperties()) .containsOnlyOnce("property1"); assertThat(metadataWithInheritanceBuilder.getPopulateConfigsBuilder().getRegexes()) .extracting("inputMetadata", "regex.pattern", "value") .containsOnly(tuple("inputMetadata1", "regex1", "value1")); } // private MetadataPopulateConfigsBuilder createPopulateConfigsBuilder(int i) { MetadataPopulateConfigsBuilder metadataPopulateConfigsBuilder = MetadataPopulateConfigsBuilder.create(); metadataPopulateConfigsBuilder.setProperties(asList("property" + i)); metadataPopulateConfigsBuilder.setStyles(asList("style" + i)); metadataPopulateConfigsBuilder.setRegexes(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); } }