package org.jvalue.ods.data; import com.fasterxml.jackson.core.JsonPointer; import com.fasterxml.jackson.databind.node.JsonNodeFactory; import com.fasterxml.jackson.databind.node.ObjectNode; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.jvalue.commons.couchdb.DbConnectorFactory; import org.jvalue.commons.utils.Cache; import org.jvalue.ods.api.sources.DataSource; import org.jvalue.ods.api.sources.DataSourceMetaData; import org.jvalue.ods.db.DataRepository; import org.jvalue.ods.db.DataSourceRepository; import org.jvalue.ods.db.RepositoryFactory; import org.jvalue.ods.notifications.NotificationManager; import org.jvalue.ods.processor.ProcessorChainManager; import java.util.Arrays; import java.util.Map; import mockit.Expectations; import mockit.Mocked; import mockit.Verifications; import mockit.integration.junit4.JMockit; @RunWith(JMockit.class) public final class DataSourceManagerTest { private static final String SOURCE_ID = "someSourceId"; @Mocked private DataSourceRepository sourceRepository; @Mocked private Cache<DataRepository> dataRepositoryCache; @Mocked private DbConnectorFactory dbConnectorFactory; @Mocked private RepositoryFactory repositoryFactory; @Mocked private ProcessorChainManager processorChainManager; @Mocked private DataViewManager dataViewManager; @Mocked private NotificationManager notificationManager; @Mocked private DataRepository dataRepository; private DataSource dataSource = new DataSource( SOURCE_ID, JsonPointer.compile("/id"), new ObjectNode(JsonNodeFactory.instance), new DataSourceMetaData("", "", "", "", "", "", "")); private DataSourceManager sourceManager; @Before public void setupSourceManager() { this.sourceManager = new DataSourceManager( sourceRepository, dataRepositoryCache, dbConnectorFactory, repositoryFactory, processorChainManager, dataViewManager, notificationManager); } @Test public void testStart() { new Expectations() {{ sourceRepository.getAll(); result = Arrays.asList(dataSource); repositoryFactory.createSourceDataRepository(SOURCE_ID, (JsonPointer) any); result = dataRepository; }}; sourceManager.start(); new Verifications() {{ Map<DataSource, DataRepository> sources; processorChainManager.startAllProcessorChains(sources = withCapture()); Assert.assertTrue(sources.containsKey(dataSource)); }}; } @Test public void testStop() { sourceManager.stop(); new Verifications() {{ processorChainManager.stopAllProcessorChains(); }}; } @Test public void testAdd() { sourceManager.add(dataSource); new Verifications() {{ repositoryFactory.createSourceDataRepository(SOURCE_ID, (JsonPointer) any); sourceRepository.add(dataSource); }}; } @Test public void testRemove() { sourceManager.remove(dataSource); new Verifications() {{ dataRepositoryCache.remove(SOURCE_ID); processorChainManager.removeAll(dataSource); dataViewManager.removeAll(dataSource); notificationManager.removeAll(dataSource); dbConnectorFactory.deleteDatabase(SOURCE_ID); }}; } @Test public void testGetAll() { sourceManager.getAll(); new Verifications() {{ sourceRepository.getAll(); }}; } @Test public void testFindBySourceId() { sourceManager.findBySourceId(SOURCE_ID); new Verifications() {{ sourceRepository.findById(SOURCE_ID); }}; } }