package liquibase.ext.ora.addcheck; import static org.junit.Assert.assertEquals; import java.util.ArrayList; import java.util.List; import liquibase.change.Change; import liquibase.change.ChangeFactory; import liquibase.change.ChangeMetaData; import liquibase.changelog.ChangeLogParameters; import liquibase.changelog.ChangeSet; import liquibase.changelog.DatabaseChangeLog; import liquibase.database.Database; import liquibase.database.core.OracleDatabase; import liquibase.ext.ora.testing.BaseTestCase; import liquibase.parser.ChangeLogParserFactory; import liquibase.resource.FileSystemResourceAccessor; import liquibase.resource.ResourceAccessor; import liquibase.sql.Sql; import liquibase.sqlgenerator.SqlGeneratorFactory; import liquibase.statement.SqlStatement; import org.junit.Before; import org.junit.Test; public class AddCheckChangeTest extends BaseTestCase { @Before public void setUp() throws Exception { changeLogFile = "liquibase/ext/ora/addcheck/changelog.test.xml"; connectToDB(); cleanDB(); } @Test public void test() throws Exception { if (connection == null) { return; } liquiBase.update("null"); } @Test public void generateStatement() { AddCheckChange change = new AddCheckChange(); change.setSchemaName("SCHEMA_NAME"); change.setTableName("TABLE_NAME"); change.setConstraintName("CONSTRAINT"); change.setCondition("CONDITION"); change.setDeferrable(true); change.setDisable(true); change.setInitiallyDeferred(true); change.setRely(false); change.setValidate(false); SqlStatement[] statements = change.generateStatements(new OracleDatabase()); assertEquals(1, statements.length); AddCheckStatement statement = (AddCheckStatement) statements[0]; assertEquals("SCHEMA_NAME", statement.getSchemaName()); assertEquals("TABLE_NAME", statement.getTableName()); assertEquals("CONSTRAINT", statement.getConstraintName()); assertEquals("CONDITION", statement.getCondition()); assertEquals(true, statement.getDeferrable()); assertEquals(true, statement.getDisable()); assertEquals(true, statement.getInitiallyDeferred()); assertEquals(false, statement.getRely()); assertEquals(false, statement.getValidate()); } @Test public void getConfirmationMessage() { AddCheckChange change = new AddCheckChange(); change.setTableName("TABLE_NAME"); change.setConstraintName("CONSTRAINT"); assertEquals("Constraint check " + change.getConstraintName() + " has been added to " + change.getTableName(), change.getConfirmationMessage()); } @Test public void getChangeMetaData() { AddCheckChange enableCheckChange = new AddCheckChange(); assertEquals("addCheck", ChangeFactory.getInstance().getChangeMetaData(enableCheckChange).getName()); assertEquals("Add Check", ChangeFactory.getInstance().getChangeMetaData(enableCheckChange).getDescription()); assertEquals(ChangeMetaData.PRIORITY_DEFAULT, ChangeFactory.getInstance().getChangeMetaData(enableCheckChange).getPriority()); } @Test public void parseAndGenerate() throws Exception { if (connection == null) { return; } Database database = liquiBase.getDatabase(); ResourceAccessor resourceAccessor = new FileSystemResourceAccessor("src/test/java"); ChangeLogParameters changeLogParameters = new ChangeLogParameters(); DatabaseChangeLog changeLog = ChangeLogParserFactory.getInstance().getParser(changeLogFile, resourceAccessor).parse(changeLogFile, changeLogParameters, resourceAccessor); changeLog.validate(database); List<ChangeSet> changeSets = changeLog.getChangeSets(); List<String> expectedQuery = new ArrayList<String>(); // expectedQuery.add("ALTER TABLE addcheck ADD CONSTRAINT tom_check CHECK(id between 0 and 5 ) DEFERRABLE INITIALLY DEFERRED DISABLE"); // expectedQuery.add("ALTER TABLE addcheck ADD CONSTRAINT tom_check1 CHECK(id between 10 and 15) ENABLE"); expectedQuery.add("ALTER TABLE LBUSER.addcheck ADD CHECK(id between 0 and 5 ) DEFERRABLE INITIALLY DEFERRED DISABLE"); ChangeSet changeSet = changeSets.get(1); Change change = changeSet.getChanges().get(0); Sql[] sql = SqlGeneratorFactory.getInstance().generateSql(change.generateStatements(database)[0], database); assertEquals(expectedQuery.get(0), sql[0].toSql()); } }