package com.constellio.model.services.factories; import static com.constellio.data.conf.HashingEncoding.BASE64_URL_ENCODED; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.io.File; import org.jdom2.Document; import org.jdom2.Element; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.mockito.Mockito; import com.constellio.app.services.extensions.plugins.ConstellioPluginManager; import com.constellio.data.conf.DataLayerConfiguration; import com.constellio.data.dao.managers.StatefullServiceDecorator; import com.constellio.data.dao.managers.config.ConfigManager; import com.constellio.data.dao.managers.config.values.XMLConfiguration; import com.constellio.data.dao.services.DataStoreTypesFactory; import com.constellio.data.dao.services.factories.DataLayerFactory; import com.constellio.data.io.IOServicesFactory; import com.constellio.data.utils.Delayed; import com.constellio.model.conf.FoldersLocator; import com.constellio.model.conf.ModelLayerConfiguration; import com.constellio.model.services.batch.controller.BatchProcessController; import com.constellio.model.services.batch.manager.BatchProcessesManager; import com.constellio.model.services.collections.CollectionsListManager; import com.constellio.model.services.extensions.ConstellioModulesManager; import com.constellio.model.services.parser.ForkParsers; import com.constellio.model.services.schemas.MetadataSchemasManager; import com.constellio.model.services.security.AuthorizationDetailsManager; import com.constellio.model.services.taxonomies.TaxonomiesManager; import com.constellio.model.services.users.GlobalGroupsManager; import com.constellio.model.services.users.UserCredentialsManager; import com.constellio.sdk.tests.ConstellioTest; import com.constellio.sdk.tests.schemas.FakeDataStoreTypeFactory; public class ModelLayerFactoryTest extends ConstellioTest { int numberOfRecordsPerTask = anInteger(); int batchProcessPartSize = anInteger(); String zeComputer = aString(); @Mock DataLayerConfiguration dataLayerConfiguration; @Mock ConfigManager configManager; @Mock DataLayerFactory dataLayerFactory; @Mock IOServicesFactory ioServicesFactory; @Mock ForkParsers forkParsers; @Mock FoldersLocator foldersLocator; @Mock ModelLayerConfiguration modelLayerConfiguration; @Mock File profiles; DataStoreTypesFactory typesFactory = new FakeDataStoreTypeFactory(); @Mock Delayed<ConstellioPluginManager> constellioPluginManager; @Mock ConstellioModulesManager constellioModulesManager; ModelLayerFactory modelLayerFactory; StatefullServiceDecorator statefullServiceDecorator = new StatefullServiceDecorator(); @Before public void setUp() { XMLConfiguration xmlConfiguration = Mockito.mock(XMLConfiguration.class); Document document = Mockito.mock(Document.class); when(configManager.getXML("/authorizations.xml")).thenReturn(xmlConfiguration); when(configManager.getXML("/userCredentialsConfig.xml")).thenReturn(xmlConfiguration); when(xmlConfiguration.getDocument()).thenReturn(document); when(document.getRootElement()).thenReturn(new Element("authorizations")); when(dataLayerFactory.getDataLayerConfiguration()).thenReturn(dataLayerConfiguration); when(dataLayerConfiguration.getHashingEncoding()).thenReturn(BASE64_URL_ENCODED); when(dataLayerFactory.getIOServicesFactory()).thenReturn(ioServicesFactory); when(dataLayerFactory.newTypesFactory()).thenReturn(typesFactory); when(dataLayerFactory.getConfigManager()).thenReturn(configManager); when(foldersLocator.getLanguageProfiles()).thenReturn(profiles); when(profiles.listFiles()).thenReturn(new File[0]); modelLayerFactory = spy( new ModelLayerFactory(dataLayerFactory, foldersLocator, modelLayerConfiguration, statefullServiceDecorator, new Delayed<>(constellioModulesManager), null, null)); } @Test public void whenNewRecordServicesCreatedThenNotNull() { when(dataLayerFactory.newTypesFactory()).thenReturn(typesFactory); assertTrue(modelLayerFactory.newRecordServices() != null); } @Test public void whenNewSearchServicesThenNotNull() throws Exception { assertThat(modelLayerFactory.newSearchServices()).isNotNull(); } @Test public void whenNewTaxonomiesSearchServicesThenUseDao() throws Exception { assertThat(modelLayerFactory.newTaxonomiesSearchService()).isNotNull(); } @Test public void whenNewUserServicesThenNotNull() throws Exception { assertThat(modelLayerFactory.newUserServices()).isNotNull(); } @Test public void whenGettingSchemaManagerThenAlwaysSameInstance() throws Exception { MetadataSchemasManager schemasManager1 = modelLayerFactory.getMetadataSchemasManager(); MetadataSchemasManager schemasManager2 = modelLayerFactory.getMetadataSchemasManager(); assertThat(schemasManager1).isNotNull().isSameAs(schemasManager2); } @Test public void whenGettingCollectionsListManagerThenAlwaysSameInstance() throws Exception { CollectionsListManager collectionsManager1 = modelLayerFactory.getCollectionsListManager(); CollectionsListManager collectionsManager2 = modelLayerFactory.getCollectionsListManager(); assertThat(collectionsManager1).isNotNull().isSameAs(collectionsManager2); } @Test public void whenGettingTaxonomiesManagerThenAlwaysSameInstance() throws Exception { TaxonomiesManager taxonomiesManager1 = modelLayerFactory.getTaxonomiesManager(); TaxonomiesManager taxonomiesManager2 = modelLayerFactory.getTaxonomiesManager(); assertThat(taxonomiesManager1).isNotNull().isSameAs(taxonomiesManager2); } @Test public void whenGettingBatchProcessesManagerThenAlwaysSameInstance() throws Exception { BatchProcessesManager processesManager1 = modelLayerFactory.getBatchProcessesManager(); BatchProcessesManager processesManager2 = modelLayerFactory.getBatchProcessesManager(); assertThat(processesManager1).isNotNull().isSameAs(processesManager2); } @Test public void whenGettingBatchProcessesControllerThenAlwaysSameInstance() throws Exception { BatchProcessController controler1 = modelLayerFactory.getBatchProcessesController(); BatchProcessController controler2 = modelLayerFactory.getBatchProcessesController(); assertThat(controler1).isNotNull().isSameAs(controler2); } @Test public void whenGetAuthorizationDetailsManagerThenSameInstance() throws Exception { AuthorizationDetailsManager authorizationDetailsManager1 = modelLayerFactory.getAuthorizationDetailsManager(); AuthorizationDetailsManager authorizationDetailsManager2 = modelLayerFactory.getAuthorizationDetailsManager(); assertThat(authorizationDetailsManager1).isNotNull().isSameAs(authorizationDetailsManager2); } @Test public void whenGetGlobalGroupsManagerThenSameInstance() throws Exception { GlobalGroupsManager globalGroupsManager1 = modelLayerFactory.getGlobalGroupsManager(); GlobalGroupsManager globalGroupsManager2 = modelLayerFactory.getGlobalGroupsManager(); assertThat(globalGroupsManager1).isNotNull().isSameAs(globalGroupsManager2); } @Test public void whenGetUserCredentialsManagerThenSameInstance() throws Exception { UserCredentialsManager userCredentialsManager1 = modelLayerFactory.getUserCredentialsManager(); UserCredentialsManager userCredentialsManager2 = modelLayerFactory.getUserCredentialsManager(); assertThat(userCredentialsManager1).isNotNull().isSameAs(userCredentialsManager2); } @Test public void whenNewAuthorizationsServicesThenNotNull() { assertThat(modelLayerFactory.newAuthorizationsServices()).isNotNull(); verify(modelLayerFactory).getRolesManager(); verify(modelLayerFactory).getTaxonomiesManager(); } @Test public void whenGetPasswordFileAuthenticationServiceThenNotNull() throws Exception { assertThat(modelLayerFactory.newAuthenticationService()).isNotNull(); } @Test public void whenGetSearchBoostManagerThenNotNull() throws Exception { assertThat(modelLayerFactory.getSearchBoostManager()).isNotNull(); } }