package liquibase.changelog.visitor;
import liquibase.change.ColumnConfig;
import liquibase.change.core.CreateTableChange;
import liquibase.changelog.ChangeSet;
import liquibase.changelog.RanChangeSet;
import liquibase.changelog.DatabaseChangeLog;
import liquibase.exception.SetupException;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;
import java.util.ArrayList;
public class ValidatingVisitorTest {
private ChangeSet changeSet1;
private ChangeSet changeSet2;
@Before
public void setup() {
changeSet1 = new ChangeSet("1", "testAuthor", false, false, "path/changelog", null, null);
changeSet2 = new ChangeSet("2", "testAuthor", false, false, "path/changelog", null, null);
}
@Test
public void visit_successful() {
CreateTableChange change1 = new CreateTableChange();
change1.setTableName("table1");
ColumnConfig column1 = new ColumnConfig();
change1.addColumn(column1);
column1.setName("col1");
column1.setType("int");
CreateTableChange change2 = new CreateTableChange();
change2.setTableName("table2");
ColumnConfig column2 = new ColumnConfig();
change2.addColumn(column2);
column2.setName("col2");
column2.setType("int");
changeSet1.addChange(change1);
changeSet2.addChange(change2);
ValidatingVisitor handler = new ValidatingVisitor(new ArrayList<RanChangeSet>());
handler.visit(changeSet1, new DatabaseChangeLog(), null);
handler.visit(changeSet2, new DatabaseChangeLog(), null);
assertTrue(handler.validationPassed());
}
@Test
public void visit_setupException() {
changeSet1.addChange(new CreateTableChange() {
@Override
public void init() throws SetupException {
throw new SetupException("Test message");
}
});
ValidatingVisitor handler = new ValidatingVisitor(new ArrayList<RanChangeSet>());
handler.visit(changeSet1, new DatabaseChangeLog(), null);
assertEquals(1, handler.getSetupExceptions().size());
assertEquals("Test message", handler.getSetupExceptions().get(0).getMessage());
assertFalse(handler.validationPassed());
}
@Test
public void visit_duplicate() {
ValidatingVisitor handler = new ValidatingVisitor(new ArrayList<RanChangeSet>());
handler.visit(changeSet1, new DatabaseChangeLog(), null);
handler.visit(changeSet1, new DatabaseChangeLog(), null);
assertEquals(1, handler.getDuplicateChangeSets().size());
assertFalse(handler.validationPassed());
}
}