diff --git a/elasticsearch/example/src/test/java/example/springdata/elasticsearch/conference/ElasticsearchOperationsTest.java b/elasticsearch/example/src/test/java/example/springdata/elasticsearch/conference/ElasticsearchOperationsTest.java index 4a52ba8a8..50b725dcf 100644 --- a/elasticsearch/example/src/test/java/example/springdata/elasticsearch/conference/ElasticsearchOperationsTest.java +++ b/elasticsearch/example/src/test/java/example/springdata/elasticsearch/conference/ElasticsearchOperationsTest.java @@ -19,6 +19,7 @@ import java.text.ParseException; import java.text.SimpleDateFormat; +import java.util.ArrayList; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -26,7 +27,9 @@ import org.springframework.context.annotation.Configuration; import org.springframework.data.elasticsearch.client.ClientConfiguration; import org.springframework.data.elasticsearch.client.elc.ElasticsearchConfiguration; +import org.springframework.data.elasticsearch.client.elc.ElasticsearchTemplate; import org.springframework.data.elasticsearch.core.ElasticsearchOperations; +import org.springframework.data.elasticsearch.core.SearchHit; import org.springframework.data.elasticsearch.core.geo.GeoPoint; import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates; import org.springframework.data.elasticsearch.core.query.Criteria; @@ -43,6 +46,7 @@ * @author Artur Konczak * @author Oliver Gierke * @author Christoph Strobl + * @author omniCoder77 * @author Prakhar Gupta * @author Peter-Josef Meisch */ @@ -73,6 +77,8 @@ public ClientConfiguration clientConfiguration() { } @Autowired ElasticsearchOperations operations; + @Autowired + ElasticsearchTemplate template; @Test void textSearch() throws ParseException { @@ -103,4 +109,29 @@ void geoSpatialSearch() { assertThat(result).hasSize(2); } -} + + @Test + void shouldUpdateConferenceKeywords() { + var conferenceName = "JDD14 - Cracow"; + var newKeyword = "java-ee"; + + var initialQuery = new CriteriaQuery(new Criteria("name").is(conferenceName)); + SearchHit searchHit = template.searchOne(initialQuery, Conference.class); + assertThat(searchHit).isNotNull(); + + Conference conference = searchHit.getContent(); + String conferenceId = searchHit.getId(); + + int originalKeywordsCount = conference.getKeywords().size(); + assertThat(conference.getKeywords()).doesNotContain(newKeyword); + + conference.getKeywords().add(newKeyword); + + template.save(conference); + + Conference updatedConference = template.get(conferenceId, Conference.class); + assertThat(updatedConference).isNotNull(); + assertThat(updatedConference.getKeywords()).contains(newKeyword); + assertThat(updatedConference.getKeywords()).hasSize(originalKeywordsCount + 1); + } +} \ No newline at end of file diff --git a/elasticsearch/reactive/src/test/java/example/springdata/elasticsearch/conference/ReactiveElasticsearchOperationsTest.java b/elasticsearch/reactive/src/test/java/example/springdata/elasticsearch/conference/ReactiveElasticsearchOperationsTest.java index d446ec15c..50c25f352 100644 --- a/elasticsearch/reactive/src/test/java/example/springdata/elasticsearch/conference/ReactiveElasticsearchOperationsTest.java +++ b/elasticsearch/reactive/src/test/java/example/springdata/elasticsearch/conference/ReactiveElasticsearchOperationsTest.java @@ -17,6 +17,7 @@ import static org.assertj.core.api.Assertions.*; +import org.springframework.data.elasticsearch.client.elc.ReactiveElasticsearchTemplate; import reactor.test.StepVerifier; import java.text.ParseException; @@ -43,6 +44,7 @@ * * @author Christoph Strobl * @author Prakhar Gupta + * @author omniCoder77 * @author Peter-Josef Meisch */ @SpringBootTest( @@ -74,6 +76,8 @@ public ClientConfiguration clientConfiguration() { } @Autowired ReactiveElasticsearchOperations operations; + @Autowired + ReactiveElasticsearchTemplate template; @Test void textSearch() { @@ -100,4 +104,39 @@ private void verify(SearchHit hit, String expectedWord, String expec fail("o_O", e); } } -} + + @Test + void shouldUpdateConferenceKeywordsReactive() { + var conferenceName = "JDD14 - Cracow"; + var newKeyword = "java-ee"; + + var initialQuery = new CriteriaQuery(new Criteria("name").is(conferenceName)); + + StepVerifier.create( + template + .search(initialQuery, Conference.class) + .next() + .flatMap(searchHit -> { + assert searchHit != null; + Conference conference = searchHit.getContent(); + String conferenceId = searchHit.getId(); + + int originalKeywordsCount = conference.getKeywords().size(); + assert !conference.getKeywords().contains(newKeyword); + + conference.getKeywords().add(newKeyword); + + return template.save(conference) + .then(template.get(conferenceId, Conference.class)) + .map(updatedConference -> { + assert updatedConference != null; + assert updatedConference.getKeywords().contains(newKeyword); + assert updatedConference.getKeywords().size() == originalKeywordsCount + 1; + return updatedConference; + }); + }) + ).expectNextCount(1) + .verifyComplete(); + } + +} \ No newline at end of file