package liquibase.changelog.filter;
import liquibase.ContextExpression;
import liquibase.Contexts;
import liquibase.changelog.ChangeSet;
import static org.junit.Assert.*;
import liquibase.database.Database;
import liquibase.sql.visitor.AbstractSqlVisitor;
import org.junit.Test;
public class ContextChangeSetFilterTest {
private static final class TestSqlVisitor extends AbstractSqlVisitor {
public TestSqlVisitor(final String... contexts) {
setContexts(new ContextExpression(contexts));
}
@Override
public String modifySql(String sql, Database database) {
throw new UnsupportedOperationException("modifySql has not been implemented");
}
@Override
public String getName() {
throw new UnsupportedOperationException("getName has not been implemented");
}
@Override
public String getSerializedObjectNamespace() {
return STANDARD_CHANGELOG_NAMESPACE;
}
}
@Test
public void emptyContexts() {
ContextChangeSetFilter filter = new ContextChangeSetFilter();
assertTrue(filter.accepts(new ChangeSet(null, null, false, false, null, "test1", null, null)).isAccepted());
assertTrue(filter.accepts(new ChangeSet(null, null, false, false, null, "test2", null, null)).isAccepted());
assertTrue(filter.accepts(new ChangeSet(null, null, false, false, null, "test1, test2", null, null)).isAccepted());
assertTrue(filter.accepts(new ChangeSet(null, null, false, false, null, null, null, null)).isAccepted());
}
@Test
public void nullContexts() {
ContextChangeSetFilter filter = new ContextChangeSetFilter();
assertTrue(filter.accepts(new ChangeSet(null, null, false, false, null, "test1", null, null)).isAccepted());
assertTrue(filter.accepts(new ChangeSet(null, null, false, false, null, "test2", null, null)).isAccepted());
assertTrue(filter.accepts(new ChangeSet(null, null, false, false, null, "test1, test2", null, null)).isAccepted());
assertTrue(filter.accepts(new ChangeSet(null, null, false, false, null, null, null, null)).isAccepted());
}
@Test public void reallyNullContexts(){
ContextChangeSetFilter filter = new ContextChangeSetFilter(null);
assertTrue(filter.accepts(new ChangeSet(null, null, false, false, null, "test1", null, null)).isAccepted());
assertTrue(filter.accepts(new ChangeSet(null, null, false, false, null, "test1, test2", null, null)).isAccepted());
assertTrue(filter.accepts(new ChangeSet(null, null, false, false, null, null, null, null)).isAccepted());
}
@Test
public void nullListContexts() {
ContextChangeSetFilter filter = new ContextChangeSetFilter();
assertTrue(filter.accepts(new ChangeSet(null, null, false, false, null, "test1", null, null)).isAccepted());
assertTrue(filter.accepts(new ChangeSet(null, null, false, false, null, "test2", null, null)).isAccepted());
assertTrue(filter.accepts(new ChangeSet(null, null, false, false, null, "test1, test2", null, null)).isAccepted());
assertTrue(filter.accepts(new ChangeSet(null, null, false, false, null, null, null, null)).isAccepted());
}
@Test
public void singleContexts() {
ContextChangeSetFilter filter = new ContextChangeSetFilter(new Contexts("TEST1"));
assertTrue(filter.accepts(new ChangeSet(null, null, false, false, null, "test1", null, null)).isAccepted());
assertTrue(filter.accepts(new ChangeSet(null, null, false, false, null, "test1, test2", null, null)).isAccepted());
assertFalse(filter.accepts(new ChangeSet(null, null, false, false, null, "test2", null, null)).isAccepted());
assertTrue(filter.accepts(new ChangeSet(null, null, false, false, null, null, null, null)).isAccepted());
}
@Test
public void multiContexts() {
ContextChangeSetFilter filter = new ContextChangeSetFilter(new Contexts("test1", "test2"));
assertTrue(filter.accepts(new ChangeSet(null, null, false, false, null, "test1", null, null)).isAccepted());
assertTrue(filter.accepts(new ChangeSet(null, null, false, false, null, "test2", null, null)).isAccepted());
assertTrue(filter.accepts(new ChangeSet(null, null, false, false, null, "test1, test2", null, null)).isAccepted());
assertFalse(filter.accepts(new ChangeSet(null, null, false, false, null, "test3", null, null)).isAccepted());
assertTrue(filter.accepts(new ChangeSet(null, null, false, false, null, "test3, test1", null, null)).isAccepted());
assertTrue(filter.accepts(new ChangeSet(null, null, false, false, null, "test3, TEST1", null, null)).isAccepted());
assertTrue(filter.accepts(new ChangeSet(null, null, false, false, null, null, null, null)).isAccepted());
}
@Test
public void multiContextsSingeParameter() {
ContextChangeSetFilter filter = new ContextChangeSetFilter(new Contexts("test1, test2"));
assertTrue(filter.accepts(new ChangeSet(null, null, false, false, null, "test1", null, null)).isAccepted());
assertTrue(filter.accepts(new ChangeSet(null, null, false, false, null, "test2", null, null)).isAccepted());
assertTrue(filter.accepts(new ChangeSet(null, null, false, false, null, "test1, test2", null, null)).isAccepted());
assertFalse(filter.accepts(new ChangeSet(null, null, false, false, null, "test3", null, null)).isAccepted());
assertTrue(filter.accepts(new ChangeSet(null, null, false, false, null, "test3, test1", null, null)).isAccepted());
assertTrue(filter.accepts(new ChangeSet(null, null, false, false, null, "test3, TEST1", null, null)).isAccepted());
assertTrue(filter.accepts(new ChangeSet(null, null, false, false, null, null, null, null)).isAccepted());
}
@Test
public void visitorContextFilterLowerLower() {
ContextChangeSetFilter filter = new ContextChangeSetFilter(new Contexts("test1"));
ChangeSet changeSet = new ChangeSet(null, null, false, false, null, null, null, null);
changeSet.addSqlVisitor(new TestSqlVisitor("test1"));
assertTrue(filter.accepts(changeSet).isAccepted());
assertEquals(1, changeSet.getSqlVisitors().size());
}
@Test
public void visitorContextFilterUpperLower() {
ContextChangeSetFilter filter = new ContextChangeSetFilter(new Contexts("TEST1"));
ChangeSet changeSet = new ChangeSet(null, null, false, false, null, null, null, null);
changeSet.addSqlVisitor(new TestSqlVisitor("test1"));
assertTrue(filter.accepts(changeSet).isAccepted());
assertEquals(1, changeSet.getSqlVisitors().size());
}
@Test
public void visitorContextFilterUpperUpper() {
ContextChangeSetFilter filter = new ContextChangeSetFilter(new Contexts("TEST1"));
ChangeSet changeSet = new ChangeSet(null, null, false, false, null, null, null, null);
changeSet.addSqlVisitor(new TestSqlVisitor("TEST1"));
assertTrue(filter.accepts(changeSet).isAccepted());
assertEquals(1, changeSet.getSqlVisitors().size());
}
@Test
public void visitorContextFilterLowerUpper() {
ContextChangeSetFilter filter = new ContextChangeSetFilter(new Contexts("test1"));
ChangeSet changeSet = new ChangeSet(null, null, false, false, null, null, null, null);
changeSet.addSqlVisitor(new TestSqlVisitor("TEST1"));
assertTrue(filter.accepts(changeSet).isAccepted());
assertEquals(1, changeSet.getSqlVisitors().size());
}
}