package net.rrm.ehour.persistence.dao;
import com.google.common.collect.Lists;
import net.rrm.ehour.config.PersistenceConfig;
import org.hibernate.SessionFactory;
import org.hibernate.service.spi.ServiceRegistryAwareService;
import org.hibernate.service.spi.ServiceRegistryImplementor;
import org.junit.Before;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate4.SessionFactoryUtils;
import org.springframework.test.context.TestExecutionListeners;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.support.DependencyInjectionTestExecutionListener;
import org.springframework.test.context.support.DirtiesContextTestExecutionListener;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.springframework.test.context.transaction.TransactionalTestExecutionListener;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.sql.DataSource;
import java.util.List;
@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners(listeners = {DependencyInjectionTestExecutionListener.class, DirtiesContextTestExecutionListener.class, TransactionalTestExecutionListener.class})
@Transactional(propagation = Propagation.REQUIRES_NEW)
@TransactionConfiguration(defaultRollback = true)
public abstract class AbstractDaoTest {
@Autowired
private SessionFactory sessionFactory;
private List<String> datasetFilenames = Lists.newArrayList("dataset-users.xml");
public AbstractDaoTest() {
System.setProperty("EHOUR_TEST", "true");
}
public AbstractDaoTest(String dataSetFileName) {
this(Lists.newArrayList(dataSetFileName));
}
public AbstractDaoTest(List<String> additionalDataSets) {
this();
this.datasetFilenames.addAll(additionalDataSets);
}
@Before
public final void setUpDatabase() throws Exception {
DataSource dataSource = SessionFactoryUtils.getDataSource(sessionFactory);
DatabasePopulator.setUpDatabase(dataSource, datasetFilenames, getRequiredDbVersion());
}
protected String getRequiredDbVersion() {
return PersistenceConfig.DB_VERSION;
}
}