package com.temenos.interaction.odataext.odataparser.data;
/*
* #%L
* interaction-odata4j-ext
* %%
* Copyright (C) 2012 - 2013 Temenos Holdings N.V.
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* #L%
*/
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.ArrayList;
import java.util.List;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.odata4j.expression.BoolCommonExpression;
import org.odata4j.producer.resources.OptionsQueryParser;
import com.temenos.interaction.odataext.odataparser.ODataParser;
import com.temenos.interaction.odataext.odataparser.ODataParser.UnsupportedQueryOperationException;
public class RowFiltersTest {
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() {
}
@Test
public void testConstruct() {
String expectedStr = "aname eq avalue";
BoolCommonExpression expected = OptionsQueryParser.parseFilter(expectedStr);
RowFilters filters = new RowFilters(expected);
assertEquals(expected, filters.getOData4jExpression());
}
@Test
public void testEmptyConstruct() {
RowFilters filters = new RowFilters();
assertTrue(filters.isEmpty());
}
@Test
public void testStringConstruct() {
String expectedStr = "aname eq avalue";
RowFilters filters = new RowFilters(expectedStr);
assertEquals(expectedStr, ODataParser.toFilters(filters));
}
@Test
public void testStringConstructEmpty() {
String expectedStr = "";
RowFilters filters = new RowFilters("");
assertEquals(null, filters.getOData4jExpression());
assertEquals(expectedStr, ODataParser.toFilters(filters));
assertTrue(filters.isEmpty());
}
@Test
public void testAddFilter() {
String expectedStr1 = "aname eq avalue";
String expectedStr2 = "aname ne avalue";
String expectedStr3 = "aname gt avalue";
String expected = expectedStr1 + " and " + expectedStr2 + " and " + expectedStr3;
RowFilters filters = new RowFilters(expectedStr1);
filters.addFilters(expectedStr2);
filters.addFilters(expectedStr3);
assertEquals(expected, ODataParser.toFilters(filters));
}
@Test
public void testAddFilters() {
String expectedStr1 = "aname eq avalue";
String expectedStr2 = "aname ne avalue";
String expected = expectedStr1 + " and " + expectedStr2;
RowFilters filters = new RowFilters(expectedStr1);
RowFilters addFilters = new RowFilters(expectedStr2);
filters.addFilters(addFilters);
assertEquals(expected, ODataParser.toFilters(filters));
}
@Test
public void testAddEmptyFilters() {
String expected= "aname eq avalue";
RowFilters filters = new RowFilters(expected);
RowFilters addFilters = new RowFilters();
filters.addFilters(addFilters);
assertEquals(expected, ODataParser.toFilters(filters));
}
@Test
public void testAddBlockAllFilters() {
String expected= "aname eq avalue";
RowFilters filters = new RowFilters(expected);
// Not currently blocking all
assertFalse(filters.isBlockAll());
filters.addFilters((RowFilters)null);
// Now we are blocking all
assertTrue(filters.isBlockAll());
}
@Test
public void testAddToBlockAllFilters() {
String expected= "aname eq avalue";
RowFilters filters = new RowFilters(expected);
filters.addFilters((RowFilters)null);
// Now we are blocking all
assertTrue(filters.isBlockAll());
RowFilters addFilters = new RowFilters("aname eq avalue");
filters.addFilters(addFilters);
// Should still be blocking all
assertTrue(filters.isBlockAll());
}
@Test
@Deprecated
public void testAddFRowilter() {
RowFilter filter1 = new RowFilter("aname", Relation.EQ, "avalue");
RowFilter filter2 = new RowFilter("aname", Relation.NE, "avalue");
List<RowFilter> filterList = new ArrayList<RowFilter>();
filterList.add(filter1);
filterList.add(filter2);
String expected = ODataParser.toFilter(filterList);
RowFilters filters = new RowFilters(filterList);
assertEquals(expected, ODataParser.toFilters(filters));
}
@Test
public void testSimpleToRowFilters() {
String expectedStr = "aname ne avalue";
RowFilters filters = new RowFilters(expectedStr);
List<RowFilter> list = null;
try {
list = filters.asRowFilters();
} catch (Exception e) {
fail("Threw " + e);
}
assertEquals(1, list.size());
assertEquals("aname", list.get(0).getFieldName().getName());
assertEquals(Relation.NE, list.get(0).getRelation());
assertEquals("avalue", list.get(0).getValue());
}
@Test
public void testLiteralToRowFilters() {
String expectedStr = "aname eq 1111";
RowFilters filters = new RowFilters(expectedStr);
List<RowFilter> list = null;
try {
list = filters.asRowFilters();
} catch (Exception e) {
fail("Threw " + e);
}
assertEquals(1, list.size());
assertEquals("aname", list.get(0).getFieldName().getName());
assertEquals(Relation.EQ, list.get(0).getRelation());
assertEquals("1111", list.get(0).getValue());
}
@Test
public void testStringLiteralToRowFilters() {
String expectedStr = "aname gt 'abc'";
RowFilters filters = new RowFilters(expectedStr);
List<RowFilter> list = null;
try {
list = filters.asRowFilters();
} catch (Exception e) {
fail("Threw " + e);
}
assertEquals(1, list.size());
assertEquals("aname", list.get(0).getFieldName().getName());
assertEquals(Relation.GT, list.get(0).getRelation());
assertEquals("'abc'", list.get(0).getValue());
}
@Test
public void testMultipleToRowFilters() {
String expectedStr = "aname1 eq avalue1 and aname2 ne avalue2";
RowFilters filters = new RowFilters(expectedStr);
List<RowFilter> list = null;
try {
list = filters.asRowFilters();
} catch (Exception e) {
fail("Threw " + e);
}
assertEquals(2, list.size());
assertEquals("aname1", list.get(0).getFieldName().getName());
assertEquals(Relation.EQ, list.get(0).getRelation());
assertEquals("avalue1", list.get(0).getValue());
assertEquals("aname2", list.get(1).getFieldName().getName());
assertEquals(Relation.NE, list.get(1).getRelation());
assertEquals("avalue2", list.get(1).getValue());
}
@Test(expected = UnsupportedQueryOperationException.class)
@Deprecated
public void testTooComplexToRowFilter() throws UnsupportedQueryOperationException {
String expectedStr = "aname eq length('rubbish')";
RowFilters filters = new RowFilters(expectedStr);
filters.asRowFilters();
}
@Test
@Deprecated
public void testToEmptyRowFilter() {
String expectedStr = "";
RowFilters filters = new RowFilters(expectedStr);
List<RowFilter> list = null;
try {
list = filters.asRowFilters();
} catch (Exception e) {
fail("Threw " + e);
}
assertEquals(0, list.size());
}
}