package org.opentides.dao.impl; import java.io.File; import java.io.FileInputStream; import java.sql.Connection; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.sql.DataSource; import org.apache.log4j.Logger; import org.dbunit.database.DatabaseConfig; import org.dbunit.database.DatabaseConnection; import org.dbunit.database.IDatabaseConnection; import org.dbunit.dataset.IDataSet; import org.dbunit.dataset.xml.FlatXmlDataSet; import org.dbunit.ext.hsqldb.HsqldbDataTypeFactory; import org.dbunit.operation.DatabaseOperation; import org.junit.Before; import org.junit.runner.RunWith; import org.opentides.util.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.DataSourceUtils; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.annotation.DirtiesContext.ClassMode; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.transaction.TransactionConfiguration; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.support.TransactionTemplate; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:applicationContext-dao-test.xml"}) @TransactionConfiguration @DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD) public class BaseDaoTest extends AbstractJUnit4SpringContextTests { private static final Logger _log = Logger.getLogger(BaseDaoTest.class); @Autowired private DataSource dataSource; @PersistenceContext protected EntityManager entityManager; @Autowired private PlatformTransactionManager transactionManager; @Autowired protected JdbcTemplate jdbcTemplate; protected TransactionTemplate transactionTemplate; protected String datasetBasePath = "./src/test/resources/dataset/"; protected String datasetPath; @Before public void init() throws Exception { IDatabaseConnection dbUnitCon = null; Connection conn = DataSourceUtils.getConnection(dataSource); dbUnitCon = new DatabaseConnection(conn); DatabaseConfig config = dbUnitCon.getConfig(); if(StringUtil.isEmpty(datasetPath)) datasetPath = datasetBasePath + getClass().getSimpleName() + ".xml"; File datasetFile = new File(datasetPath); if(datasetFile.exists()) { config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new HsqldbDataTypeFactory()); _log.debug("Dataset Path: " + datasetPath); IDataSet dataSet = new FlatXmlDataSet(new FileInputStream(datasetFile)); DatabaseOperation.REFRESH.execute(dbUnitCon, dataSet); } else { _log.info("No initial dataset loaded"); } transactionTemplate = new TransactionTemplate(transactionManager); } }