package com.constellio.model.services.schemas.builders;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.groups.Tuple.tuple;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
import org.junit.Before;
import org.junit.Test;
import com.constellio.model.entities.schemas.MetadataPopulateConfigs;
import com.constellio.model.entities.schemas.RegexConfig;
import com.constellio.model.entities.schemas.RegexConfig.RegexConfigType;
import com.constellio.sdk.tests.ConstellioTest;
public class MetadataPopulatedConfigsBuilderTest extends ConstellioTest {
MetadataPopulateConfigsBuilder populateConfigsBuilder;
MetadataPopulateConfigs populateConfigs;
List<String> styles = new ArrayList<>();
List<String> properties = new ArrayList<>();
List<RegexConfig> regexes = new ArrayList<>();
@Before
public void setUp()
throws Exception {
configureStylesList();
configurePropertiesList();
configureRegexList();
populateConfigsBuilder = MetadataPopulateConfigsBuilder.create();
}
@Test
public void whenBuildThenConfigsAreNotNull()
throws Exception {
populateConfigs = populateConfigsBuilder.build();
assertThat(populateConfigsBuilder.getStyles()).isNotNull().isEmpty();
assertThat(populateConfigsBuilder.getProperties()).isNotNull().isEmpty();
assertThat(populateConfigsBuilder.getRegexes()).isNotNull().isEmpty();
assertThat(populateConfigs.getStyles()).isNotNull().isEmpty();
assertThat(populateConfigs.getProperties()).isNotNull().isEmpty();
assertThat(populateConfigs.getRegexes()).isNotNull().isEmpty();
}
@Test
public void givenAEmptyMetadataPopulatedConfigsWhenBuildWithPopulateConfigThenConfigsAreNotNull()
throws Exception {
populateConfigs = new MetadataPopulateConfigs();
populateConfigsBuilder = MetadataPopulateConfigsBuilder.modify(populateConfigs);
MetadataPopulateConfigs newMetadataPopulateConfigs = populateConfigsBuilder.build();
assertThat(populateConfigsBuilder.getStyles()).isNotNull().isEmpty();
assertThat(populateConfigsBuilder.getProperties()).isNotNull().isEmpty();
assertThat(populateConfigsBuilder.getRegexes()).isNotNull().isEmpty();
assertThat(newMetadataPopulateConfigs.getStyles()).isNotNull().isEmpty();
assertThat(newMetadataPopulateConfigs.getProperties()).isNotNull().isEmpty();
assertThat(newMetadataPopulateConfigs.getRegexes()).isNotNull().isEmpty();
}
@Test
public void whenSettingStylesThenStylesSetted() {
populateConfigsBuilder.setStyles(styles);
populateConfigs = populateConfigsBuilder.build();
assertThat(populateConfigsBuilder.getStyles()).isEqualTo(styles);
assertThat(populateConfigsBuilder.getProperties()).isNotNull().isEmpty();
assertThat(populateConfigsBuilder.getRegexes()).isNotNull().isEmpty();
assertThat(populateConfigs.getStyles()).isEqualTo(styles);
assertThat(populateConfigs.getProperties()).isNotNull().isEmpty();
assertThat(populateConfigs.getRegexes()).isNotNull().isEmpty();
}
@Test
public void whenSettingPropertiesThenPropertiesSetted() {
populateConfigsBuilder.setProperties(properties);
populateConfigs = populateConfigsBuilder.build();
assertThat(populateConfigsBuilder.getStyles()).isNotNull().isEmpty();
assertThat(populateConfigsBuilder.getProperties()).isEqualTo(properties);
assertThat(populateConfigsBuilder.getRegexes()).isNotNull().isEmpty();
assertThat(populateConfigs.getStyles()).isNotNull().isEmpty();
assertThat(populateConfigs.getProperties()).isEqualTo(properties);
assertThat(populateConfigs.getRegexes()).isNotNull().isEmpty();
}
@Test
public void whenSettingRegexesThenRegexesSetted() {
populateConfigsBuilder.setRegexes(regexes);
populateConfigs = populateConfigsBuilder.build();
assertThat(populateConfigsBuilder.getStyles()).isNotNull().isEmpty();
assertThat(populateConfigsBuilder.getProperties()).isNotNull().isEmpty();
assertThat(populateConfigsBuilder.getRegexes()).isEqualTo(regexes);
assertThat(populateConfigs.getStyles()).isNotNull().isEmpty();
assertThat(populateConfigs.getProperties()).isNotNull().isEmpty();
assertThat(populateConfigs.getRegexes()).isEqualTo(regexes);
}
@Test
public void whenAddStyleThenStyleAdded() {
populateConfigsBuilder.addStyle("style5");
populateConfigs = populateConfigsBuilder.build();
assertThat(populateConfigsBuilder.getStyles()).containsOnly("style5");
assertThat(populateConfigsBuilder.getProperties()).isNotNull().isEmpty();
assertThat(populateConfigsBuilder.getRegexes()).isNotNull().isEmpty();
assertThat(populateConfigs.getStyles()).containsOnly("style5");
assertThat(populateConfigs.getProperties()).isNotNull().isEmpty();
assertThat(populateConfigs.getRegexes()).isNotNull().isEmpty();
}
@Test
public void whenAddPropertyThenPropertyAdded() {
populateConfigsBuilder.addProperty("property5");
populateConfigs = populateConfigsBuilder.build();
assertThat(populateConfigsBuilder.getStyles()).isNotNull().isEmpty();
assertThat(populateConfigsBuilder.getProperties()).containsOnly("property5");
assertThat(populateConfigsBuilder.getRegexes()).isNotNull().isEmpty();
assertThat(populateConfigs.getStyles()).isNotNull().isEmpty();
assertThat(populateConfigs.getProperties()).containsOnly("property5");
assertThat(populateConfigs.getRegexes()).isNotNull().isEmpty();
}
@Test
public void whenAddRegexThenRegexAdded() {
populateConfigsBuilder.addRegex(createRegexConfig(5));
populateConfigs = populateConfigsBuilder.build();
assertThat(populateConfigsBuilder.getStyles()).isNotNull().isEmpty();
assertThat(populateConfigsBuilder.getProperties()).isNotNull().isEmpty();
assertThat(populateConfigsBuilder.getRegexes()).extracting("inputMetadata", "regex.pattern", "value")
.containsOnly(tuple("inputMetadata5", "regex5", "value5"));
assertThat(populateConfigs.getStyles()).isNotNull().isEmpty();
assertThat(populateConfigs.getProperties()).isNotNull().isEmpty();
assertThat(populateConfigs.getRegexes()).extracting("inputMetadata", "regex.pattern", "value")
.containsOnly(tuple("inputMetadata5", "regex5", "value5"));
}
@Test
public void whenAddSameStyleThenDoNotAdd() {
populateConfigsBuilder.addStyle("style5");
populateConfigsBuilder.addStyle("style5");
populateConfigs = populateConfigsBuilder.build();
assertThat(populateConfigsBuilder.getStyles()).containsOnlyOnce("style5");
assertThat(populateConfigsBuilder.getProperties()).isNotNull().isEmpty();
assertThat(populateConfigsBuilder.getRegexes()).isNotNull().isEmpty();
assertThat(populateConfigs.getStyles()).containsOnlyOnce("style5");
assertThat(populateConfigs.getProperties()).isNotNull().isEmpty();
assertThat(populateConfigs.getRegexes()).isNotNull().isEmpty();
}
@Test
public void whenAddSamePropertyThenDoNotAdd() {
populateConfigsBuilder.addProperty("property5");
populateConfigsBuilder.addProperty("property5");
populateConfigs = populateConfigsBuilder.build();
assertThat(populateConfigsBuilder.getStyles()).isNotNull().isEmpty();
assertThat(populateConfigsBuilder.getProperties()).containsOnlyOnce("property5");
assertThat(populateConfigs.getStyles()).isNotNull().isEmpty();
assertThat(populateConfigs.getProperties()).containsOnlyOnce("property5");
}
@Test
public void givenStylesWhenRemoveStyleThenOk() {
populateConfigsBuilder.setStyles(styles);
populateConfigsBuilder.removeStyle("style1");
populateConfigs = populateConfigsBuilder.build();
assertThat(populateConfigsBuilder.getStyles()).containsOnly("style2", "style3", "style4");
assertThat(populateConfigsBuilder.getProperties()).isNotNull().isEmpty();
assertThat(populateConfigs.getStyles()).containsOnly("style2", "style3", "style4");
assertThat(populateConfigs.getProperties()).isNotNull().isEmpty();
}
@Test
public void givenPropertyWhenRemovePropertyThenOk() {
populateConfigsBuilder.setProperties(properties);
populateConfigsBuilder.removeProperty("property1");
populateConfigs = populateConfigsBuilder.build();
assertThat(populateConfigsBuilder.getStyles()).isNotNull().isEmpty();
assertThat(populateConfigsBuilder.getProperties()).containsOnly("property2", "property3", "property4");
assertThat(populateConfigs.getStyles()).isNotNull().isEmpty();
assertThat(populateConfigs.getProperties()).containsOnly("property2", "property3", "property4");
}
@Test
public void whenSettingStylesWithDuplicatesThenStylesSettedWithoutDuplicates() {
List<String> stylesWithDuplicates = new ArrayList<>();
stylesWithDuplicates.addAll(styles);
stylesWithDuplicates.add(styles.get(3));
populateConfigsBuilder.setStyles(stylesWithDuplicates);
populateConfigs = populateConfigsBuilder.build();
assertThat(populateConfigsBuilder.getStyles())
.containsOnlyOnce(styles.get(0), styles.get(1), styles.get(2), styles.get(3));
assertThat(populateConfigsBuilder.getProperties()).isNotNull().isEmpty();
assertThat(populateConfigs.getStyles()).containsOnlyOnce(styles.get(0), styles.get(1), styles.get(2),
styles.get(3));
assertThat(populateConfigs.getProperties()).isNotNull().isEmpty();
}
@Test
public void whenSettingPropertiesWithDuplicatesThenPropertiesSettedWithoutDuplicates() {
List<String> propertiesWithDuplicates = new ArrayList<>();
propertiesWithDuplicates.addAll(properties);
propertiesWithDuplicates.add(properties.get(3));
populateConfigsBuilder.setProperties(propertiesWithDuplicates);
populateConfigs = populateConfigsBuilder.build();
assertThat(populateConfigsBuilder.getStyles()).isNotNull().isEmpty();
assertThat(populateConfigsBuilder.getProperties())
.containsOnlyOnce(properties.get(0), properties.get(1), properties.get(2), properties.get(3));
assertThat(populateConfigs.getStyles()).isNotNull().isEmpty();
assertThat(populateConfigs.getProperties())
.containsOnlyOnce(properties.get(0), properties.get(1), properties.get(2), properties.get(3));
}
//
private void configurePropertiesList() {
properties.add("property1");
properties.add("property2");
properties.add("property3");
properties.add("property4");
}
private void configureStylesList() {
styles.add("style1");
styles.add("style2");
styles.add("style3");
styles.add("style4");
}
private void configureRegexList() {
regexes.add(createRegexConfig(1));
regexes.add(createRegexConfig(2));
regexes.add(createRegexConfig(3));
regexes.add(createRegexConfig(4));
}
private RegexConfig createRegexConfig(int i) {
Pattern regex = Pattern.compile("regex" + i);
return new RegexConfig("inputMetadata" + i, regex, "value" + i, RegexConfigType.SUBSTITUTION);
}
}