package org.mifos.db.populate;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.sql.DataSource;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mifos.core.MifosResourceUtil;
import org.mifos.framework.persistence.SqlExecutor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/test-dbContext.xml"})
public class DefaultDatabaseLoaderIntegrationTest {
private Connection connection;
private DefaultDatabaseLoader defaultDatabaseLoader;
@Autowired
private DataSource dataSource;
@Autowired
private String dbName;
@Autowired
private String dbPentahoDW;
private static final String INTEGRATION_TEST_DATA = "sql/integration_test_data.sql";
@Before
public void setup() throws SQLException {
connection = dataSource.getConnection();
defaultDatabaseLoader = new DefaultDatabaseLoader(connection, dbName, dbPentahoDW);
}
@After
public void tearDown() throws SQLException, IOException {
dropDatabases();
defaultDatabaseLoader.createDatabase();
defaultDatabaseLoader.populateDatabase();
connection.setCatalog(dbName);
SqlExecutor.execute(MifosResourceUtil.getClassPathResourceAsStream(INTEGRATION_TEST_DATA), connection);
}
@Test
public void createDbWhenDbNotExist() throws SQLException {
dropDatabases();
defaultDatabaseLoader.createDatabase();
Assert.assertEquals(defaultDatabaseLoader.getDbName(), connection.getCatalog());
if (!"".equals(dbPentahoDW)) {
connection.setCatalog(dbPentahoDW);
Assert.assertEquals(defaultDatabaseLoader.getDbPentahoDW(), connection.getCatalog());
}
}
@Test(expected=SQLException.class)
public void populateDbWhenDbNotExist() throws SQLException, IOException {
dropDatabases();
defaultDatabaseLoader.populateDatabase();
}
private void dropDatabases() throws SQLException {
Statement statement = connection.createStatement();
statement.execute("drop database if exists " + defaultDatabaseLoader.getDbName());
if (!"".equals(dbPentahoDW)) {
statement.execute("drop database if exists " + defaultDatabaseLoader.getDbPentahoDW());
}
}
@Test
public void populateDbWhenDbExist() throws SQLException, IOException {
defaultDatabaseLoader.createDatabase();
defaultDatabaseLoader.populateDatabase();
ResultSet res = connection.getMetaData().getTables(null, null, null, new String[] { "TABLE" });
Assert.assertTrue(res.next());
if (!"".equals(dbPentahoDW)) {
connection.setCatalog(dbPentahoDW);
ResultSet resDW = connection.getMetaData().getTables(null, null, null, new String[] { "TABLE" });
Assert.assertTrue(resDW.next());
}
}
}