/*
* ====================
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright 2008-2009 Sun Microsystems, Inc. All rights reserved.
*
* The contents of this file are subject to the terms of the Common Development
* and Distribution License("CDDL") (the "License"). You may not use this file
* except in compliance with the License.
*
* You can obtain a copy of the License at
* http://opensource.org/licenses/cddl1.php
* See the License for the specific language governing permissions and limitations
* under the License.
*
* When distributing the Covered Code, include this CDDL Header Notice in each file
* and include the License file at http://opensource.org/licenses/cddl1.php.
* If applicable, add the following below this CDDL Header, with the fields
* enclosed by brackets [] replaced by your own identifying information:
* "Portions Copyrighted [year] [name of copyright owner]"
* ====================
* Portions Copyrighted 2014 ForgeRock AS.
*/
package org.identityconnectors.framework.common.objects;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;
import org.identityconnectors.framework.common.objects.filter.Filter;
import org.identityconnectors.framework.common.objects.filter.FilterBuilder;
import org.identityconnectors.framework.common.objects.filter.FilterVisitor;
import org.testng.annotations.Test;
public class FilterBuilderTests {
// =======================================================================
// Equals..
// =======================================================================
@Test
public void equalsFilter() {
Attribute attr;
ConnectorObjectBuilder bld;
bld = new ConnectorObjectBuilder();
bld.setUid("233");
bld.setName(Integer.toString(233));
attr = AttributeBuilder.build("email", "bob@example.com");
bld.addAttribute(attr);
ConnectorObject obj = bld.build();
Filter f = FilterBuilder.equalTo(attr);
assertTrue(f.accept(obj));
bld.addAttribute("email", "something@different.com");
obj = bld.build();
assertFalse(f.accept(obj));
// check when the attribute doesn't exist in the object..
bld = new ConnectorObjectBuilder();
bld.setUid("3234");
bld.setName(Integer.toString(3234));
bld.addAttribute("adflk", "fafkajwe");
assertFalse(f.accept(bld.build()));
}
// =======================================================================
// Comparable..
// =======================================================================
@Test
public void greaterThanFilter() {
Attribute attr;
ConnectorObjectBuilder bld = new ConnectorObjectBuilder();
attr = AttributeBuilder.build("count", 3);
Filter f = FilterBuilder.greaterThan(attr);
bld.addAttribute("count", 4);
bld.setUid("1");
bld.setName(Integer.toString(1));
boolean ret = f.accept(bld.build());
assertTrue(ret);
bld.addAttribute("count", 2);
ret = f.accept(bld.build());
assertFalse(ret);
}
@Test
public void greaterThanEqualsToFilter() {
Attribute attr;
ConnectorObjectBuilder bld = new ConnectorObjectBuilder();
attr = AttributeBuilder.build("count", 3);
Filter f = FilterBuilder.greaterThanOrEqualTo(attr);
bld.addAttribute("count", 4);
bld.setUid("1");
bld.setName(Integer.toString(1));
boolean ret = f.accept(bld.build());
assertTrue(ret);
bld.addAttribute("count", 2);
ret = f.accept(bld.build());
assertFalse(ret);
bld.addAttribute("count", 3);
ret = f.accept(bld.build());
assertTrue(ret);
}
@Test
public void lessThanFilter() {
Attribute attr;
ConnectorObjectBuilder bld = new ConnectorObjectBuilder();
attr = AttributeBuilder.build("count", 50);
Filter f = FilterBuilder.lessThan(attr);
bld.addAttribute("count", 49);
bld.setUid("1");
bld.setName(Integer.toString(1));
boolean ret = f.accept(bld.build());
assertTrue(ret);
bld.addAttribute("count", 51);
ret = f.accept(bld.build());
assertFalse(ret);
}
@Test
public void lessThanEqualToFilter() {
Attribute attr;
ConnectorObjectBuilder bld = new ConnectorObjectBuilder();
attr = AttributeBuilder.build("count", 50);
Filter f = FilterBuilder.lessThanOrEqualTo(attr);
bld.addAttribute("count", 49);
bld.setUid("1");
bld.setName(Integer.toString(1));
boolean ret = f.accept(bld.build());
assertTrue(ret);
bld.addAttribute("count", 51);
ret = f.accept(bld.build());
assertFalse(ret);
bld.addAttribute("count", 50);
ret = f.accept(bld.build());
assertTrue(ret);
}
// =======================================================================
// String compares..
// =======================================================================
@Test
public void startsWithFilter() {
ConnectorObjectBuilder bld = new ConnectorObjectBuilder();
Attribute attr = AttributeBuilder.build("name", "fred");
Filter f = FilterBuilder.startsWith(attr);
bld.setUid("1");
bld.setName(Integer.toString(1));
bld.addAttribute("name", "fredrick");
assertTrue(f.accept(bld.build()));
bld.addAttribute("name", "fasdfklj");
assertFalse(f.accept(bld.build()));
}
@Test
public void endsWithFilter() {
ConnectorObjectBuilder bld = new ConnectorObjectBuilder();
Attribute attr = AttributeBuilder.build("name", "rick");
Filter f = FilterBuilder.endsWith(attr);
bld.setUid("1");
bld.setName(Integer.toString(1));
bld.addAttribute("name", "fredrick");
assertTrue(f.accept(bld.build()));
bld.addAttribute("name", "fakljffd");
assertFalse(f.accept(bld.build()));
}
@Test
public void constainsWithFilter() {
ConnectorObjectBuilder bld = new ConnectorObjectBuilder();
Attribute attr = AttributeBuilder.build("name", "red");
Filter f = FilterBuilder.contains(attr);
bld.setUid("1");
bld.setName(Integer.toString(1));
bld.addAttribute("name", "fredrick");
assertTrue(f.accept(bld.build()));
bld.addAttribute("name", "falkjfklj");
assertFalse(f.accept(bld.build()));
}
// =======================================================================
// Binary Operators
// =======================================================================
@Test
public void andFilter() {
Filter filter = null;
filter = FilterBuilder.and(new TrueFilter(), new TrueFilter());
assertTrue(filter.accept(null));
filter = FilterBuilder.and(new TrueFilter(), new FalseFilter());
assertFalse(filter.accept(null));
filter = FilterBuilder.and(new FalseFilter(), new TrueFilter());
assertFalse(filter.accept(null));
filter = FilterBuilder.and(new FalseFilter(), new FalseFilter());
assertFalse(filter.accept(null));
}
@Test
public void orFilter() {
Filter filter = null;
filter = FilterBuilder.or(new TrueFilter(), new TrueFilter());
assertTrue(filter.accept(null));
filter = FilterBuilder.or(new TrueFilter(), new FalseFilter());
assertTrue(filter.accept(null));
filter = FilterBuilder.or(new FalseFilter(), new TrueFilter());
assertTrue(filter.accept(null));
filter = FilterBuilder.or(new FalseFilter(), new FalseFilter());
assertFalse(filter.accept(null));
}
@Test
public void notFilter() {
Filter filter = null;
filter = FilterBuilder.not(new TrueFilter());
assertFalse(filter.accept(null));
filter = FilterBuilder.not(new FalseFilter());
assertTrue(filter.accept(null));
}
@Test(expectedExceptions = IllegalArgumentException.class)
public void illegalArgument() {
FilterBuilder.lessThan((Attribute) null);
}
// =======================================================================
// Set Contains Filters
// =======================================================================
@Test
public void containsAllValuesFilterTrue() {
Filter f = null;
ConnectorObjectBuilder bld = new ConnectorObjectBuilder();
bld.setUid("1");
bld.setName("1");
bld.addAttribute("a", "a", "b", "c");
f = FilterBuilder.containsAllValues(AttributeBuilder.build("a", "a"));
assertTrue(f.accept(bld.build()));
}
@Test
public void containsAllValuesFilterFalse() {
Filter f = null;
ConnectorObjectBuilder bld = new ConnectorObjectBuilder();
bld.setUid("2");
bld.setName("1");
bld.addAttribute("a", "a", "b", "c");
f = FilterBuilder.containsAllValues(AttributeBuilder.build("b", "a"));
assertFalse(f.accept(bld.build()));
f = FilterBuilder.containsAllValues(AttributeBuilder.build("a", "d"));
assertFalse(f.accept(bld.build()));
}
// =======================================================================
// Filters
// =======================================================================
static class TrueFilter implements Filter {
public boolean accept(ConnectorObject obj) {
return true;
}
public <R, P> R accept(FilterVisitor<R, P> v, P p) {
return v.visitExtendedFilter(p, this);
}
}
static class FalseFilter implements Filter {
public boolean accept(ConnectorObject obj) {
return false;
}
public <R, P> R accept(FilterVisitor<R, P> v, P p) {
return v.visitExtendedFilter(p, this);
}
}
}