package liquibase.change.core;
import liquibase.change.AbstractChangeTest;
import liquibase.database.Database;
import liquibase.database.core.MockDatabase;
import liquibase.database.core.SQLiteDatabase;
import liquibase.statement.SqlStatement;
import liquibase.statement.core.AddForeignKeyConstraintStatement;
import static org.junit.Assert.*;
import org.junit.Test;
public class AddForeignKeyConstraintChangeTest extends AbstractChangeTest {
@Override
@Test
public void generateStatement() throws Exception {
AddForeignKeyConstraintChange change = new AddForeignKeyConstraintChange();
change.setConstraintName("FK_NAME");
change.setBaseTableSchemaName("BASE_SCHEMA_NAME");
change.setBaseTableName("BASE_TABLE_NAME");
change.setBaseColumnNames("BASE_COL_NAME");
change.setReferencedTableSchemaName("REF_SCHEMA_NAME");
change.setReferencedTableName("REF_TABLE_NAME");
change.setReferencedColumnNames("REF_COL_NAME");
change.setDeferrable(true);
change.setDeleteCascade(true);
change.setInitiallyDeferred(true);
change.setReferencesUniqueColumn(false);
SqlStatement[] statements = change.generateStatements(new MockDatabase());
assertEquals(1, statements.length);
AddForeignKeyConstraintStatement statement = (AddForeignKeyConstraintStatement) statements[0];
assertEquals("FK_NAME", statement.getConstraintName());
assertEquals("BASE_SCHEMA_NAME", statement.getBaseTableSchemaName());
assertEquals("BASE_TABLE_NAME", statement.getBaseTableName());
assertEquals("BASE_COL_NAME", statement.getBaseColumnNames());
assertEquals("REF_SCHEMA_NAME", statement.getReferencedTableSchemaName());
assertEquals("REF_TABLE_NAME", statement.getReferencedTableName());
assertEquals("REF_COL_NAME", statement.getReferencedColumnNames());
assertEquals(true, statement.isDeferrable());
assertEquals(true, statement.isInitiallyDeferred());
assertEquals(false, statement.getReferencesUniqueColumn());
assertEquals("CASCADE", statement.getOnDelete());
}
@Override
public void getRefactoringName() throws Exception {
assertEquals("Add Foreign Key Constraint", new AddForeignKeyConstraintChange().getChangeMetaData().getDescription());
}
@Override
@Test
public void getConfirmationMessage() throws Exception {
AddForeignKeyConstraintChange change = new AddForeignKeyConstraintChange();
change.setConstraintName("FK_NAME");
change.setBaseTableSchemaName("SCHEMA_NAME");
change.setBaseTableName("TABLE_NAME");
change.setBaseColumnNames("COL_NAME");
assertEquals("Foreign key contraint added to TABLE_NAME (COL_NAME)", change.getConfirmationMessage());
}
@Override
protected boolean changeIsUnsupported(Database database) {
return database instanceof SQLiteDatabase;
}
}