Merge pull request #17 from olivergierke/SGF-113

SGF-113 - Added support to return single entities from query methods.
This commit is contained in:
David Turanski
2012-08-06 06:46:33 -07:00
4 changed files with 67 additions and 7 deletions

View File

@@ -42,4 +42,6 @@ public interface PersonRepository extends CrudRepository<Person, Long> {
Collection<Person> findByFirstnameAndLastname(String firstname, String lastname);
Collection<Person> findByFirstnameOrLastname(String firstname, String lastname);
Person findByLastname(String lastname);
}

View File

@@ -26,6 +26,7 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.IncorrectResultSizeDataAccessException;
import org.springframework.data.gemfire.GemfireTemplate;
import org.springframework.data.gemfire.mapping.GemfireMappingContext;
import org.springframework.data.gemfire.mapping.Regions;
@@ -46,7 +47,7 @@ public abstract class AbstractGemfireRepositoryFactoryIntegrationTests {
@Autowired
List<Region<?, ?>> regions;
Person dave, carter, boyd, stefan, leroi, jeff;
Person dave, carter, boyd, stefan, leroi, jeff, oliverAugust;
PersonRepository repository;
@Before
@@ -58,6 +59,7 @@ public abstract class AbstractGemfireRepositoryFactoryIntegrationTests {
stefan = new Person(4L, "Stefan", "Lessard");
leroi = new Person(5L, "Leroi", "Moore");
jeff = new Person(6L, "Jeff", "Coffin");
oliverAugust = new Person(7L, "Oliver August", "Matthews");
GemfireMappingContext context = new GemfireMappingContext();
@@ -70,6 +72,7 @@ public abstract class AbstractGemfireRepositoryFactoryIntegrationTests {
template.put(stefan.id, stefan);
template.put(leroi.id, leroi);
template.put(jeff.id, jeff);
template.put(oliverAugust.id, oliverAugust);
repository = getRepository(regions);
}
@@ -105,7 +108,7 @@ public abstract class AbstractGemfireRepositoryFactoryIntegrationTests {
@Test
public void executesDerivedQueryWithOrCorrectly() {
assertResultsFound(repository.findByFirstnameOrLastname("Carter", "Matthews"), carter, dave);
assertResultsFound(repository.findByFirstnameOrLastname("Carter", "Matthews"), carter, dave, oliverAugust);
}
/**
@@ -119,6 +122,37 @@ public abstract class AbstractGemfireRepositoryFactoryIntegrationTests {
assertResultsFound(repository.findAll());
}
/**
* @see SGF-113
*/
@Test
public void findsPersonByLastname() {
assertThat(repository.findByLastname("Beauford"), is(carter));
}
/**
* @see SGF-113
*/
@Test
public void returnsNullForEmptyResultForSingleEntityQuery() {
assertThat(repository.findByLastname("Foo"), is(nullValue()));
}
/**
* @see SGF-113
*/
@Test
public void throwsExceptionForMoreThanOneResultForSingleEntityQuery() {
try {
repository.findByLastname("Matthews");
fail("Exception expected!");
} catch (IncorrectResultSizeDataAccessException e) {
assertThat(e.getExpectedSize(), is(1));
assertThat(e.getActualSize(), is(2));
}
}
private <T> void assertResultsFound(Iterable<T> result, T... expected) {
assertThat(result, is(notNullValue()));

View File

@@ -38,7 +38,7 @@ public class GemfireRepositoryFactoryIntegrationTests extends AbstractGemfireRep
}
@Test(expected = IllegalStateException.class)
@SuppressWarnings("unchecked")
@SuppressWarnings({ "unchecked", "rawtypes" })
public void throwsExceptionIfReferencedRegionIsNotConfigured() {
GemfireRepositoryFactory factory = new GemfireRepositoryFactory((Iterable) Collections.emptySet(), null);