package com.constellio.model.services.taxonomies;
import static java.util.Arrays.asList;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import com.constellio.model.entities.Taxonomy;
import com.constellio.model.entities.records.Transaction;
import com.constellio.model.services.records.RecordServices;
import com.constellio.model.services.schemas.MetadataSchemasManager;
import com.constellio.model.services.search.SearchServiceAcceptanceTestSchemas;
import com.constellio.model.services.search.SearchServices;
import com.constellio.model.services.search.query.logical.condition.LogicalSearchCondition;
import com.constellio.model.services.taxonomies.TaxonomiesManagerRuntimeException.TaxonomySchemaTypesHaveRecords;
import com.constellio.sdk.tests.ConstellioTest;
public class TaxonomiesManagerAcceptanceTest extends ConstellioTest {
static String TAXONOMIES_CONFIG = "/taxonomies.xml";
MetadataSchemasManager schemasManager;
TaxonomiesManager taxonomiesManager;
TaxonomiesSearchServices taxonomiesSearchServices;
RecordServices recordServices;
SearchServices searchServices;
SearchServiceAcceptanceTestSchemas collection1Schema = new SearchServiceAcceptanceTestSchemas("collection1");
SearchServiceAcceptanceTestSchemas.ZeSchemaMetadatas collection1ZeSchema = collection1Schema.new ZeSchemaMetadatas();
SearchServiceAcceptanceTestSchemas.AnotherSchemaMetadatas collection1AnotherSchema = collection1Schema.new AnotherSchemaMetadatas();
SearchServiceAcceptanceTestSchemas collection2Schema = new SearchServiceAcceptanceTestSchemas("collection2");
SearchServiceAcceptanceTestSchemas.ZeSchemaMetadatas collection2ZeSchema = collection2Schema.new ZeSchemaMetadatas();
SearchServiceAcceptanceTestSchemas.AnotherSchemaMetadatas collection2AnotherSchema = collection2Schema.new AnotherSchemaMetadatas();
LogicalSearchCondition condition;
Transaction transaction;
@Before
public void setup()
throws Exception {
this.searchServices = getModelLayerFactory().newSearchServices();
this.recordServices = getModelLayerFactory().newRecordServices();
this.transaction = new Transaction();
this.schemasManager = getModelLayerFactory().getMetadataSchemasManager();
this.taxonomiesSearchServices = getModelLayerFactory().newTaxonomiesSearchService();
this.taxonomiesManager = getModelLayerFactory().getTaxonomiesManager();
givenCollection("collection1");
givenCollection("collection2");
defineSchemasManager().using(collection1Schema.withAStringMetadata());
defineSchemasManager().using(collection2Schema.withAMetadata());
}
@Test
public void givenSchemasInMultipleCollectionsThenAllIndependent()
throws Exception {
Taxonomy collection1Taxonomy = Taxonomy.createPublic("1", "1", "collection1", asList("zeSchemaType"));
Taxonomy collection2Taxonomy = Taxonomy.createPublic("2", "2", "collection2", asList("anotherSchemaType"));
taxonomiesManager.addTaxonomy(collection1Taxonomy, schemasManager);
taxonomiesManager.addTaxonomy(collection2Taxonomy, schemasManager);
assertThat(taxonomiesManager.getEnabledTaxonomies("collection1")).hasSize(1);
assertThat(taxonomiesManager.getEnabledTaxonomies("collection1").get(0).getCode()).isEqualTo("1");
assertThat(taxonomiesManager.getEnabledTaxonomies("collection2")).hasSize(1);
assertThat(taxonomiesManager.getEnabledTaxonomies("collection2").get(0).getCode()).isEqualTo("2");
}
@Test
public void givenXMLAlreadyExistingAndAuthorizationsThenManagerLoadThem()
throws Exception {
Taxonomy taxonomy1 = Taxonomy.createPublic("1", "1", "collection1", asList("zeSchemaType"));
Taxonomy taxonomy2 = Taxonomy.createPublic("2", "2", "collection1", asList("anotherSchemaType"));
taxonomiesManager.addTaxonomy(taxonomy1, schemasManager);
taxonomiesManager.addTaxonomy(taxonomy2, schemasManager);
TaxonomiesManager newTaxonomiesManager = this.taxonomiesManager = getModelLayerFactory().getTaxonomiesManager();
List<Taxonomy> enableTaxonomies = newTaxonomiesManager.getEnabledTaxonomies("collection1");
List<Taxonomy> disableTaxonomies = newTaxonomiesManager.getDisabledTaxonomies("collection1");
assertThat(enableTaxonomies.get(0).getCode()).isEqualTo(taxonomy1.getCode());
assertThat(enableTaxonomies.get(1).getCode()).isEqualTo(taxonomy2.getCode());
assertThat(disableTaxonomies).isEmpty();
}
@Test
public void whenNewTaxonomieThenItIsEmpty()
throws Exception {
List<Taxonomy> enableTaxonomies = taxonomiesManager.getEnabledTaxonomies("collection1");
List<Taxonomy> disableTaxonomies = taxonomiesManager.getDisabledTaxonomies("collection1");
assertThat(enableTaxonomies).isEmpty();
assertThat(disableTaxonomies).isEmpty();
}
@Test(expected = TaxonomySchemaTypesHaveRecords.class)
public void givenRecordUsingTypeInTaxonomyWhenAddTaxonomyThenException()
throws Exception {
givenRecord();
Taxonomy taxonomy1 = Taxonomy.createPublic("zeTaxo", "zeTaxo", "collection1", asList("zeSchemaType"));
taxonomiesManager.addTaxonomy(taxonomy1, schemasManager);
}
@Test
public void whenAddTaxonomiesThenCanReadIt()
throws Exception {
List<String> taxoUsers = asList("user1", "user2");
List<String> taxoGroups = asList("group1", "group2");
Taxonomy taxonomy1 = Taxonomy.createPublic("1", "1", "collection1", asList("zeSchemaType"));
Taxonomy taxonomy2 = new Taxonomy("2", "2", "collection1", false, taxoUsers, taxoGroups, asList("anotherSchemaType"),
true);
taxonomiesManager.addTaxonomy(taxonomy1, schemasManager);
taxonomiesManager.addTaxonomy(taxonomy2, schemasManager);
List<Taxonomy> enableTaxonomies = taxonomiesManager.getEnabledTaxonomies("collection1");
List<Taxonomy> disableTaxonomies = taxonomiesManager.getDisabledTaxonomies("collection1");
assertThat(enableTaxonomies.get(0).getCode()).isEqualTo(taxonomy1.getCode());
assertThat(enableTaxonomies.get(0).isVisibleInHomePage()).isTrue();
assertThat(enableTaxonomies.get(0).getUserIds()).isEmpty();
assertThat(enableTaxonomies.get(0).getGroupIds()).isEmpty();
assertThat(enableTaxonomies.get(0).isShowParentsInSearchResults()).isFalse();
assertThat(enableTaxonomies.get(1).getCode()).isEqualTo(taxonomy2.getCode());
assertThat(enableTaxonomies.get(1).isVisibleInHomePage()).isFalse();
assertThat(enableTaxonomies.get(1).getUserIds()).isEqualTo(taxoUsers);
assertThat(enableTaxonomies.get(1).getGroupIds()).isEqualTo(taxoGroups);
assertThat(enableTaxonomies.get(1).isShowParentsInSearchResults()).isTrue();
assertThat(disableTaxonomies).isEmpty();
}
@Test(expected = TaxonomiesManagerRuntimeException.TaxonomyAlreadyExists.class)
public void whenAddTwoTaxonomiesWithSameCodeThenException()
throws Exception {
Taxonomy taxonomy1 = Taxonomy.createPublic("1", "1", "collection1", asList("zeSchemaType"));
Taxonomy taxonomy2 = Taxonomy.createPublic("1", "1", "collection1", asList("anotherSchemaType"));
taxonomiesManager.addTaxonomy(taxonomy1, schemasManager);
taxonomiesManager.addTaxonomy(taxonomy2, schemasManager);
}
@Test(expected = TaxonomiesManagerRuntimeException.TaxonomyAlreadyExists.class)
public void whenAddTwoTaxonomiesWithSameSchemaTypeThenException()
throws Exception {
Taxonomy taxonomy1 = Taxonomy.createPublic("1", "1", "collection1", asList("zeSchemaType"));
Taxonomy taxonomy2 = Taxonomy.createPublic("2", "2", "collection1", asList("zeSchemaType"));
taxonomiesManager.addTaxonomy(taxonomy1, schemasManager);
taxonomiesManager.addTaxonomy(taxonomy2, schemasManager);
}
@Test
public void whenDisableTaxonomyThenItIsDisable()
throws Exception {
Taxonomy taxonomy = Taxonomy.createPublic("1", "1", "collection1", asList("zeSchemaType"));
taxonomiesManager.addTaxonomy(taxonomy, schemasManager);
taxonomiesManager.disable(taxonomy, schemasManager);
List<Taxonomy> enableTaxonomies = taxonomiesManager.getEnabledTaxonomies("collection1");
List<Taxonomy> disableTaxonomies = taxonomiesManager.getDisabledTaxonomies("collection1");
assertThat(disableTaxonomies.get(0).getCode()).isEqualTo(taxonomy.getCode());
assertThat(enableTaxonomies).isEmpty();
}
@Test(expected = TaxonomySchemaTypesHaveRecords.class)
public void givenRecordUsingTypeInTaxonomyWhenDisableTaxonomyThenException()
throws Exception {
Taxonomy taxonomy = Taxonomy.createPublic("1", "1", "collection1", asList("zeSchemaType"));
taxonomiesManager.addTaxonomy(taxonomy, schemasManager);
givenRecord();
taxonomiesManager.disable(taxonomy, schemasManager);
}
@Test
public void whenDisableAnAlreadyDisableTaxonomyThenOk()
throws Exception {
Taxonomy taxonomy = Taxonomy.createPublic("1", "1", "collection1", asList("zeSchemaType"));
taxonomiesManager.addTaxonomy(taxonomy, schemasManager);
taxonomiesManager.disable(taxonomy, schemasManager);
taxonomiesManager.disable(taxonomy, schemasManager);
List<Taxonomy> enableTaxonomies = taxonomiesManager.getEnabledTaxonomies("collection1");
List<Taxonomy> disableTaxonomies = taxonomiesManager.getDisabledTaxonomies("collection1");
assertThat(disableTaxonomies.get(0).getCode()).isEqualTo(taxonomy.getCode());
assertThat(enableTaxonomies).isEmpty();
}
@Test(expected = TaxonomySchemaTypesHaveRecords.class)
public void givenRecordUsingTypeInTaxonomyWhenEnbaleTaxonomyThenItIsEnable()
throws Exception {
Taxonomy taxonomy = Taxonomy.createPublic("1", "1", "collection1", asList("zeSchemaType"));
taxonomiesManager.addTaxonomy(taxonomy, schemasManager);
taxonomiesManager.disable(taxonomy, schemasManager);
givenRecord();
taxonomiesManager.enable(taxonomy, schemasManager);
List<Taxonomy> enableTaxonomies = taxonomiesManager.getEnabledTaxonomies("collection1");
List<Taxonomy> disableTaxonomies = taxonomiesManager.getDisabledTaxonomies("collection1");
assertThat(enableTaxonomies.get(0).getCode()).isEqualTo(taxonomy.getCode());
assertThat(disableTaxonomies).isEmpty();
}
@Test
public void whenEnbaleTaxonomyThenItIsEnable()
throws Exception {
Taxonomy taxonomy = Taxonomy.createPublic("1", "1", "collection1", asList("zeSchemaType"));
taxonomiesManager.addTaxonomy(taxonomy, schemasManager);
taxonomiesManager.disable(taxonomy, schemasManager);
taxonomiesManager.enable(taxonomy, schemasManager);
List<Taxonomy> enableTaxonomies = taxonomiesManager.getEnabledTaxonomies("collection1");
List<Taxonomy> disableTaxonomies = taxonomiesManager.getDisabledTaxonomies("collection1");
assertThat(enableTaxonomies.get(0).getCode()).isEqualTo(taxonomy.getCode());
assertThat(disableTaxonomies).isEmpty();
}
@Test
public void whenEnbaleAnAlreadyEnableTaxonomyThenOk()
throws Exception {
Taxonomy taxonomy = Taxonomy.createPublic("1", "1", "collection1", asList("zeSchemaType"));
taxonomiesManager.addTaxonomy(taxonomy, schemasManager);
taxonomiesManager.disable(taxonomy, schemasManager);
taxonomiesManager.enable(taxonomy, schemasManager);
taxonomiesManager.enable(taxonomy, schemasManager);
List<Taxonomy> enableTaxonomies = taxonomiesManager.getEnabledTaxonomies("collection1");
List<Taxonomy> disableTaxonomies = taxonomiesManager.getDisabledTaxonomies("collection1");
assertThat(enableTaxonomies.get(0).getCode()).isEqualTo(taxonomy.getCode());
assertThat(disableTaxonomies).isEmpty();
}
@Test
public void givenTwoTaxonomiesWhenGetTaxonomyForThenReturnTaxonomyWithTheSchemaPassed()
throws Exception {
Taxonomy taxonomy1 = Taxonomy.createPublic("1", "1", "collection1", asList("zeSchemaType"));
Taxonomy taxonomy2 = Taxonomy.createPublic("2", "2", "collection1", asList("anotherSchemaType"));
taxonomiesManager.addTaxonomy(taxonomy1, schemasManager);
taxonomiesManager.addTaxonomy(taxonomy2, schemasManager);
assertThat(taxonomiesManager.getTaxonomyFor("collection1", "zeSchemaType")).isEqualTo(taxonomy1);
assertThat(taxonomiesManager.getTaxonomyFor("collection1", "anotherSchemaType")).isEqualTo(taxonomy2);
}
private void givenRecord()
throws Exception {
recordServices.add(recordServices.newRecordWithSchema(collection1ZeSchema.instance()).set(
collection1ZeSchema.stringMetadata(), "zeRecord"));
}
}