package com.constellio.data.dao.services.factories;
import static org.assertj.core.api.Assertions.assertThat;
import java.io.File;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import com.constellio.data.conf.DataLayerConfiguration;
import com.constellio.data.conf.PropertiesDataLayerConfiguration.InMemoryDataLayerConfiguration;
import com.constellio.data.dao.managers.config.ConfigManager;
import com.constellio.data.dao.services.bigVault.BigVaultRecordDao;
import com.constellio.data.dao.services.idGenerator.UniqueIdGenerator;
import com.constellio.data.dao.services.solr.SolrDataStoreTypesFactory;
import com.constellio.data.dao.services.solr.SolrServers;
import com.constellio.data.dao.services.transactionLog.XMLSecondTransactionLogManager;
import com.constellio.data.io.IOServicesFactory;
import com.constellio.sdk.tests.ConstellioTest;
import com.constellio.sdk.tests.DataLayerConfigurationAlteration;
public class DataLayerFactoryRealTest extends ConstellioTest {
@Mock SolrServers solrServers;
@Mock IOServicesFactory ioServicesFactory;
@Mock DataLayerConfiguration dataLayerConfiguration;
private DataLayerFactory factory;
@Before
public void setUp()
throws Exception {
}
@Test
public void whenGettingSettingsManagerThenAlwaysSameInstance()
throws Exception {
factory = getDataLayerFactory();
ConfigManager settingsManager1 = factory.getConfigManager();
ConfigManager settingsManager2 = factory.getConfigManager();
assertThat(settingsManager1).isNotNull().isSameAs(settingsManager2);
}
@Test
public void whenGettingTypesFactoryThenReturnSolrTypesFactory()
throws Exception {
factory = getDataLayerFactory();
assertThat(factory.newTypesFactory()).isInstanceOf(SolrDataStoreTypesFactory.class);
}
@Test
public void whenGetUniqueIdGeneratorThenAlwaysSameInstance()
throws Exception {
factory = getDataLayerFactory();
UniqueIdGenerator uniqueIdGenerator1 = factory.getUniqueIdGenerator();
UniqueIdGenerator uniqueIdGenerator2 = factory.getUniqueIdGenerator();
assertThat(uniqueIdGenerator1).isNotNull().isSameAs(uniqueIdGenerator2);
}
@Test
public void givenSecondTransactionLogDisabledThenDisabledInEachCollection() {
configure(new DataLayerConfigurationAlteration() {
@Override
public void alter(InMemoryDataLayerConfiguration configuration) {
configuration.setSecondTransactionLogEnabled(false);
}
});
factory = getDataLayerFactory();
assertThat(((BigVaultRecordDao) factory.newRecordDao()).getSecondTransactionLogManager()).isNull();
assertThat(((BigVaultRecordDao) factory.newEventsDao()).getSecondTransactionLogManager()).isNull();
assertThat(((BigVaultRecordDao) factory.newNotificationsDao()).getSecondTransactionLogManager()).isNull();
}
@Test
public void givenSecondTransactionLogEnabledThenOnlyEnabledForRecordSolrCollection() {
final File secondTransactionLogBaseFolder = newTempFolder();
configure(new DataLayerConfigurationAlteration() {
@Override
public void alter(InMemoryDataLayerConfiguration configuration) {
configuration.setSecondTransactionLogEnabled(true);
configuration.setSecondTransactionLogBaseFolder(secondTransactionLogBaseFolder);
}
});
factory = getDataLayerFactory();
XMLSecondTransactionLogManager transactionLog = (XMLSecondTransactionLogManager) ((BigVaultRecordDao) factory
.newRecordDao()).getSecondTransactionLogManager();
assertThat(transactionLog.getFolder().getAbsolutePath()).isEqualTo(secondTransactionLogBaseFolder.getAbsolutePath());
assertThat(((BigVaultRecordDao) factory.newEventsDao()).getSecondTransactionLogManager()).isNull();
assertThat(((BigVaultRecordDao) factory.newNotificationsDao()).getSecondTransactionLogManager()).isNull();
}
}