package liquibase.change.core;
import liquibase.change.AbstractChangeTest;
import liquibase.database.core.MockDatabase;
import liquibase.resource.ClassLoaderResourceAccessor;
import liquibase.statement.SqlStatement;
import liquibase.statement.core.InsertStatement;
import static org.junit.Assert.*;
import org.junit.Test;
/**
* Tests for {@link liquibase.change.core.AlterSequenceChange}
*/
public class LoadDataChangeTest extends AbstractChangeTest {
@Override
@Test
public void getRefactoringName() throws Exception {
assertEquals("Load Data", new LoadDataChange().getChangeMetaData().getDescription());
}
@Test
public void loadDataTsv() throws Exception {
LoadDataChange refactoring = new LoadDataChange();
refactoring.setSchemaName("SCHEMA_NAME");
refactoring.setTableName("TABLE_NAME");
refactoring.setFile("liquibase/change/core/sample.data1.tsv");
refactoring.setSeparator("\t");
refactoring.setResourceAccessor(new ClassLoaderResourceAccessor());
SqlStatement[] sqlStatements = refactoring.generateStatements(new MockDatabase());
stdAssertOfLoaded(sqlStatements);
}
@Test
public void loadDataCsvQuotChar() throws Exception {
LoadDataChange refactoring = new LoadDataChange();
refactoring.setSchemaName("SCHEMA_NAME");
refactoring.setTableName("TABLE_NAME");
refactoring.setFile("liquibase/change/core/sample.quotchar.tsv");
refactoring.setSeparator("\t");
refactoring.setQuotchar("\'");
refactoring.setResourceAccessor(new ClassLoaderResourceAccessor());
SqlStatement[] sqlStatements = refactoring.generateStatements(new MockDatabase());
stdAssertOfLoaded(sqlStatements);
}
private void stdAssertOfLoaded(SqlStatement[] sqlStatements) {
assertEquals(2, sqlStatements.length);
assertTrue(sqlStatements[0] instanceof InsertStatement);
assertTrue(sqlStatements[1] instanceof InsertStatement);
assertEquals("SCHEMA_NAME", ((InsertStatement) sqlStatements[0]).getSchemaName());
assertEquals("TABLE_NAME", ((InsertStatement) sqlStatements[0]).getTableName());
assertEquals("Bob Johnson", ((InsertStatement) sqlStatements[0]).getColumnValue("name"));
assertEquals("bjohnson", ((InsertStatement) sqlStatements[0]).getColumnValue("username"));
assertEquals("SCHEMA_NAME", ((InsertStatement) sqlStatements[1]).getSchemaName());
assertEquals("TABLE_NAME", ((InsertStatement) sqlStatements[1]).getTableName());
assertEquals("John Doe", ((InsertStatement) sqlStatements[1]).getColumnValue("name"));
assertEquals("jdoe", ((InsertStatement) sqlStatements[1]).getColumnValue("username"));
}
@Override
@Test
public void generateStatement() throws Exception {
LoadDataChange refactoring = new LoadDataChange();
refactoring.setSchemaName("SCHEMA_NAME");
refactoring.setTableName("TABLE_NAME");
refactoring.setFile("liquibase/change/core/sample.data1.csv");
//refactoring.setFileOpener(new JUnitResourceAccessor());
refactoring.setResourceAccessor(new ClassLoaderResourceAccessor());
SqlStatement[] sqlStatements = refactoring.generateStatements(new MockDatabase());
stdAssertOfLoaded(sqlStatements);
}
@Test
public void generateStatement_excel() throws Exception {
LoadDataChange refactoring = new LoadDataChange();
refactoring.setSchemaName("SCHEMA_NAME");
refactoring.setTableName("TABLE_NAME");
refactoring.setFile("liquibase/change/core/sample.data1-excel.csv");
refactoring.setResourceAccessor(new ClassLoaderResourceAccessor());
//refactoring.setFileOpener(new JUnitResourceAccessor());
LoadDataColumnConfig ageConfig = new LoadDataColumnConfig();
ageConfig.setHeader("age");
ageConfig.setType("NUMERIC");
refactoring.addColumn(ageConfig);
LoadDataColumnConfig activeConfig = new LoadDataColumnConfig();
activeConfig.setHeader("active");
activeConfig.setType("BOOLEAN");
refactoring.addColumn(activeConfig);
SqlStatement[] sqlStatements = refactoring.generateStatements(new MockDatabase());
assertEquals(2, sqlStatements.length);
assertTrue(sqlStatements[0] instanceof InsertStatement);
assertTrue(sqlStatements[1] instanceof InsertStatement);
assertEquals("SCHEMA_NAME", ((InsertStatement) sqlStatements[0]).getSchemaName());
assertEquals("TABLE_NAME", ((InsertStatement) sqlStatements[0]).getTableName());
assertEquals("Bob Johnson", ((InsertStatement) sqlStatements[0]).getColumnValue("name"));
assertEquals("bjohnson", ((InsertStatement) sqlStatements[0]).getColumnValue("username"));
assertEquals("15", ((InsertStatement) sqlStatements[0]).getColumnValue("age").toString());
assertEquals(Boolean.TRUE, ((InsertStatement) sqlStatements[0]).getColumnValue("active"));
assertEquals("SCHEMA_NAME", ((InsertStatement) sqlStatements[1]).getSchemaName());
assertEquals("TABLE_NAME", ((InsertStatement) sqlStatements[1]).getTableName());
assertEquals("John Doe", ((InsertStatement) sqlStatements[1]).getColumnValue("name"));
assertEquals("jdoe", ((InsertStatement) sqlStatements[1]).getColumnValue("username"));
assertEquals("21", ((InsertStatement) sqlStatements[1]).getColumnValue("age").toString());
assertEquals(Boolean.FALSE, ((InsertStatement) sqlStatements[1]).getColumnValue("active"));
}
@Override
@Test
public void getConfirmationMessage() throws Exception {
LoadDataChange refactoring = new LoadDataChange();
refactoring.setTableName("TABLE_NAME");
refactoring.setFile("FILE_NAME");
assertEquals("Data loaded from FILE_NAME into TABLE_NAME", refactoring.getConfirmationMessage());
}
@Override
@Test
public void generateCheckSum() throws Exception {
LoadDataChange refactoring = new LoadDataChange();
refactoring.setSchemaName("SCHEMA_NAME");
refactoring.setTableName("TABLE_NAME");
refactoring.setFile("liquibase/change/core/sample.data1.csv");
refactoring.setResourceAccessor(new ClassLoaderResourceAccessor());
//refactoring.setFileOpener(new JUnitResourceAccessor());
String md5sum1 = refactoring.generateCheckSum().toString();
refactoring.setFile("liquibase/change/core/sample.data2.csv");
String md5sum2 = refactoring.generateCheckSum().toString();
assertTrue(!md5sum1.equals(md5sum2));
assertEquals(md5sum2, refactoring.generateCheckSum().toString());
}
@Override
public void isSupported() throws Exception {
// todo: test with file opener
}
@Override
public void validate() throws Exception {
// todo: test with file opener
}
}