package com.constellio.model.services.taxonomies;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
import java.util.ArrayList;
import java.util.Arrays;
import org.jdom2.Document;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InOrder;
import org.mockito.Mock;
import com.constellio.data.dao.managers.config.ConfigManager;
import com.constellio.data.dao.managers.config.DocumentAlteration;
import com.constellio.data.dao.managers.config.values.XMLConfiguration;
import com.constellio.model.entities.Taxonomy;
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.services.batch.manager.BatchProcessesManager;
import com.constellio.model.services.collections.CollectionsListManager;
import com.constellio.model.services.records.cache.RecordsCaches;
import com.constellio.model.services.schemas.MetadataSchemasManager;
import com.constellio.model.services.search.SearchServices;
import com.constellio.model.services.taxonomies.TaxonomiesManager.TaxonomiesManagerCache;
import com.constellio.model.utils.OneXMLConfigPerCollectionManager;
import com.constellio.sdk.tests.ConstellioTest;
public class TaxonomiesManagerTest extends ConstellioTest {
static String TAXONOMIES_CONFIG = "/taxonomies.xml";
@Mock BatchProcessesManager batchProcessesManager;
@Mock CollectionsListManager collectionsListManager;
@Mock MetadataSchemasManager schemasManager;
@Mock ConfigManager configManager;
@Mock SearchServices searchServices;
@Mock TaxonomiesWriter writer;
@Mock TaxonomiesReader reader;
@Mock DocumentAlteration addDocumentAlteration;
@Mock DocumentAlteration enableDocumentAlteration;
@Mock DocumentAlteration disableDocumentAlteration;
@Mock XMLConfiguration xmlConfiguration;
@Mock Document document;
@Mock Taxonomy taxonomy2;
@Mock RecordsCaches caches;
@Mock MetadataSchemaTypes metadataSchemaTypes;
@Mock MetadataSchemaType type1;
@Mock MetadataSchema schema;
@Mock OneXMLConfigPerCollectionManager<TaxonomiesManagerCache> oneXMLConfigPerCollectionManager;
InOrder inOrder;
TaxonomiesManager taxonomiesManager;
ArrayList<String> metadataRelations;
@Before
public void setup()
throws Exception {
when(collectionsListManager.getCollections()).thenReturn(Arrays.asList(zeCollection));
taxonomiesManager = spy(
new TaxonomiesManager(configManager, searchServices, batchProcessesManager, collectionsListManager, caches));
doReturn(oneXMLConfigPerCollectionManager).when(taxonomiesManager).newOneXMLConfigPerCollectionManager();
taxonomiesManager.initialize();
TaxonomiesManagerCache cache = new TaxonomiesManagerCache(null, new ArrayList<Taxonomy>(), new ArrayList<Taxonomy>());
when(oneXMLConfigPerCollectionManager.get(zeCollection)).thenReturn(cache);
when(configManager.getXML(TAXONOMIES_CONFIG)).thenReturn(xmlConfiguration);
when(xmlConfiguration.getDocument()).thenReturn(document);
when(taxonomiesManager.newTaxonomyWriter(any(Document.class))).thenReturn(writer);
when(taxonomiesManager.newTaxonomyReader(document)).thenReturn(reader);
when(taxonomiesManager.newAddTaxonomyDocumentAlteration(any(Taxonomy.class))).thenReturn(addDocumentAlteration);
when(taxonomiesManager.newEnableTaxonomyDocumentAlteration(anyString())).thenReturn(enableDocumentAlteration);
when(taxonomiesManager.newDisableTaxonomyDocumentAlteration(anyString())).thenReturn(disableDocumentAlteration);
when(schemasManager.getSchemaTypes(zeCollection)).thenReturn(metadataSchemaTypes);
when(metadataSchemaTypes.getSchemaType("type1")).thenReturn(type1);
when(type1.getDefaultSchema()).thenReturn(schema);
when(schema.getCollection()).thenReturn(zeCollection);
inOrder = inOrder(configManager, taxonomiesManager, reader, writer, oneXMLConfigPerCollectionManager);
doNothing().when(taxonomiesManager)
.createCacheForTaxonomyTypes(any(Taxonomy.class), eq(schemasManager), eq(zeCollection));
}
@Test
public void whenAddTaxonomyThenRightMethodsAreCalled()
throws Exception {
Taxonomy taxonomy = Taxonomy.createPublic("1", "1", zeCollection, Arrays.asList("type1"));
addTaxonomy(taxonomy);
inOrder.verify(taxonomiesManager).canCreateTaxonomy(taxonomy, schemasManager);
inOrder.verify(oneXMLConfigPerCollectionManager).updateXML(zeCollection, addDocumentAlteration);
}
@Test
public void whenDisableAndGetDisableTaxonomiesThenItIsReturned()
throws Exception {
Taxonomy taxonomy = Taxonomy.createPublic("1", "1", zeCollection, Arrays.asList("type1"));
addTaxonomy(taxonomy);
taxonomiesManager.disable(taxonomy, schemasManager);
inOrder.verify(taxonomiesManager).verifyRecordsWithTaxonomiesSchemaTypes(taxonomy, schemasManager);
inOrder.verify(oneXMLConfigPerCollectionManager).updateXML(zeCollection, disableDocumentAlteration);
}
@Test
public void whenEnableTaxonomieThenItIsEnabled()
throws Exception {
Taxonomy taxonomy = Taxonomy.createPublic("1", "1", zeCollection, Arrays.asList("type1"));
addTaxonomy(taxonomy);
taxonomiesManager.disable(taxonomy, schemasManager);
taxonomiesManager.enable(taxonomy, schemasManager);
inOrder.verify(taxonomiesManager).verifyRecordsWithTaxonomiesSchemaTypes(taxonomy, schemasManager);
inOrder.verify(oneXMLConfigPerCollectionManager).updateXML(zeCollection, enableDocumentAlteration);
}
private void addTaxonomy(Taxonomy taxonomy) {
taxonomiesManager.addTaxonomy(taxonomy, schemasManager);
}
}