package com.interaction.example.odata.northwind; /* * #%L * interaction-example-odata-northwind * %% * 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 org.junit.Ignore; import org.junit.Test; public class QueryOptionJSONITCase extends AbstractNorthwindRuntimeTest { public QueryOptionJSONITCase(RuntimeFacadeType type) { super(type); } @Test public void SystemQueryOptionSimpleTest() { } //@Test public void SystemQueryOptionOrderByTest() { String inp = "SystemQueryOptionOrderByTest"; String uri = "Products?$orderby=ProductID"; testJSONResult(endpointUri, uri, inp); } //@Test public void SystemQueryOptionOrderByDescTest() { String inp = "SystemQueryOptionOrderByDescTest"; String uri = "Products?$orderby=ProductID desc"; testJSONResult(endpointUri, uri, inp); } //@Test public void SystemQueryOptionTopTest() { String inp = "SystemQueryOptionTopTest"; String uri = "Products?$top=5"; testJSONResult(endpointUri, uri, inp); } //@Test public void SystemQueryOptionOrderByTopTest() { String inp = "SystemQueryOptionOrderByTopTest"; String uri = "Products?$top=5&$orderby=ProductName desc"; testJSONResult(endpointUri, uri, inp); } //@Test public void SystemQueryOptionSkipTest() { String inp = "SystemQueryOptionSkipTest"; String uri = "Categories(1)/Products?$skip=2"; testJSONResult(endpointUri, uri, inp); } //@Test public void SystemQueryOptionOrderBySkipTest() { String inp = "SystemQueryOptionOrderBySkipTest"; String uri = "Products?$skip=2&$top=2&$orderby=ProductName"; testJSONResult(endpointUri, uri, inp); } // //@Test // public void SystemQueryOptionTop5000Test() { // String inp = "SystemQueryOptionTop5000Test"; // String uri = "Products?$top=5000"; // TestUtils.testJSONResult(endpointUri, uri, inp); // } //@Test public void SystemQueryOptionSkipTokenTest() { String inp = "SystemQueryOptionSkipTokenTest"; String uri = "Customers?$top=5&$skiptoken='ANATR'"; testJSONResult(endpointUri, uri, inp); } //@Test public void SystemQueryOptionSkipTokenComplexKeyTest() { String inp = "SystemQueryOptionSkipTokenComplexKeyTest"; String uri = "Order_Details?$top=5&$skiptoken=OrderID=10248,ProductID=11"; testJSONResult(endpointUri, uri, inp); } //@Test public void SystemQueryOptionSkipTokenWithOrderByTest() { String inp = "SystemQueryOptionSkipTokenWithOrderByTest"; String uri = "Products?$orderby=SupplierID desc, ProductName&$skiptoken=20,'Gula Malacca',44"; testJSONResult(endpointUri, uri, inp); } //@Test public void SystemQueryOptionFilterEqualNullTest() { String inp = "SystemQueryOptionFilterEqualNullTest"; String uri = "Suppliers?$filter=Region eq null"; testJSONResult(endpointUri, uri, inp); } //@Test public void SystemQueryOptionFilterNotEqualNullTest() { String inp = "SystemQueryOptionFilterNotEqualNullTest"; String uri = "Suppliers?$filter=Region ne null"; testJSONResult(endpointUri, uri, inp); } //@Test public void SystemQueryOptionFilterEqualTest() { String inp = "SystemQueryOptionFilterEqualTest"; String uri = "Suppliers?$filter=Country eq 'Brazil'"; testJSONResult(endpointUri, uri, inp); } //@Test public void SystemQueryOptionFilterGreaterThanTest() { String inp = "SystemQueryOptionFilterGreaterThanTest"; String uri = "Products?$top=20&$filter=UnitPrice gt 20"; testJSONResult(endpointUri, uri, inp); } //@Test public void SystemQueryOptionFilterGreaterThanOrEqualTest() { String inp = "SystemQueryOptionFilterGreaterThanOrEqualTest"; String uri = "Products?$filter=UnitPrice ge 10"; testJSONResult(endpointUri, uri, inp); } //@Test public void SystemQueryOptionFilterLessThanOrEqualTest() { String inp = "SystemQueryOptionFilterLessThanOrEqualTest"; String uri = "Products?$top=20&$filter=UnitPrice le 100"; testJSONResult(endpointUri, uri, inp); } //@Test public void SystemQueryOptionFilterLessThanTest() { String inp = "SystemQueryOptionFilterLessThanTest"; String uri = "Products?$filter=UnitPrice lt 20"; testJSONResult(endpointUri, uri, inp); } //@Test public void SystemQueryOptionFilterLogicalAndTest() { String inp = "SystemQueryOptionFilterLogicalAndTest"; String uri = "Products?$top=20&$filter=UnitPrice le 200 and UnitPrice gt 3.5"; testJSONResult(endpointUri, uri, inp); } //@Test public void SystemQueryOptionFilterLogicalOrTest() { String inp = "SystemQueryOptionFilterLogicalOrTest"; String uri = "Products?$filter=UnitPrice le 3.5 or UnitPrice gt 200"; testJSONResult(endpointUri, uri, inp); } //@Test public void SystemQueryOptionFilterGroupingLogicalAndTest() { String inp = "SystemQueryOptionFilterGroupingLogicalAndTest"; String uri = "Products?$top=10&$filter=%28UnitPrice%20gt%205%29%20and%20%28UnitPrice%20lt%2020%29"; testJSONResult(endpointUri, uri, inp); } //@Test public void SystemQueryOptionFilterAdditionTest() { String inp = "SystemQueryOptionFilterAdditionTest"; String uri = "Products?$filter=UnitPrice add 5 gt 10"; testJSONResult(endpointUri, uri, inp); } //@Test public void SystemQueryOptionFilterSubtractionTest() { String inp = "SystemQueryOptionFilterSubtractionTest"; String uri = "Products?$filter=UnitPrice sub 5 gt 10"; testJSONResult(endpointUri, uri, inp); } //@Test public void SystemQueryOptionFilterMultiplicationTest() { String inp = "SystemQueryOptionFilterMultiplicationTest"; String uri = "Products?$filter=UnitPrice mul 2 gt 2000"; testJSONResult(endpointUri, uri, inp); } //@Test public void SystemQueryOptionFilterDivisionTest() { String inp = "SystemQueryOptionFilterDivisionTest"; String uri = "Products?$filter=UnitPrice div 2 gt 4"; testJSONResult(endpointUri, uri, inp); } //@Test public void SystemQueryOptionFilterModuloTest() { String inp = "SystemQueryOptionFilterModuloTest"; String uri = "Products?$filter=ProductID mod 8 eq 2"; testJSONResult(endpointUri, uri, inp); } //@Test public void SystemQueryOptionFilterGroupingArithmeticSubTest() { String inp = "SystemQueryOptionFilterGroupingArithmeticSubTest"; String uri = "Products?$filter=(UnitPrice sub 5) gt 10"; testJSONResult(endpointUri, uri, inp); } //@Test public void SystemQueryOptionFilterLogicalNotTest() { String inp = "SystemQueryOptionFilterLogicalNotTest"; String uri = "Products?$filter=not endswith(QuantityPerUnit,'bags')"; testJSONResult(endpointUri, uri, inp); } //@Test public void SystemQueryOptionFilterLogicalNotTest2() { String inp = "SystemQueryOptionFilterLogicalNotTest2"; String uri = "Products?$filter=not (Discontinued eq 1 or UnitsOnOrder le 70)"; testJSONResult(endpointUri, uri, inp); } //@Test public void SystemQueryOptionFilterBoolSubstringOfTest() { String inp = "SystemQueryOptionFilterBoolSubstringOfTest"; String uri = "Customers?$filter=substringof('Alfreds', CompanyName) eq true"; testJSONResult(endpointUri, uri, inp); } //@Test public void SystemQueryOptionFilterBoolEndswithTest() { String inp = "SystemQueryOptionFilterBoolEndswithTest"; String uri = "Customers?$filter=endswith(CompanyName, 'Futterkiste') eq true"; testJSONResult(endpointUri, uri, inp); } //@Test public void SystemQueryOptionFilterBoolStartswithTest() { String inp = "SystemQueryOptionFilterBoolStartswithTest"; String uri = "Customers?$filter=startswith(CompanyName, 'Alfr') eq true"; testJSONResult(endpointUri, uri, inp); } //@Test public void SystemQueryOptionFilterIntLengthTest() { String inp = "SystemQueryOptionFilterIntLengthTest"; String uri = "Customers?$filter=length(CompanyName) eq 19"; testJSONResult(endpointUri, uri, inp); } //@Test public void SystemQueryOptionFilterIntIndexofTest() { String inp = "SystemQueryOptionFilterIntIndexofTest"; String uri = "Customers?$filter=indexof(CompanyName, 'lfreds') eq 1"; testJSONResult(endpointUri, uri, inp); } //@Test public void SystemQueryOptionFilterStringReplaceTest() { String inp = "SystemQueryOptionFilterStringReplaceTest"; String uri = "Customers?$filter=replace(CompanyName, ' ', '') eq 'AlfredsFutterkiste'"; testJSONResult(endpointUri, uri, inp); } //@Test public void SystemQueryOptionFilterStringSubstringTest() { String inp = "SystemQueryOptionFilterStringSubstringTest"; String uri = "Customers?$filter=substring(CompanyName, 1) eq 'lfreds Futterkiste'"; testJSONResult(endpointUri, uri, inp); } //@Test public void SystemQueryOptionFilterStringSubstring2Test() { String inp = "SystemQueryOptionFilterStringSubstring2Test"; String uri = "Customers?$filter=substring(CompanyName, 1, 2) eq 'lf'"; testJSONResult(endpointUri, uri, inp); } //@Test public void SystemQueryOptionFilterStringToLowerTest() { String inp = "SystemQueryOptionFilterStringToLowerTest"; String uri = "Customers?$filter=tolower(CompanyName) eq 'alfreds futterkiste'"; testJSONResult(endpointUri, uri, inp); } //@Test public void SystemQueryOptionFilterStringToupperTest() { String inp = "SystemQueryOptionFilterStringToupperTest"; String uri = "Customers?$filter=toupper(CompanyName) eq 'ALFREDS FUTTERKISTE'"; testJSONResult(endpointUri, uri, inp); } //@Test public void SystemQueryOptionFilterStringTrimTest() { String inp = "SystemQueryOptionFilterStringTrimTest"; String uri = "Customers?$filter=trim(CompanyName) eq 'Alfreds Futterkiste'"; testJSONResult(endpointUri, uri, inp); } //@Test public void SystemQueryOptionFilterStringConcatTest() { String inp = "SystemQueryOptionFilterStringConcatTest"; String uri = "Customers?$filter=concat(concat(City, ', '), Country) eq 'Berlin, Germany'"; testJSONResult(endpointUri, uri, inp); } /* * Note on the All/Any tests: * - They are just placeholders until someone implements this in JPA producer. * - The expected results files are checked in. I got them by hosting a * V3 OData service built using the June11 EF CTP */ @Ignore("TODO") @SuppressWarnings("unused") //@Test public void SystemQueryOptionFilterAnyTest() { // get all Customers who have 1 or more Orders // some SQL to run against Northwind: // select count(*) from Customers -- 91 customers // select distinct c.CustomerID from Customers c left outer join Orders o on c.CustomerID = o.CustomerID // where o.OrderID is not null -- 'FISSA', 'PARIS' are the two customers w/out Orders String uri = "Customers?$filter=Orders/any()&$select=CustomerID"; } @Ignore("TODO") @SuppressWarnings("unused") //@Test public void SystemQueryOptionFilterAllTest() { // all Orders whose every associated Order_Details has a Quantity >= 60 /* * select o.OrderID, count(od.Quantity) as thecount, min(od.Quantity) as themin, avg(od.Quantity) as theavg, max(od.Quantity) as themax from Orders as o inner join [Order Details] od on o.OrderID = od.OrderID group by o.OrderID having min(od.Quantity) >= 60 * * Interesting: that query shows 7 Orders that meet the criteria. However, the .NET * data service returns 8, OrderID=11078 is included even though it has 0 Order_Details! Bug! */ String uri = "Orders?$filter=Order_Details/all(od:od/Quantity ge 60)&$select=OrderID"; } @Ignore("TODO") @SuppressWarnings("unused") //@Test public void SystemQueryOptionFilterAnyPredicateTest() { // all Orders who have one or more associated Order_Details objects with Quantity < 3 /* * select o.OrderID, count(od.Quantity) as thecount, min(od.Quantity) as themin, avg(od.Quantity) as theavg, max(od.Quantity) as themax from Orders as o inner join [Order Details] od on o.OrderID = od.OrderID group by o.OrderID having min(od.Quantity) < 3 */ String uri = "Orders?$filter=Order_Details/any(od:od/Quantity lt 3)&$select=OrderID"; } @Ignore("TODO") @SuppressWarnings("unused") //@Test public void SystemQueryOptionFilterAnyAllTest() { // all Customers who have Orders whose every associated Order_Details has a Quantity >= 60 /* * select distinct c.CustomerID from Customers c left outer join Orders o on c.CustomerID = o.CustomerID where o.OrderID in ( select o2.OrderID from Orders as o2 inner join [Order Details] od on o2.OrderID = od.OrderID group by o2.OrderID having min(od.Quantity) >= 60 ) order by c.CustomerID */ String uri = "Customers?$filter=Orders/any(o:o/Order_Details/all(od:od/Quantity ge 60))&$select=CustomerID"; } // TODO: date time // //@Test // public void SystemQueryOptionFilterIntDayTest() { // String inp = "SystemQueryOptionFilterIntDayTest"; // String uri = "Employees?$filter=day(BirthDate) eq 8"; // NorthwindTestUtils.testJSONResult(endpointUri, uri, inp); // } // //@Test // public void SystemQueryOptionFilterIntHourTest() { // String inp = "SystemQueryOptionFilterIntHourTest"; // String uri = "Employees?$filter=hour(BirthDate) eq 0"; // NorthwindTestUtils.testJSONResult(endpointUri, uri, inp); // } // // //@Test // public void SystemQueryOptionFilterIntMinuteTest() { // String inp = "SystemQueryOptionFilterIntMinuteTest"; // String uri = "Employees?$filter=minute(BirthDate) eq 0"; // NorthwindTestUtils.testJSONResult(endpointUri, uri, inp); // } // // //@Test // public void SystemQueryOptionFilterIntMonthTest() { // String inp = "SystemQueryOptionFilterIntMonthTest"; // String uri = "Employees?$filter=month(BirthDate) eq 12"; // NorthwindTestUtils.testJSONResult(endpointUri, uri, inp); // } // // //@Test // public void SystemQueryOptionFilterIntSecondTest() { // String inp = "SystemQueryOptionFilterIntSecondTest"; // String uri = "Employees?$filter=second(BirthDate) eq 0"; // NorthwindTestUtils.testJSONResult(endpointUri, uri, inp); // } // // //@Test // public void SystemQueryOptionFilterIntYearTest() { // String inp = "SystemQueryOptionFilterIntYearTest"; // String uri = "Employees?$filter=year(BirthDate) eq 1948"; // NorthwindTestUtils.testJSONResult(endpointUri, uri, inp); // } // TODO: numeric // //@Test // public void SystemQueryOptionFilterRoundTest() { // String inp = "SystemQueryOptionFilterRoundTest"; // String uri = "Orders?$filter=round(Freight) eq 32"; // NorthwindTestUtils.testJSONResult(endpointUri, uri, inp); // } // //@Test // public void SystemQueryOptionFilterDecimalFloorTest() { // String inp = "SystemQueryOptionFilterDecimalFloorTest"; // String uri = "Orders?$filter=floor(Freight) eq 32"; // NorthwindTestUtils.testJSONResult(endpointUri, uri, inp); // } // // //@Test // public void SystemQueryOptionFilterDoubleCeilingTest() { // String inp = "SystemQueryOptionFilterDoubleCeilingTest"; // String uri = "Orders?$filter=ceiling(Freight) eq 33"; // NorthwindTestUtils.testJSONResult(endpointUri, uri, inp); // } // // //@Test // public void SystemQueryOptionFilterDecimalCeilingTest() { // String inp = "SystemQueryOptionFilterDecimalCeilingTest"; // String uri = "Orders?$filter=floor(Freight) eq 33"; // NorthwindTestUtils.testJSONResult(endpointUri, uri, inp); // } // TODO: type test // //@Test // public void SystemQueryOptionFilterBoolIsOfTest() { // String inp = "SystemQueryOptionFilterBoolIsOfTest"; // String uri = "Orders?$filter=isof('NorthwindModel.Order')"; // NorthwindTestUtils.testJSONResult(endpointUri, uri, inp); // } // //@Test // public void SystemQueryOptionFilterBoolIsOf2Test() { // String inp = "SystemQueryOptionFilterBoolIsOf2Test"; // String uri = "Orders?$filter=isof(ShipCountry, 'Edm.String')"; // NorthwindTestUtils.testJSONResult(endpointUri, uri, inp); // } //@Test public void SystemQueryOptionExpand1Test() { String inp = "SystemQueryOptionExpand1Test"; String uri = "Categories?$expand=Products"; testJSONResult(endpointUri, uri, inp); } // //@Test // public void SystemQueryOptionExpand2Test() { // String inp = "SystemQueryOptionExpand2Test"; // String uri = "Categories?$expand=Products/Supplier"; // NorthwindTestUtils.testJSONResult(endpointUri, uri, inp); // } //@Test public void SystemQueryOptionExpand3Test() { String inp = "SystemQueryOptionExpand3Test"; String uri = "Products?$expand=Category,Supplier"; testJSONResult(endpointUri, uri, inp); } // //@Test // public void SystemQueryOptionFormatAtomTest() { // String inp = "SystemQueryOptionFormatAtomTest"; // String uri = "Products?$format=atom"; // NorthwindTestUtils.testJSONResult(endpointUri, uri, inp); // } // //@Test // public void SystemQueryOptionFormatJsonTest() { // String inp = "SystemQueryOptionFormatJsonTest"; // String uri = "Products?$top=20&$format=json"; // NorthwindTestUtils.testJSONResult(endpointUri, uri, inp); // } // TODO: select+$expand // //@Test // public void SystemQueryOptionSelect3Test() { // String inp = "SystemQueryOptionSelect3Test"; // String uri = "Categories?$select=CategoryName,Products&$expand=Products/Supplier"; // NorthwindTestUtils.testJSONResult(endpointUri, uri, inp); // } //@Test public void SystemQueryOptionSelect1Test() { String inp = "SystemQueryOptionSelect1Test"; String uri = "Products?$select=UnitPrice,ProductName"; testJSONResult(endpointUri, uri, inp); } //@Test public void SystemQueryOptionSelect2Test() { String inp = "SystemQueryOptionSelect2Test"; String uri = "Products?$select=ProductName,Category"; testJSONResult(endpointUri, uri, inp); } //@Test public void SystemQueryOptionInlinecountTest() { String inp = "SystemQueryOptionInlinecountTest"; String uri = "Products?$inlinecount=allpages"; testJSONResult(endpointUri, uri, inp); } //@Test public void SystemQueryOptionInlinecountTopTest() { String inp = "SystemQueryOptionInlinecountTopTest"; String uri = "Products?$top=5&$inlinecount=allpages&Price gt 200"; testJSONResult(endpointUri, uri, inp); } //@Test public void SystemQueryOptionComplexKeyNavTest() { String inp = "SystemQueryOptionComplexKeyNavTest"; String uri = "Order_Details(OrderID=10248,ProductID=11)/Product"; testJSONResult(endpointUri, uri, inp); } //@Test public void SelectOnSingleEntityTest() { String inp = "SelectOnSingleEntityTest"; String uri = "Products(1)?$select=ProductName"; testJSONResult(endpointUri, uri, inp); } //@Test public void MultiSelectOnSingleEntityTest() { String inp = "MultiSelectOnSingleEntityTest"; String uri = "Products(1)?$select=ProductName,UnitPrice"; testJSONResult(endpointUri, uri, inp); } //@Test public void ExpandOnSingleEntityTest() { String inp = "ExpandOnSingleEntityTest"; String uri = "Products(1)?$expand=Category"; testJSONResult(endpointUri, uri, inp); } //@Test public void SelectExpandOnSingleEntityTest() { String inp = "SelectExpandOnSingleEntityTest"; String uri = "Products(1)?$select=ProductName,Category&$expand=Category"; testJSONResult(endpointUri, uri, inp); } }