diff --git a/spring-boot-samples/spring-boot-sample-data-rest/pom.xml b/spring-boot-samples/spring-boot-sample-data-rest/pom.xml index 3d6f8d54844..8014af03d8a 100644 --- a/spring-boot-samples/spring-boot-sample-data-rest/pom.xml +++ b/spring-boot-samples/spring-boot-sample-data-rest/pom.xml @@ -37,6 +37,11 @@ spring-boot-starter-test test + + com.jayway.jsonpath + json-path + test + diff --git a/spring-boot-samples/spring-boot-sample-data-rest/src/main/java/sample/data/jpa/service/CityRepository.java b/spring-boot-samples/spring-boot-sample-data-rest/src/main/java/sample/data/jpa/service/CityRepository.java index 281e75977e8..42819566419 100644 --- a/spring-boot-samples/spring-boot-sample-data-rest/src/main/java/sample/data/jpa/service/CityRepository.java +++ b/spring-boot-samples/spring-boot-sample-data-rest/src/main/java/sample/data/jpa/service/CityRepository.java @@ -19,6 +19,7 @@ package sample.data.jpa.service; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.repository.PagingAndSortingRepository; +import org.springframework.data.repository.query.Param; import org.springframework.data.rest.core.annotation.RepositoryRestResource; import sample.data.jpa.domain.City; @@ -26,9 +27,11 @@ import sample.data.jpa.domain.City; @RepositoryRestResource(collectionResourceRel = "citys", path = "cities") interface CityRepository extends PagingAndSortingRepository { - Page findByNameContainingAndCountryContainingAllIgnoringCase(String name, - String country, Pageable pageable); + Page findByNameContainingAndCountryContainingAllIgnoringCase( + @Param("name") String name, @Param("country") String country, + Pageable pageable); - City findByNameAndCountryAllIgnoringCase(String name, String country); + City findByNameAndCountryAllIgnoringCase(@Param("name") String name, + @Param("country") String country); } diff --git a/spring-boot-samples/spring-boot-sample-data-rest/src/test/java/sample/data/jpa/SampleDataRestApplicationTests.java b/spring-boot-samples/spring-boot-sample-data-rest/src/test/java/sample/data/jpa/SampleDataRestApplicationTests.java index 825584d5f24..2cbbb97b172 100644 --- a/spring-boot-samples/spring-boot-sample-data-rest/src/test/java/sample/data/jpa/SampleDataRestApplicationTests.java +++ b/spring-boot-samples/spring-boot-sample-data-rest/src/test/java/sample/data/jpa/SampleDataRestApplicationTests.java @@ -29,14 +29,17 @@ import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.web.context.WebApplicationContext; import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.hasSize; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** * Integration test to run the application. * * @author Oliver Gierke + * @author Andy Wilkinson */ @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = SampleDataRestApplication.class) @@ -61,4 +64,22 @@ public class SampleDataRestApplicationTests { this.mvc.perform(get("/")).andExpect(status().isOk()) .andExpect(content().string(containsString("hotels"))); } + + @Test + public void findByNameAndCountry() throws Exception { + + this.mvc.perform( + get("/cities/search/findByNameAndCountryAllIgnoringCase?name=Melbourne&country=Australia")) + .andExpect(status().isOk()) + .andExpect(jsonPath("_embedded.citys", hasSize(1))); + } + + @Test + public void findByContaining() throws Exception { + + this.mvc.perform( + get("/cities/search/findByNameContainingAndCountryContainingAllIgnoringCase?name=&country=UK")) + .andExpect(status().isOk()) + .andExpect(jsonPath("_embedded.citys", hasSize(3))); + } } diff --git a/spring-boot-samples/spring-boot-sample-data-rest/src/test/java/sample/data/jpa/service/CityRepositoryIntegrationTests.java b/spring-boot-samples/spring-boot-sample-data-rest/src/test/java/sample/data/jpa/service/CityRepositoryIntegrationTests.java index 70f4eaf4ca4..6fba01038da 100644 --- a/spring-boot-samples/spring-boot-sample-data-rest/src/test/java/sample/data/jpa/service/CityRepositoryIntegrationTests.java +++ b/spring-boot-samples/spring-boot-sample-data-rest/src/test/java/sample/data/jpa/service/CityRepositoryIntegrationTests.java @@ -27,14 +27,17 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import sample.data.jpa.SampleDataRestApplication; import sample.data.jpa.domain.City; +import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.greaterThan; import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.notNullValue; import static org.junit.Assert.assertThat; /** * Integration tests for {@link CityRepository}. * * @author Oliver Gierke + * @author Andy Wilkinson */ @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = SampleDataRestApplication.class) @@ -49,4 +52,20 @@ public class CityRepositoryIntegrationTests { Page cities = this.repository.findAll(new PageRequest(0, 10)); assertThat(cities.getTotalElements(), is(greaterThan(20L))); } + + @Test + public void findByNameAndCountry() { + City city = this.repository.findByNameAndCountryAllIgnoringCase("Melbourne", + "Australia"); + assertThat(city, notNullValue()); + assertThat(city.getName(), is(equalTo("Melbourne"))); + } + + @Test + public void findContaining() { + Page cities = this.repository + .findByNameContainingAndCountryContainingAllIgnoringCase("", "UK", + new PageRequest(0, 10)); + assertThat(cities.getTotalElements(), is(equalTo(3L))); + } }