package dbmigrate.executor;
import java.util.ArrayList;
import java.util.List;
import dbmigrate.model.db.Column;
import dbmigrate.model.db.IColumn;
import dbmigrate.model.db.TypeEnum;
import dbmigrate.model.operation.AddColumnOperationDescriptor;
import junit.framework.TestCase;
public class AddColumnExecutorTest extends TestCase {
private AddColumnOperationDescriptor operation;
private static final String DEFAULT_TEXT = "ala123";
private static final String DEFAULT_INT = "123";
private static final String DEFAULT_BYTE = "1010101010";
private static final String DEFAULT_BOOLEAN = "TRUE";
private static final String DEFAULT_DATE = "2011-12-01 18:17:03";
public void setUp() {
String tableName = "ala";
List<IColumn> columns = new ArrayList<IColumn>();
Column column = new Column();
column.setLength(255);
column.setName("ola");
column.setNullable(false);
columns.add(column);
operation = new AddColumnOperationDescriptor(tableName, column);
}
public void tuneColumn(TypeEnum type, String defaultValue) {
operation.getColumn().setDefault(defaultValue);
operation.getColumn().setType(type);
}
public void setValue(String value) {
operation.getColumn().setValueToSet(value);
}
public void testCreateSql() {
String tableName = "ala";
List<IColumn> columns = new ArrayList<IColumn>();
Column column = new Column();
column.setLength(255);
column.setType(TypeEnum.VARCHAR);
column.setName("ola_varchar_255");
column.setNullable(false);
column.setDefault("DOPE");
columns.add(column);
AddColumnOperationDescriptor operation = new AddColumnOperationDescriptor(tableName, column);
AddColumnExecutor executor = new AddColumnExecutor(null);
System.out.println(executor.createSql(operation));
assertEquals("ALTER TABLE \"ala\" ADD ola_varchar_255 VARCHAR (255) DEFAULT 'DOPE' NOT NULL;", executor.createSql(operation).trim());
}
public void testCreateSqlWithDefaultText() {
tuneColumn(TypeEnum.TEXT, DEFAULT_TEXT);
AddColumnExecutor executor = new AddColumnExecutor(null);
System.out.println(executor.createSql(operation).trim());
assertEquals("ALTER TABLE \"ala\" ADD ola TEXT (255) DEFAULT '" + DEFAULT_TEXT + "' NOT NULL;", executor.createSql(operation).trim());
}
public void testCreateSqlWithDefaultInt() {
tuneColumn(TypeEnum.INT, DEFAULT_INT);
AddColumnExecutor executor = new AddColumnExecutor(null);
System.out.println(executor.createSql(operation).trim());
assertEquals("ALTER TABLE \"ala\" ADD ola INT DEFAULT " + DEFAULT_INT + " NOT NULL;", executor.createSql(operation).trim());
}
public void testCreateSqlWithDefaultDatetime() {
tuneColumn(TypeEnum.DATETIME, DEFAULT_DATE);
AddColumnExecutor executor = new AddColumnExecutor(null);
System.out.println(executor.createSql(operation).trim());
assertEquals("ALTER TABLE \"ala\" ADD ola DATETIME DEFAULT '" + DEFAULT_DATE + "' NOT NULL;", executor.createSql(operation).trim());
}
public void testCreateSqlWithDefaultBoolean() {
tuneColumn(TypeEnum.BOOLEAN, DEFAULT_BOOLEAN);
AddColumnExecutor executor = new AddColumnExecutor(null);
System.out.println(executor.createSql(operation).trim());
assertEquals("ALTER TABLE \"ala\" ADD ola BOOLEAN DEFAULT " + DEFAULT_BOOLEAN + " NOT NULL;", executor.createSql(operation).trim());
}
public void testCreateSqlWithDefaultByte() {
tuneColumn(TypeEnum.BINARY, DEFAULT_BYTE);
AddColumnExecutor executor = new AddColumnExecutor(null);
System.out.println(executor.createSql(operation).trim());
assertEquals("ALTER TABLE \"ala\" ADD ola BINARY DEFAULT B'" + DEFAULT_BYTE + "' NOT NULL;", executor.createSql(operation).trim());
}
public void testCreateSqlWithDefaultValueText() {
tuneColumn(TypeEnum.TEXT, DEFAULT_TEXT);
setValue("Kamil");
AddColumnExecutor executor = new AddColumnExecutor(null);
System.out.println(executor.createSql(operation).trim());
assertEquals("ALTER TABLE \"ala\" ADD ola TEXT (255) DEFAULT 'ala123' NOT NULL; UPDATE \"ala\" SET ola='Kamil';", executor.createSql(operation).trim());
}
public void testCreateSqlWithDefaultValueTextRandom() {
tuneColumn(TypeEnum.TEXT, DEFAULT_TEXT);
setValue(Column.RANDOM);
AddColumnExecutor executor = new AddColumnExecutor(null);
System.out.println(executor.createSql(operation).trim());
assertEquals("ALTER TABLE \"ala\" ADD ola TEXT (255) DEFAULT 'ala123' NOT NULL; UPDATE \"ala\" SET ola=md5(random()::text);", executor.createSql(operation).trim());
}
}