/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.usergrid.query.validator.users; import net.jcip.annotations.NotThreadSafe; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; import org.apache.usergrid.persistence.Entity; import org.apache.usergrid.query.validator.AbstractQueryIT; import org.apache.usergrid.query.validator.QueryRequest; import org.apache.usergrid.query.validator.QueryResponse; import org.apache.usergrid.query.validator.QueryResultsMatcher; import org.apache.usergrid.utils.StringUtils; import java.util.List; /** * @author Sungju Jin */ @NotThreadSafe public class UserQueryIT extends AbstractQueryIT { @BeforeClass public static void setDatas() throws InterruptedException{ createInitializationDatas("user"); } @Test public void sexEqualAndNameEqual() { String sqlite = "SELECT * FROM users WHERE sex = 'male' and name = 'judekim' LIMIT 10"; String api = "SELECT * WHERE sex = 'male' AND name = 'judekim'"; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); QueryResponse response = validator.execute(request); Assert.assertTrue(response.toString(), response.result()); } @Test public void nameEqualAndSexEqual() { String sqlite = "SELECT * FROM users WHERE name = 'judekim' and sex = 'male' LIMIT 10"; String api = "select * where name = 'judekim' and sex = 'male'"; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); QueryResponse response = validator.execute(request); Assert.assertTrue(response.toString(), response.result()); } @Test public void nameEqualAndSexEqual_limitL20() { String sqlite = "SELECT * FROM users WHERE name = 'judekim' and sex = 'male' LIMIT 20"; String api = "select * where name = 'judekim' and sex = 'male'"; int limit = 20; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); request.getApiQuery().setLimit(limit); QueryResponse response = validator.execute(request); Assert.assertTrue(response.toString(), response.result()); } @Test public void sexEqualAndNameEqualExtra1() { String sqlite = "SELECT * FROM users WHERE sex = 'female' and name = 'curioe' LIMIT 10"; String api = "select * where sex = 'female' and name = 'curioe'"; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); QueryResponse response = validator.execute(request); Assert.assertTrue(response.toString(), response.result()); } @Test public void sexEqualOrNameEqual() { String sqlite = "SELECT * FROM users WHERE sex = 'female' or name = 'curioe' ORDER BY created DESC LIMIT 10"; String api = "select * where sex = 'female' or name = 'curioe' order by created desc"; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); QueryResponse response = validator.execute(request); Assert.assertTrue(response.toString(), response.result()); } @Test @Ignore("TODO: uncomment this test when you are ready to fix USERGRID-1314") public void nameBeginswithAndSexEqualAndAgeGreaterthanequalOrSexEqual_sortNameDesc() { String sqlite = "SELECT * FROM users WHERE name LIKE 'a%' and sex = 'male' and age >= 35 or sex = 'female' " + "ORDER BY name desc LIMIT 10"; String api = "select * where name = 'a*' and sex = 'male' and age >= 35 or sex = 'female' " + "order by name desc"; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); QueryResponse response = validator.execute(request); Assert.assertTrue(response.toString(), response.result()); } @Test @Ignore("TODO: uncomment this test when you are ready to fix USERGRID-1314") public void nameBeginswithAndSexEqualAndAgeGreaterthanequalOrSexEqual_sortAddressAscNameDesc() { String sqlite = "SELECT * FROM users WHERE name LIKE 'a%' and sex = 'male' and age >= 35 or sex = 'female' " + "ORDER BY address asc, name desc LIMIT 4"; String api = "select * where name = 'a*' and sex = 'male' and age >= 35 or sex = 'female' " + "order by address asc, name desc"; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); request.getApiQuery().setLimit(4); QueryResponse response = validator.execute(request); Assert.assertTrue(response.toString(), response.result()); } @Test @Ignore("TODO: uncomment this test when you are ready to fix USERGRID-1314") public void nameBeginswithAndSexEqualAndAgeGreaterthanequalOrSexEqual_sortAddressAscNameDesc_limitL4() { String sqlite = "SELECT * FROM users WHERE name LIKE 'a%' and sex = 'male' and age >= 35 or sex = 'female' " + "ORDER BY address asc, name desc LIMIT 4"; String api = "select * where name = 'a*' and sex = 'male' and age >= 35 or sex = 'female' " + "order by address asc, name desc"; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); request.getApiQuery().setLimit(4); QueryResponse response = validator.execute(request); Assert.assertTrue(response.toString(), response.result()); } @Test public void sexEqual_sortAgeDescExtra1() { String sqlite = "SELECT * FROM users WHERE sex = 'male' ORDER BY age desc LIMIT 10"; String api = "select * where sex = 'male' order by age desc"; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); QueryResponse response = validator.execute(request, new QueryResultsMatcher() { @Override public boolean equals(List<Entity> expectedEntities, List<Entity> actuallyEntities) { boolean equals = expectedEntities.size() == expectedEntities.size(); if( !equals ) return false; for(Entity entity : actuallyEntities) { String sex = (String)entity.getProperty("sex"); if((StringUtils.equals("male",sex)) == false) { return false; } } return equals; } }); Assert.assertTrue(response.toString(), response.result()); } @Test public void sexEqual_sortAgeDescExtra2() { String sqlite = " SELECT * FROM users WHERE sex = 'female' ORDER BY age desc LIMIT 10"; String api = "select * where sex = 'female' order by age desc"; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); QueryResponse response = validator.execute(request); Assert.assertTrue(response.toString(), response.result()); } @Test public void sexEqualAndAgeGreaterthanequal() { String sqlite = " SELECT * FROM users WHERE sex = 'male' and age >= 35 ORDER BY created DESC LIMIT 10"; String api = "select * where sex = 'male' and age >= 35 order by created desc"; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); QueryResponse response = validator.execute(request); Assert.assertTrue(response.toString(), response.result()); } @Test public void sexEqualAndAgeGreaterthanequal_sortAgeDesc() { String sqlite = "SELECT * FROM users WHERE sex = 'male' and age >= 35 ORDER BY age desc LIMIT 10"; String api = "select * where sex = 'male' and age >= 35 order by age desc"; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); QueryResponse response = validator.execute(request); Assert.assertTrue(response.toString(), response.result()); } @Test public void sexEqualAndAgeGreaterthanequal_sortNameDesc() { String sqlite = "SELECT * FROM users WHERE sex = 'male' and age >= 35 ORDER BY name desc LIMIT 10"; String api = "select * where sex = 'male' and age >= 35 order by name desc"; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); QueryResponse response = validator.execute(request); Assert.assertTrue(response.toString(), response.result()); } @Test public void sexEqualAndAgeGreaterthanequal_sortAgeDesc_limitL20() { String sqlite = "SELECT * FROM users WHERE sex = 'male' and age >= 35 ORDER BY age desc LIMIT 20"; String api = "select * where sex = 'male' and age >= 35 order by age desc"; int limit = 20; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); request.getApiQuery().setLimit(limit); QueryResponse response = validator.execute(request); Assert.assertTrue(response.toString(), response.result()); } @Test public void qlSexEqualAndAgeGreaterthanequal_sortNameDesc_limitL20() { String sqlite = "SELECT * FROM users WHERE sex = 'male' and age >= 35 ORDER BY name desc LIMIT 20"; String api = "select * where sex = 'male' and age >= 35 order by name desc"; int limit = 20; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); request.getApiQuery().setLimit(limit); QueryResponse response = validator.execute(request); Assert.assertTrue(response.toString(), response.result()); } @Test public void sexEqualAndAgeGreaterthanequalOrSexEqual() { String sqlite = "SELECT * FROM users WHERE sex = 'male' and age >= 35 or sex = 'female' LIMIT 10"; String api = "select * where sex = 'male' and age >= 35 or sex = 'female'"; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); QueryResponse response = validator.execute(request, new QueryResultsMatcher() { @Override public boolean equals(List<Entity> expectedEntities, List<Entity> actuallyEntities) { boolean equals = expectedEntities.size() == expectedEntities.size(); if( !equals ) return false; for(Entity entity : actuallyEntities) { int age = (Integer)entity.getProperty("age"); String sex = (String)entity.getProperty("sex"); if(((StringUtils.equals("male",sex) && age >= 35) || StringUtils.equals("female",sex)) == false) { return false; } } return equals; } }); Assert.assertTrue(response.toString(), response.result()); } @Test public void sexEqualAndAgeGreaterthanequalOrSexEqual_sortAgeDesc() { String sqlite = "SELECT * FROM users WHERE sex = 'male' and age >= 35 or sex = 'female' " + "ORDER BY age desc LIMIT 10"; String api = "select * where sex = 'male' and age >= 35 or sex = 'female' order by age desc"; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); QueryResponse response = validator.execute(request); Assert.assertTrue(response.toString(), response.result()); } @Test public void limitL12() { String sqlite = "SELECT * FROM users order by created desc LIMIT 12"; String api = null; int limit = 12; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); request.getApiQuery().setLimit(limit); QueryResponse response = validator.execute(request); Assert.assertTrue(response.toString(), response.result()); } @Test public void sexEqualAndAgeGreaterthanequalOrSexEqual_sortNameDesc() { String sqlite = "SELECT * FROM users WHERE sex = 'male' and age >= 35 or sex = 'female' " + "ORDER BY name desc LIMIT 10"; String api = "select * where sex = 'male' and age >= 35 or sex = 'female' order by name desc"; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); QueryResponse response = validator.execute(request); Assert.assertTrue(response.toString(), response.result()); } @Test public void sexEqualAndAgeGreaterthanequalOrSexEqual_sortNameDesc_limitL20() { String sqlite = "SELECT * FROM users WHERE sex = 'male' and age >= 35 or sex = 'female' " + "ORDER BY name desc LIMIT 20"; String api = "select * where sex = 'male' and age >= 35 or sex = 'female' order by name desc"; int limit = 20; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); request.getApiQuery().setLimit(limit); QueryResponse response = validator.execute(request); Assert.assertTrue(response.toString(), response.result()); } @Test public void limitL11() { String sqlite = "SELECT * FROM users order by created desc LIMIT 11"; String api = null; int limit = 11; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); request.getApiQuery().setLimit(limit); QueryResponse response = validator.execute(request); Assert.assertTrue(response.toString(), response.result()); } @Test @Ignore("TODO: uncomment this test when you are ready to fix USERGRID-1314") public void nameBeginswithAndSexEqualAndAgeGreaterthanequalOrSexEqual() { String sqlite = "SELECT * FROM users WHERE name LIKE 'a%' and sex = 'male' and age >= 20 " + "or sex = 'female' LIMIT 10"; String api = "select * where name = 'a*' and sex = 'male' and age >= 20 or sex = 'female'"; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); QueryResponse response = validator.execute(request); Assert.assertTrue(response.toString(), response.result()); } @Test @Ignore("TODO: uncomment this test when you are ready to fix USERGRID-1314") public void nameBeginswithAndSexEqualAndAgeGreaterthanequalOrSexEqual_limitL20() { String sqlite = "SELECT * FROM users WHERE name LIKE 'a%' and sex = 'male' and age >= 20 " + "or sex = 'female' LIMIT 20"; String api = "select * where name = 'a*' and sex = 'male' and age >= 20 or sex = 'female'"; int limit = 20; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); request.getApiQuery().setLimit(limit); QueryResponse response = validator.execute(request); Assert.assertTrue(response.toString(), response.result()); } @Test public void sexEqualAndAgeGreaterthanequal_sortAddressDesc_limitL100() { String sqlite = "SELECT * FROM users WHERE sex = 'male' and age >= 35 ORDER BY address desc LIMIT 100"; String api = "select * where sex = 'male' and age >= 35 order by address desc"; int limit = 100; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); request.getApiQuery().setLimit(limit); QueryResponse response = validator.execute(request); Assert.assertTrue(response.toString(), response.result()); } @Test public void qlNameEqual() { String sqlite = "SELECT * FROM users WHERE name = 'judekim' LIMIT 10"; String api = "select * where name = 'judekim'"; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); QueryResponse response = validator.execute(request); Assert.assertTrue(response.toString(), response.result()); } @Test public void qlAgeEqual() { String sqlite = "SELECT * FROM users WHERE age = 16 LIMIT 10"; String api = "select * where age = 16"; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); QueryResponse response = validator.execute(request); Assert.assertTrue(response.toString(), response.result()); } @Test public void qlNameEqualAndAgeEqual() { String sqlite = "SELECT * FROM users WHERE name = 'askagirl' and age = 16 LIMIT 10"; String api = "select * where name = 'askagirl' and age = 16"; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); QueryResponse response = validator.execute(request, new QueryResultsMatcher() { @Override public boolean equals(List<Entity> expectedEntities, List<Entity> actuallyEntities) { boolean equals = expectedEntities.size() == expectedEntities.size(); if( !equals ) return false; for(Entity entity : actuallyEntities) { String name = entity.getName(); int age = (Integer)entity.getProperty("age"); if ((StringUtils.equals("askagirl", name) && age == 16) == false) { return false; } } return equals; } }); Assert.assertTrue(response.toString(), response.result()); } @Test public void qlAgeLessthan() { String sqlite = "SELECT * FROM users WHERE age < 16 LIMIT 10"; String api = "select * where age < 16"; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); QueryResponse response = validator.execute(request, new QueryResultsMatcher() { @Override public boolean equals(List<Entity> expectedEntities, List<Entity> actuallyEntities) { boolean equals = expectedEntities.size() == expectedEntities.size(); if( !equals ) return false; for(Entity entity : actuallyEntities) { int age = (Integer)entity.getProperty("age"); if((age < 16) == false) { return false; } } return equals; } }); Assert.assertTrue(response.toString(), response.result()); } @Test public void qlAgeLessthanequal() { String sqlite = "SELECT * FROM users WHERE age <= 16 LIMIT 20"; String api = "select * where age <= 16"; int limit = 20; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); request.getApiQuery().setLimit(limit); QueryResponse response = validator.execute(request, new QueryResultsMatcher() { @Override public boolean equals(List<Entity> expectedEntities, List<Entity> actuallyEntities) { boolean equals = expectedEntities.size() == expectedEntities.size(); if( !equals ) return false; for(Entity entity : actuallyEntities) { int age = (Integer)entity.getProperty("age"); if((age <= 16) == false) { return false; } } return equals; } }); Assert.assertTrue(response.toString(), response.result()); } @Test public void qlAgeGreaterthan() { String sqlite = "SELECT * FROM users WHERE age > 16 LIMIT 10"; String api = "select * where age > 16"; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); QueryResponse response = validator.execute(request, new QueryResultsMatcher() { @Override public boolean equals(List<Entity> expectedEntities, List<Entity> actuallyEntities) { boolean equals = expectedEntities.size() == expectedEntities.size(); if( !equals ) return false; for(Entity entity : actuallyEntities) { int age = (Integer)entity.getProperty("age"); if((age > 16) == false) { return false; } } return equals; } }); Assert.assertTrue(response.toString(), response.result()); } @Test public void qlAgeGreaterthanequal() { String sqlite = "SELECT * FROM users WHERE age >= 16 LIMIT 10"; String api = "select * where age >= 16"; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); QueryResponse response = validator.execute(request, new QueryResultsMatcher() { @Override public boolean equals(List<Entity> expectedEntities, List<Entity> actuallyEntities) { boolean equals = expectedEntities.size() == expectedEntities.size(); if( !equals ) return false; for(Entity entity : actuallyEntities) { int age = (Integer)entity.getProperty("age"); if((age >= 16) == false) { return false; } } return equals; } }); Assert.assertTrue(response.toString(), response.result()); } @Test public void qlAgeGreaterthanequalAndAgeLessthan() { String sqlite = "SELECT * FROM users WHERE age >= 32 and age < 40 LIMIT 10"; String api = "select * where age >= 32 and age < 40"; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); QueryResponse response = validator.execute(request, new QueryResultsMatcher() { @Override public boolean equals(List<Entity> expectedEntities, List<Entity> actuallyEntities) { boolean equals = expectedEntities.size() == expectedEntities.size(); if( !equals ) return false; for(Entity entity : actuallyEntities) { int age = (Integer)entity.getProperty("age"); if((age >= 32 && age < 40) == false) { return false; } } return equals; } }); Assert.assertTrue(response.toString(), response.result()); } @Test public void qlAgeGreaterthanequalAndAgeLessthanAndSexEqual() { String sqlite = "SELECT * FROM users WHERE age >= 32 and age < 40 and sex = 'female' LIMIT 10"; String api = "select * where age >= 32 and age < 40 and sex = 'female'"; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); QueryResponse response = validator.execute(request, new QueryResultsMatcher() { @Override public boolean equals(List<Entity> expectedEntities, List<Entity> actuallyEntities) { boolean equals = expectedEntities.size() == expectedEntities.size(); if( !equals ) return false; for(Entity entity : actuallyEntities) { int age = (Integer)entity.getProperty("age"); String sex = (String)entity.getProperty("sex"); if((age >= 32 && age < 40 && StringUtils.equals("female",sex)) == false) { return false; } } return equals; } }); Assert.assertTrue(response.toString(), response.result()); } @Test public void qlAddressFulltext() { String sqlite = "SELECT * FROM users WHERE address LIKE '%서울시%' LIMIT 10"; String api = "select * where address contains '서울시'"; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); QueryResponse response = validator.execute(request, new QueryResultsMatcher() { @Override public boolean equals(List<Entity> expectedEntities, List<Entity> actuallyEntities) { boolean equals = expectedEntities.size() == expectedEntities.size(); if( !equals ) return false; for(Entity entity : actuallyEntities) { String address = (String)entity.getProperty("address"); if((StringUtils.contains(address,"서울시")) == false) { return false; } } return equals; } }); Assert.assertTrue(response.toString(), response.result()); } @Test public void qlAddressFulltextstartswith() { String sqlite = " SELECT * FROM users WHERE address LIKE 'A%' LIMIT 10"; String api = "select * where address contains 'A*'"; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); QueryResponse response = validator.execute(request, new QueryResultsMatcher() { @Override public boolean equals(List<Entity> expectedEntities, List<Entity> actuallyEntities) { boolean equals = expectedEntities.size() == expectedEntities.size(); if( !equals ) return false; for(Entity entity : actuallyEntities) { String address = (String)entity.getProperty("address"); if((StringUtils.startsWith(address,"A")) == false) { return false; } } return equals; } }); Assert.assertTrue(response.toString(), response.result()); } @Test public void qlAddressBeginswith() { String sqlite = "SELECT * FROM users WHERE address LIKE 'B%' LIMIT 10"; String api = "select * where address = 'B*'"; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); QueryResponse response = validator.execute(request, new QueryResultsMatcher() { @Override public boolean equals(List<Entity> expectedEntities, List<Entity> actuallyEntities) { boolean equals = expectedEntities.size() == expectedEntities.size(); if( !equals ) return false; for(Entity entity : actuallyEntities) { String address = (String)entity.getProperty("address"); if((StringUtils.startsWith(address,"B")) == false) { return false; } } return equals; } }); Assert.assertTrue(response.toString(), response.result()); } @Test public void qlAddressBeginswithAndSexFulltextstartswith() { String sqlite = "SELECT * FROM users WHERE address LIKE 'C%' and sex LIKE 'ma%' LIMIT 10"; String api = "select * where address = 'C*' and sex contains 'ma*'"; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); QueryResponse response = validator.execute(request, new QueryResultsMatcher() { @Override public boolean equals(List<Entity> expectedEntities, List<Entity> actuallyEntities) { boolean equals = expectedEntities.size() == expectedEntities.size(); if( !equals ) return false; for(Entity entity : actuallyEntities) { String address = (String)entity.getProperty("address"); if((StringUtils.startsWith(address,"C")) == false) { return false; } } return equals; } }); Assert.assertTrue(response.toString(), response.result()); } @Test public void qlAddressBeginswithAndSexFulltext() { String sqlite = "SELECT * FROM users WHERE (address LIKE 'D%' and sex LIKE '%male%') LIMIT 10"; String api = "select * where address = 'D*' and sex contains 'male'"; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); QueryResponse response = validator.execute(request, new QueryResultsMatcher() { @Override public boolean equals(List<Entity> expectedEntities, List<Entity> actuallyEntities) { boolean equals = expectedEntities.size() == expectedEntities.size(); if( !equals ) return false; for(Entity entity : actuallyEntities) { String address = (String)entity.getProperty("address"); if((StringUtils.startsWith(address,"D")) == false) { return false; } } return equals; } }); Assert.assertTrue(response.toString(), response.result()); } @Test public void qlSexEqualOrAgeGreaterthanequalAndAgeLessthan_limitL20() { String sqlite = "SELECT * FROM users WHERE sex = 'female' or age >= 12 and age < 20 LIMIT 20"; String api = "select * where sex = 'female' or age >= 12 and age < 20"; int limit = 20; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); request.getApiQuery().setLimit(limit); QueryResponse response = validator.execute(request, new QueryResultsMatcher() { @Override public boolean equals(List<Entity> expectedEntities, List<Entity> actuallyEntities) { boolean equals = expectedEntities.size() == expectedEntities.size(); if( !equals ) return false; for(Entity entity : actuallyEntities) { int age = (Integer)entity.getProperty("age"); String sex = (String)entity.getProperty("sex"); if(((StringUtils.equals("female",sex) || age >= 12) && age < 20) == false) { return false; } } return equals; } }); Assert.assertTrue(response.toString(), response.result()); } @Test public void sortNameAsc() { String sqlite = "SELECT * FROM users ORDER BY name asc LIMIT 10"; String api = "select * order by name asc"; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); QueryResponse response = validator.execute(request); Assert.assertTrue(response.toString(), response.result()); } @Test public void sortNameDesc() { String sqlite = "SELECT * FROM users ORDER BY name desc LIMIT 10"; String api = "select * order by name desc"; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); QueryResponse response = validator.execute(request); Assert.assertTrue(response.toString(), response.result()); } @Test public void sortNameAscAgeDesc() { String sqlite = "SELECT * FROM users ORDER BY name asc, age desc LIMIT 10"; String api = "select * order by name asc, age desc"; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); QueryResponse response = validator.execute(request); Assert.assertTrue(response.toString(), response.result()); } @Test public void sortNameAscAddressAsc() { String sqlite = "SELECT * FROM users ORDER BY name asc, address asc LIMIT 10"; String api = "select * order by name asc, address asc"; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); QueryResponse response = validator.execute(request); Assert.assertTrue(response.toString(), response.result()); } @Test public void sortCreatedAsc() { String sqlite = "SELECT * FROM users ORDER BY created asc LIMIT 10"; String api = "select * order by created asc"; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); QueryResponse response = validator.execute(request); Assert.assertTrue(response.toString(), response.result()); } @Test public void sortCreatedDesc() { String sqlite = "SELECT * FROM users ORDER BY created desc LIMIT 10"; String api = "select * order by created desc"; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); QueryResponse response = validator.execute(request); Assert.assertTrue(response.toString(), response.result()); } @Test public void sortModifiedAsc() { String sqlite = "SELECT * FROM users ORDER BY modified asc LIMIT 10"; String api = "select * order by modified asc"; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); QueryResponse response = validator.execute(request); Assert.assertTrue(response.toString(), response.result()); } @Test public void sortCreatedDescNameAsc() { String sqlite = "SELECT * FROM users ORDER BY created desc, name asc LIMIT 10"; String api = "select * order by created desc, name asc"; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); QueryResponse response = validator.execute(request); Assert.assertTrue(response.toString(), response.result()); } @Test public void sortNameAscCreatedDesc() { String sqlite = "SELECT * FROM users ORDER BY name asc, created desc LIMIT 10"; String api = "select * order by name asc, created desc"; QueryRequest request = new QueryRequest(); request.setDbQuery(sqlite); request.getApiQuery().setQuery(api); QueryResponse response = validator.execute(request); Assert.assertTrue(response.toString(), response.result()); } }