/** * Copyright 2015 ArcBees Inc. * * Licensed 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 com.arcbees.gaestudio.server.util; import org.jukito.All; import org.jukito.JukitoModule; import org.jukito.JukitoRunner; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import com.arcbees.gaestudio.testutil.GaeTestBase; import com.google.appengine.api.datastore.Query; import com.google.common.collect.Lists; import static org.assertj.core.api.BDDAssertions.then; import static com.google.appengine.api.datastore.Query.FilterOperator.EQUAL; import static com.google.appengine.api.datastore.Query.FilterOperator.GREATER_THAN; import static com.google.appengine.api.datastore.Query.FilterOperator.GREATER_THAN_OR_EQUAL; import static com.google.appengine.api.datastore.Query.FilterOperator.IN; import static com.google.appengine.api.datastore.Query.FilterOperator.LESS_THAN; import static com.google.appengine.api.datastore.Query.FilterOperator.LESS_THAN_OR_EQUAL; import static com.google.appengine.api.datastore.Query.FilterOperator.NOT_EQUAL; @RunWith(JukitoRunner.class) public class DatastoreHelperTest extends GaeTestBase { public static class Module extends JukitoModule { @Override protected void configureTest() { bindManyNamedInstances(FilterOperation.class, NOT_INEQUALITY, new FilterOperation(EQUAL, ""), new FilterOperation(IN, Lists.newArrayList("")), new FilterOperation(NOT_EQUAL, "")); bindManyNamedInstances(FilterOperation.class, INEQUALITY, new FilterOperation(GREATER_THAN, ""), new FilterOperation(GREATER_THAN_OR_EQUAL, ""), new FilterOperation(LESS_THAN, ""), new FilterOperation(LESS_THAN_OR_EQUAL, "")); } } private static class FilterOperation { private final Query.FilterOperator operator; private final Object value; FilterOperation(Query.FilterOperator operator, Object value) { this.operator = operator; this.value = value; } } private static final String A_KIND = "A_KIND"; private static final String A_PROPERTY = "A_PROPERTY"; private static final String NOT_INEQUALITY = "NOT_INEQUALITY"; private static final String INEQUALITY = "INEQUALITY"; private DatastoreHelper datastoreHelper; @Before public void setUp() { super.setUp(); datastoreHelper = new DatastoreHelper(); } @Test public void preFilterGaeKinds_validQuery_addsFilter() throws Exception { // given Query query = new Query(A_KIND); // when datastoreHelper.preFilterGaeKinds(query); // then then(query.getFilter()).isInstanceOf(Query.FilterPredicate.class); then(query.getFilter()).isNotNull(); } @Test public void preFilterGaeKinds_withFilter_addsFilter(@All(NOT_INEQUALITY) FilterOperation operation) { // given Query query = new Query(A_KIND); query.setFilter(new Query.FilterPredicate(A_PROPERTY, operation.operator, operation.value)); // when datastoreHelper.preFilterGaeKinds(query); // then then(query.getFilter()).isInstanceOf(Query.CompositeFilter.class); } @Test(expected = IllegalArgumentException.class) public void preFilterGaeKinds_withInequalityFilter_throwsIllegalArgumentException( @All(INEQUALITY) FilterOperation operation) throws Exception { // given Query query = new Query(A_KIND); query.setFilter(new Query.FilterPredicate(A_PROPERTY, operation.operator, operation.value)); // when datastoreHelper.preFilterGaeKinds(query); } @Test public void canPreFilterGaeKinds_withFilter_returnsTrue(@All(NOT_INEQUALITY) FilterOperation operation) { // given Query query = new Query(A_KIND); query.setFilter(new Query.FilterPredicate(A_PROPERTY, operation.operator, operation.value)); // when boolean canPreFilter = datastoreHelper.canPreFilterGaeKinds(query); // then then(canPreFilter).isTrue(); } @Test public void canPreFilterGaeKinds_withFilter_returnsFalse(@All(INEQUALITY) FilterOperation operation) { // given Query query = new Query(A_KIND); query.setFilter(new Query.FilterPredicate(A_PROPERTY, operation.operator, operation.value)); // when boolean canPreFilter = datastoreHelper.canPreFilterGaeKinds(query); // then then(canPreFilter).isFalse(); } }