From 1d3af17572620e858cfff4934a9b814b96c41dff Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Fri, 27 Jan 2017 12:49:24 +0100 Subject: [PATCH] #226 - Polishing. --- .../SpringBooksIntegrationTests.java | 42 ++++++++++--------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/mongodb/aggregation/src/test/java/example/springdata/mongodb/aggregation/SpringBooksIntegrationTests.java b/mongodb/aggregation/src/test/java/example/springdata/mongodb/aggregation/SpringBooksIntegrationTests.java index 6f2fbfa8..c1dea3b4 100644 --- a/mongodb/aggregation/src/test/java/example/springdata/mongodb/aggregation/SpringBooksIntegrationTests.java +++ b/mongodb/aggregation/src/test/java/example/springdata/mongodb/aggregation/SpringBooksIntegrationTests.java @@ -21,9 +21,11 @@ import static org.springframework.data.mongodb.core.aggregation.Aggregation.*; import lombok.Getter; import lombok.Value; +import java.io.File; import java.nio.charset.StandardCharsets; import java.util.List; +import org.assertj.core.util.Files; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -32,7 +34,7 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.core.io.ClassPathResource; import org.springframework.data.annotation.Id; import org.springframework.data.domain.Sort.Direction; -import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.MongoOperations; import org.springframework.data.mongodb.core.aggregation.Aggregation; import org.springframework.data.mongodb.core.aggregation.AggregationResults; import org.springframework.data.mongodb.core.aggregation.ArithmeticOperators; @@ -41,7 +43,6 @@ import org.springframework.data.mongodb.core.aggregation.BucketAutoOperation.Gra import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.util.StreamUtils; import com.mongodb.DBObject; import com.mongodb.util.JSON; @@ -50,6 +51,7 @@ import com.mongodb.util.JSON; * Examples for Spring Books using the MongoDB Aggregation Framework. Data originates from Google's Book search. * * @author Mark Paluch + * @author Oliver Gierke * @see https://www.googleapis.com/books/v1/volumes?q=intitle:spring+framework * @see books = (List) JSON.parse( - StreamUtils.copyToString(new ClassPathResource("books.json").getInputStream(), StandardCharsets.UTF_8)); + if (operations.count(new Query(), "books") == 0) { - mongoTemplate.insert(books, "books"); + File file = new ClassPathResource("books.json").getFile(); + String content = Files.contentOf(file, StandardCharsets.UTF_8); + List books = (List) JSON.parse(content); + + operations.insert(books, "books"); } } @@ -82,9 +86,10 @@ public class SpringBooksIntegrationTests { sort(Direction.ASC, "volumeInfo.title"), // project().and("volumeInfo.title").as("title")); - AggregationResults result = mongoTemplate.aggregate(aggregation, "books", BookTitle.class); + AggregationResults result = operations.aggregate(aggregation, "books", BookTitle.class); - assertThat(result.getMappedResults()).extracting("title") + assertThat(result.getMappedResults())// + .extracting("title")// .containsSequence("Aprende a Desarrollar con Spring Framework", "Beginning Spring", "Beginning Spring 2"); } @@ -100,8 +105,7 @@ public class SpringBooksIntegrationTests { sort(Direction.DESC, "count"), // project("count").and("_id").as("publisher")); - AggregationResults result = mongoTemplate.aggregate(aggregation, "books", - BooksPerPublisher.class); + AggregationResults result = operations.aggregate(aggregation, "books", BooksPerPublisher.class); assertThat(result).hasSize(27); assertThat(result).extracting("publisher").containsSequence("Apress", "Packt Publishing Ltd"); @@ -121,8 +125,7 @@ public class SpringBooksIntegrationTests { sort(Direction.DESC, "count"), // project("count", "titles").and("_id").as("publisher")); - AggregationResults result = mongoTemplate.aggregate(aggregation, "books", - BooksPerPublisher.class); + AggregationResults result = operations.aggregate(aggregation, "books", BooksPerPublisher.class); BooksPerPublisher booksPerPublisher = result.getMappedResults().get(0); @@ -143,7 +146,7 @@ public class SpringBooksIntegrationTests { project("title", "authors"), // sort(Direction.ASC, "title")); - AggregationResults result = mongoTemplate.aggregate(aggregation, "books", BookAndAuthors.class); + AggregationResults result = operations.aggregate(aggregation, "books", BookAndAuthors.class); BookAndAuthors bookAndAuthors = result.getMappedResults().get(1); @@ -171,7 +174,7 @@ public class SpringBooksIntegrationTests { .sum("pagesPerAuthor").as("approxWritten"), // sort(Direction.DESC, "totalPageCount")); - AggregationResults result = mongoTemplate.aggregate(aggregation, "books", PagesPerAuthor.class); + AggregationResults result = operations.aggregate(aggregation, "books", PagesPerAuthor.class); PagesPerAuthor pagesPerAuthor = result.getMappedResults().get(0); @@ -194,7 +197,7 @@ public class SpringBooksIntegrationTests { .andOutput("title").push().as("titles") // .andOutput("titles").count().as("count")); - AggregationResults result = mongoTemplate.aggregate(aggregation, "books", BookFacetPerPage.class); + AggregationResults result = operations.aggregate(aggregation, "books", BookFacetPerPage.class); List mappedResults = result.getMappedResults(); @@ -215,6 +218,7 @@ public class SpringBooksIntegrationTests { * author name. */ @Test + @SuppressWarnings("unchecked") public void shouldCategorizeInMultipleFacetsByPriceAndAuthor() { Aggregation aggregation = newAggregation( // @@ -236,12 +240,12 @@ public class SpringBooksIntegrationTests { .andOutput("author").push().as("authors") // ).as("authors")); - AggregationResults result = mongoTemplate.aggregate(aggregation, "books", DBObject.class); + AggregationResults result = operations.aggregate(aggregation, "books", DBObject.class); DBObject uniqueMappedResult = result.getUniqueMappedResult(); - assertThat((List) uniqueMappedResult.get("prices")).hasSize(3); - assertThat((List) uniqueMappedResult.get("authors")).hasSize(8); + assertThat((List) uniqueMappedResult.get("prices")).hasSize(3); + assertThat((List) uniqueMappedResult.get("authors")).hasSize(8); } @Value