package liquibase.change.core;
import liquibase.change.AbstractChangeTest;
import liquibase.database.core.MockDatabase;
import liquibase.statement.SqlStatement;
import liquibase.statement.DatabaseFunction;
import liquibase.statement.core.AddDefaultValueStatement;
import static org.junit.Assert.*;
import org.junit.Test;
public class AddDefaultValueChangeTest extends AbstractChangeTest {
@Override
@Test
public void generateStatement() throws Exception {
AddDefaultValueChange change = new AddDefaultValueChange();
change.setTableName("TABLE_NAME");
change.setColumnName("COLUMN_NAME");
change.setDefaultValue("New default value");
change.setColumnDataType("VARCHAR(255)");
SqlStatement[] statements = change.generateStatements(new MockDatabase());
assertEquals(1, statements.length);
AddDefaultValueStatement statement = (AddDefaultValueStatement) statements[0];
assertEquals("TABLE_NAME", statement.getTableName());
assertEquals("COLUMN_NAME", statement.getColumnName());
assertEquals("New default value", statement.getDefaultValue());
assertEquals("VARCHAR(255)", statement.getColumnDataType());
}
@Test
public void generateStatements_intDefaultValue() throws Exception {
AddDefaultValueChange change = new AddDefaultValueChange();
change.setTableName("TABLE_NAME");
change.setColumnName("COLUMN_NAME");
change.setDefaultValueNumeric("42");
SqlStatement[] statements = change.generateStatements(new MockDatabase());
assertEquals(1, statements.length);
AddDefaultValueStatement statement = (AddDefaultValueStatement) statements[0];
assertEquals("TABLE_NAME", statement.getTableName());
assertEquals("COLUMN_NAME", statement.getColumnName());
assertTrue(statement.getDefaultValue() instanceof Number);
assertEquals("42", statement.getDefaultValue().toString());
}
@Test
public void generateStatements_decimalDefaultValue() throws Exception {
AddDefaultValueChange change = new AddDefaultValueChange();
change.setTableName("TABLE_NAME");
change.setColumnName("COLUMN_NAME");
change.setDefaultValueNumeric("42.56");
SqlStatement[] statements = change.generateStatements(new MockDatabase());
assertEquals(1, statements.length);
AddDefaultValueStatement statement = (AddDefaultValueStatement) statements[0];
assertEquals("TABLE_NAME", statement.getTableName());
assertEquals("COLUMN_NAME", statement.getColumnName());
assertTrue(statement.getDefaultValue() instanceof Number);
assertEquals("42.56", statement.getDefaultValue().toString());
}
@Test
public void generateStatements_computedNumeric() throws Exception {
AddDefaultValueChange change = new AddDefaultValueChange();
change.setTableName("TABLE_NAME");
change.setColumnName("COLUMN_NAME");
change.setDefaultValueNumeric("Math.random()");
SqlStatement[] statements = change.generateStatements(new MockDatabase());
assertEquals(1, statements.length);
AddDefaultValueStatement statement = (AddDefaultValueStatement) statements[0];
assertEquals("TABLE_NAME", statement.getTableName());
assertEquals("COLUMN_NAME", statement.getColumnName());
assertTrue(statement.getDefaultValue() instanceof DatabaseFunction);
assertEquals("Math.random()", statement.getDefaultValue().toString());
}
@Test
public void generateStatements_computedDate() throws Exception {
AddDefaultValueChange change = new AddDefaultValueChange();
change.setTableName("TABLE_NAME");
change.setColumnName("COLUMN_NAME");
change.setDefaultValueDate("NOW()");
SqlStatement[] statements = change.generateStatements(new MockDatabase());
assertEquals(1, statements.length);
AddDefaultValueStatement statement = (AddDefaultValueStatement) statements[0];
assertEquals("TABLE_NAME", statement.getTableName());
assertEquals("COLUMN_NAME", statement.getColumnName());
assertTrue(statement.getDefaultValue() instanceof DatabaseFunction);
assertEquals("NOW()", statement.getDefaultValue().toString());
}
@Test
public void generateStatements_booleanDefaultValue_true() throws Exception {
AddDefaultValueChange change = new AddDefaultValueChange();
change.setTableName("TABLE_NAME");
change.setColumnName("COLUMN_NAME");
change.setDefaultValueBoolean(Boolean.TRUE);
SqlStatement[] statements = change.generateStatements(new MockDatabase());
assertEquals(1, statements.length);
AddDefaultValueStatement statement = (AddDefaultValueStatement) statements[0];
assertEquals("TABLE_NAME", statement.getTableName());
assertEquals("COLUMN_NAME", statement.getColumnName());
assertTrue(statement.getDefaultValue() instanceof Boolean);
assertEquals(Boolean.TRUE, statement.getDefaultValue());
}
@Test
public void generateStatements_booleanDefaultValue_false() throws Exception {
AddDefaultValueChange change = new AddDefaultValueChange();
change.setTableName("TABLE_NAME");
change.setColumnName("COLUMN_NAME");
change.setDefaultValueBoolean(Boolean.FALSE);
SqlStatement[] statements = change.generateStatements(new MockDatabase());
assertEquals(1, statements.length);
AddDefaultValueStatement statement = (AddDefaultValueStatement) statements[0];
assertEquals("TABLE_NAME", statement.getTableName());
assertEquals("COLUMN_NAME", statement.getColumnName());
assertTrue(statement.getDefaultValue() instanceof Boolean);
assertEquals(Boolean.FALSE, statement.getDefaultValue());
}
// @Test
// public void generateStatements_dateDefaultValue() throws Exception {
// new DatabaseTestTemplate().testOnAllDatabases(new DatabaseTest() {
//
// public void performTest(Database database) throws Exception {
// java.sql.Date date = new java.sql.Date(new Date().getTime());
//
// AddDefaultValueChange change = new AddDefaultValueChange();
// change.setTableName("TABLE_NAME");
// change.setColumnName("COLUMN_NAME");
// ISODateFormat dateFormat = new ISODateFormat();
// change.setDefaultValueDate(dateFormat.format(date));
//
// SqlStatement[] statements = change.generateStatements(new MockDatabase());
// assertEquals(1, statements.length);
// AddDefaultValueStatement statement = (AddDefaultValueStatement) statements[0];
//
//
// assertEquals("TABLE_NAME", statement.getTableName());
// assertEquals("COLUMN_NAME", statement.getColumnName());
// assertTrue(statement.getDefaultValue() instanceof java.sql.Date);
// assertEquals(date.toString(), statement.getDefaultValue().toString());
// }
// });
// }
@Override
public void getRefactoringName() throws Exception {
assertEquals("Add Default Value", new AddDefaultValueChange().getChangeMetaData().getDescription());
}
@Override
@Test
public void getConfirmationMessage() throws Exception {
AddDefaultValueChange change = new AddDefaultValueChange();
change.setSchemaName("SCHEMA_NAME");
change.setTableName("TABLE_NAME");
change.setColumnName("COLUMN_NAME");
assertEquals("Default value added to TABLE_NAME.COLUMN_NAME", change.getConfirmationMessage());
}
@Test
public void getMD5Sum() throws Exception {
AddDefaultValueChange change = new AddDefaultValueChange();
change.setSchemaName("SCHEMA_NAME");
change.setTableName("TABLE_NAME");
change.setColumnName("COLUMN_NAME");
change.setDefaultValue("DEF STRING");
change.setDefaultValueNumeric("42");
change.setDefaultValueBoolean(true);
change.setDefaultValueDate("2007-01-02");
String md5sum1 = change.generateCheckSum().toString();
change.setSchemaName("SCHEMA_NAME2");
String md5Sum2 = change.generateCheckSum().toString();
assertFalse(md5sum1.equals(md5Sum2));
change.setSchemaName("SCHEMA_NAME");
String md5Sum3 = change.generateCheckSum().toString();
assertTrue(md5sum1.equals(md5Sum3));
}
}