package liquibase.change.core;
import liquibase.change.AbstractChangeTest;
import liquibase.database.Database;
import liquibase.database.core.*;
import liquibase.statement.SqlStatement;
import liquibase.statement.core.AddAutoIncrementStatement;
import liquibase.statement.core.AddDefaultValueStatement;
import liquibase.statement.core.CreateSequenceStatement;
import liquibase.statement.core.SetNullableStatement;
import static org.junit.Assert.*;
import org.junit.Test;
public class AddAutoIncrementChangeTest extends AbstractChangeTest {
@Test
public void constructor() {
AddAutoIncrementChange change = new AddAutoIncrementChange();
assertEquals("addAutoIncrement", change.getChangeMetaData().getName());
assertEquals("Set Column as Auto-Increment", change.getChangeMetaData().getDescription());
}
@Override
@Test
public void generateStatement() throws Exception {
AddAutoIncrementChange change = new AddAutoIncrementChange();
change.setSchemaName("SCHEMA_NAME");
change.setTableName("TABLE_NAME");
change.setColumnName("COLUMN_NAME");
change.setColumnDataType("DATATYPE(255)");
testChangeOnAllExcept(change, new GenerateAllValidator() {
public void validate(SqlStatement[] sqlStatements, Database database) {
assertEquals(1, sqlStatements.length);
assertTrue(sqlStatements[0] instanceof AddAutoIncrementStatement);
assertEquals("SCHEMA_NAME", ((AddAutoIncrementStatement) sqlStatements[0]).getSchemaName());
assertEquals("TABLE_NAME", ((AddAutoIncrementStatement) sqlStatements[0]).getTableName());
assertEquals("COLUMN_NAME", ((AddAutoIncrementStatement) sqlStatements[0]).getColumnName());
assertEquals("DATATYPE(255)", ((AddAutoIncrementStatement) sqlStatements[0]).getColumnDataType());
}
}, PostgresDatabase.class);
testChange(change, new GenerateAllValidator() {
public void validate(SqlStatement[] sqlStatements, Database database) {
assertEquals(3, sqlStatements.length);
assertTrue(sqlStatements[0] instanceof CreateSequenceStatement);
assertTrue(sqlStatements[1] instanceof SetNullableStatement);
assertTrue(sqlStatements[2] instanceof AddDefaultValueStatement);
}
}, PostgresDatabase.class);
}
@Override
@Test
public void getRefactoringName() throws Exception {
assertEquals("Set Column as Auto-Increment", new AddAutoIncrementChange().getChangeMetaData().getDescription());
}
@Override
@Test
public void getConfirmationMessage() throws Exception {
AddAutoIncrementChange change = new AddAutoIncrementChange();
change.setSchemaName("SCHEMA_NAME");
change.setTableName("TABLE_NAME");
change.setColumnName("COLUMN_NAME");
change.setColumnDataType("DATATYPE(255)");
assertEquals("Auto-increment added to TABLE_NAME.COLUMN_NAME", change.getConfirmationMessage());
}
@Override
protected boolean changeIsUnsupported(Database database) {
return !database.supportsAutoIncrement()
|| database instanceof MSSQLDatabase
|| database instanceof DerbyDatabase
;//|| (database instanceof HsqlDatabase);
}
}