DATAKV-114 - Polishing.

Polished newly added unit tests. Added missing license header and JavaDoc where necessary. More speaking variable names. Removed unnecessary code from test domain type.

Original pull request: #15.
This commit is contained in:
Oliver Gierke
2015-11-02 06:33:39 +01:00
parent 95c56c8dd4
commit d7b2c0f499

View File

@@ -1,18 +1,36 @@
/*
* Copyright 2015 the original author or authors.
*
* 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 org.springframework.data.keyvalue.core;
import static org.hamcrest.Matchers.*;
import static org.hamcrest.Matchers.contains;
import static org.junit.Assert.*;
import static org.mockito.Matchers.*;
import static org.mockito.Mockito.*;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.mockito.Matchers.anyString;
import org.mockito.Mock;
import static org.mockito.Mockito.when;
import org.mockito.runners.MockitoJUnitRunner;
import org.springframework.data.annotation.Id;
import org.springframework.data.keyvalue.core.query.KeyValueQuery;
@@ -23,74 +41,75 @@ import org.springframework.data.repository.query.QueryMethod;
import org.springframework.data.repository.query.parser.PartTree;
import org.springframework.expression.spel.standard.SpelExpression;
import org.springframework.expression.spel.support.StandardEvaluationContext;
import org.springframework.util.ObjectUtils;
/**
* @author Macko Martin <martin.macko@morosystems.cz>
* Unit tests for {@link SpelQueryEngine}.
*
* @author Martin Macko
* @author Oliver Gierke
*/
@RunWith(MockitoJUnitRunner.class)
public class SpelQueryEngineUnitTests {
private final Person BOB_WITH_FIRSTNAME = new Person("bob", 30);
private final Person MIKE_WITHOUT_FIRSTNAME = new Person(null, 25);
static final Person BOB_WITH_FIRSTNAME = new Person("bob", 30);
static final Person MIKE_WITHOUT_FIRSTNAME = new Person(null, 25);
@Mock RepositoryMetadata metadataMock;
@Mock KeyValueAdapter adapterMock;
@Mock KeyValueAdapter adapter;
private Iterable iterablePeople;
SpelQueryEngine<KeyValueAdapter> engine;
Iterable<Person> people = Arrays.asList(BOB_WITH_FIRSTNAME, MIKE_WITHOUT_FIRSTNAME);
@Before
public void setUp() {
List<Person> people = new LinkedList<Person>();
people.add(BOB_WITH_FIRSTNAME);
people.add(MIKE_WITHOUT_FIRSTNAME);
iterablePeople = people;
engine = new SpelQueryEngine<KeyValueAdapter>();
engine.registerAdapter(adapter);
}
/**
* @see DATAKV-114
*/
@Test
public void testExecuteWithPropertyNull() throws Exception {
when(adapterMock.getAllOf(anyString())).thenReturn(iterablePeople);
@SuppressWarnings("unchecked")
public void queriesEntitiesWithNullProperty() throws Exception {
SpelQueryEngine sqe = new SpelQueryEngine();
sqe.registerAdapter(adapterMock);
doReturn(people).when(adapter).getAllOf(anyString());
Collection returnCol = sqe.execute(createQueryForMethodWithArgs("findByFirstname", "bob"), null, -1, -1, anyString());
assertTrue(returnCol.contains(BOB_WITH_FIRSTNAME));
assertThat((Collection<Person>) engine.execute(createQueryForMethodWithArgs("findByFirstname", "bob"), null, -1, -1,
anyString()), contains(BOB_WITH_FIRSTNAME));
}
/**
* @see DATAKV-114
*/
@Test
public void testCountWithPropertyNull() throws Exception {
when(adapterMock.getAllOf(anyString())).thenReturn(iterablePeople);
public void countsEntitiesWithNullProperty() throws Exception {
SpelQueryEngine sqe = new SpelQueryEngine();
sqe.registerAdapter(adapterMock);
doReturn(people).when(adapter).getAllOf(anyString());
long returnCol = sqe.count(createQueryForMethodWithArgs("findByFirstname", "bob"), anyString());
assertThat(returnCol, is(Long.valueOf(1)));
assertThat(engine.count(createQueryForMethodWithArgs("findByFirstname", "bob"), anyString()), is(1L));
}
private SpelExpression createQueryForMethodWithArgs(String methodName, Object... args)
throws NoSuchMethodException, SecurityException {
private static SpelExpression createQueryForMethodWithArgs(String methodName, Object... args) throws Exception {
Class<?>[] argTypes = new Class<?>[args.length];
if (!ObjectUtils.isEmpty(args)) {
List<Class<?>> types = new ArrayList<Class<?>>(args.length);
for (int i = 0; i < args.length; i++) {
argTypes[i] = args[i].getClass();
}
for (Object arg : args) {
types.add(arg.getClass());
}
Method method = PersonRepository.class.getMethod(methodName, argTypes);
Method method = PersonRepository.class.getMethod(methodName, types.toArray(new Class<?>[types.size()]));
RepositoryMetadata metadata = mock(RepositoryMetadata.class);
PartTree partTree = new PartTree(method.getName(), method.getReturnType());
SpelQueryCreator creator = new SpelQueryCreator(partTree, new ParametersParameterAccessor(new QueryMethod(method,
metadataMock).getParameters(), args));
SpelQueryCreator creator = new SpelQueryCreator(partTree,
new ParametersParameterAccessor(new QueryMethod(method, metadata).getParameters(), args));
KeyValueQuery<SpelExpression> q = creator.createQuery();
q.getCritieria().setEvaluationContext(new StandardEvaluationContext(args));
KeyValueQuery<SpelExpression> query = creator.createQuery();
query.getCritieria().setEvaluationContext(new StandardEvaluationContext(args));
return q.getCritieria();
return query.getCritieria();
}
static interface PersonRepository {
@@ -99,71 +118,18 @@ public class SpelQueryEngineUnitTests {
static class Person {
private @Id String id;
private String firstname;
private int age;
public Person() {}
@Id String id;
String firstname;
int age;
public Person(String firstname, int age) {
super();
this.firstname = firstname;
this.age = age;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public int hashCode() {
int hash = 3;
hash = 29 * hash + (this.id != null ? this.id.hashCode() : 0);
hash = 29 * hash + (this.firstname != null ? this.firstname.hashCode() : 0);
hash = 29 * hash + this.age;
return hash;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Person other = (Person) obj;
if ((this.id == null) ? (other.id != null) : !this.id.equals(other.id)) {
return false;
}
if ((this.firstname == null) ? (other.firstname != null) : !this.firstname.equals(other.firstname)) {
return false;
}
if (this.age != other.age) {
return false;
}
return true;
}
}
}