From e4a874c0e9ac287f6c890acf5f83f2150086023b Mon Sep 17 00:00:00 2001 From: Haroon Khan Date: Sat, 15 Oct 2022 17:41:36 +0100 Subject: [PATCH] [JAVA-15377] Update code for Graphql SPQR article --- .../graphql-spqr-boot-starter/README.md | 3 + .../graphql-spqr-boot-starter/pom.xml | 42 ++++++++++++ .../com/baeldung/SpqrBootStarterApp.java} | 4 +- .../main/java/com/baeldung/spqr}/Book.java | 2 +- .../java/com/baeldung/spqr/BookService.java | 59 +++++++++++++++++ .../java/com/baeldung/spqr}/IBookService.java | 4 +- .../SpqrBootStarterAppIntegrationTest.java | 62 ++++++++++++++++++ .../com/baeldung/spqr/SpringContextTest.java | 13 ++++ graphql-modules/graphql-spqr/pom.xml | 30 ++++----- .../java/com/baeldung/spqr}/BookResolver.java | 2 +- .../java/com/baeldung/spqr/BookService.java | 52 ++++++++------- .../com/baeldung/spqr}/GraphqlController.java | 9 +-- .../java/com/baeldung/spqr/IBookService.java | 2 +- .../main/java/com/baeldung/spqr}/SpqrApp.java | 5 +- .../baeldung/spqr/SpqrAppIntegrationTest.java | 61 +++++++++++++++++ .../com/baeldung/spqr/SpringContextTest.java | 12 ++++ graphql-modules/pom.xml | 19 +++++- .../spring-boot-libraries-2/pom.xml | 5 -- .../java/com/baeldung/sprq/BookService.java | 48 -------------- .../GraphqlControllerIntegrationTest.java | 65 ------------------- 20 files changed, 322 insertions(+), 177 deletions(-) create mode 100644 graphql-modules/graphql-spqr-boot-starter/README.md create mode 100644 graphql-modules/graphql-spqr-boot-starter/pom.xml rename graphql-modules/{graphql-spqr/src/main/java/com/baeldung/SpringBootApp.java => graphql-spqr-boot-starter/src/main/java/com/baeldung/SpqrBootStarterApp.java} (69%) rename {spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/sprq => graphql-modules/graphql-spqr-boot-starter/src/main/java/com/baeldung/spqr}/Book.java (97%) create mode 100644 graphql-modules/graphql-spqr-boot-starter/src/main/java/com/baeldung/spqr/BookService.java rename {spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/sprq => graphql-modules/graphql-spqr-boot-starter/src/main/java/com/baeldung/spqr}/IBookService.java (88%) create mode 100644 graphql-modules/graphql-spqr-boot-starter/src/test/java/com/baeldung/spqr/SpqrBootStarterAppIntegrationTest.java create mode 100644 graphql-modules/graphql-spqr-boot-starter/src/test/java/com/baeldung/spqr/SpringContextTest.java rename {spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/sprq => graphql-modules/graphql-spqr/src/main/java/com/baeldung/spqr}/BookResolver.java (97%) rename {spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/sprq => graphql-modules/graphql-spqr/src/main/java/com/baeldung/spqr}/GraphqlController.java (83%) rename {spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/sprq => graphql-modules/graphql-spqr/src/main/java/com/baeldung/spqr}/SpqrApp.java (54%) create mode 100644 graphql-modules/graphql-spqr/src/test/java/com/baeldung/spqr/SpqrAppIntegrationTest.java create mode 100644 graphql-modules/graphql-spqr/src/test/java/com/baeldung/spqr/SpringContextTest.java delete mode 100644 spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/sprq/BookService.java delete mode 100644 spring-boot-modules/spring-boot-libraries-2/src/test/java/com/baeldung/sprq/GraphqlControllerIntegrationTest.java diff --git a/graphql-modules/graphql-spqr-boot-starter/README.md b/graphql-modules/graphql-spqr-boot-starter/README.md new file mode 100644 index 0000000000..7089a7a9f1 --- /dev/null +++ b/graphql-modules/graphql-spqr-boot-starter/README.md @@ -0,0 +1,3 @@ +### Relevant Articles: + +- [Getting Started With GraphQL SPQR and Spring Boot](https://www.baeldung.com/spring-boot-graphql-spqr) diff --git a/graphql-modules/graphql-spqr-boot-starter/pom.xml b/graphql-modules/graphql-spqr-boot-starter/pom.xml new file mode 100644 index 0000000000..6cb1d74329 --- /dev/null +++ b/graphql-modules/graphql-spqr-boot-starter/pom.xml @@ -0,0 +1,42 @@ + + + 4.0.0 + graphql-spqr-boot-starter + 1.0 + graphql-spqr-boot-starter + + + com.baeldung.graphql + graphql-modules + 1.0.0-SNAPSHOT + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-test + test + + + org.springframework.boot + spring-boot-starter-webflux + test + + + io.leangen.graphql + graphql-spqr-spring-boot-starter + ${graphql-spqr-spring-boot-starter-version} + + + + + 0.0.6 + + + \ No newline at end of file diff --git a/graphql-modules/graphql-spqr/src/main/java/com/baeldung/SpringBootApp.java b/graphql-modules/graphql-spqr-boot-starter/src/main/java/com/baeldung/SpqrBootStarterApp.java similarity index 69% rename from graphql-modules/graphql-spqr/src/main/java/com/baeldung/SpringBootApp.java rename to graphql-modules/graphql-spqr-boot-starter/src/main/java/com/baeldung/SpqrBootStarterApp.java index dc49f6a7e4..a91bb22d76 100644 --- a/graphql-modules/graphql-spqr/src/main/java/com/baeldung/SpringBootApp.java +++ b/graphql-modules/graphql-spqr-boot-starter/src/main/java/com/baeldung/SpqrBootStarterApp.java @@ -4,8 +4,8 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication -public class SpringBootApp { +public class SpqrBootStarterApp { public static void main(String[] args) { - SpringApplication.run(SpringBootApp.class, args); + SpringApplication.run(SpqrBootStarterApp.class, args); } } diff --git a/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/sprq/Book.java b/graphql-modules/graphql-spqr-boot-starter/src/main/java/com/baeldung/spqr/Book.java similarity index 97% rename from spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/sprq/Book.java rename to graphql-modules/graphql-spqr-boot-starter/src/main/java/com/baeldung/spqr/Book.java index c6ff9e515a..405eadca84 100644 --- a/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/sprq/Book.java +++ b/graphql-modules/graphql-spqr-boot-starter/src/main/java/com/baeldung/spqr/Book.java @@ -1,4 +1,4 @@ -package com.baeldung.sprq; +package com.baeldung.spqr; import java.util.Objects; diff --git a/graphql-modules/graphql-spqr-boot-starter/src/main/java/com/baeldung/spqr/BookService.java b/graphql-modules/graphql-spqr-boot-starter/src/main/java/com/baeldung/spqr/BookService.java new file mode 100644 index 0000000000..fd63c10dfe --- /dev/null +++ b/graphql-modules/graphql-spqr-boot-starter/src/main/java/com/baeldung/spqr/BookService.java @@ -0,0 +1,59 @@ +package com.baeldung.spqr; + +import io.leangen.graphql.annotations.GraphQLArgument; +import io.leangen.graphql.annotations.GraphQLMutation; +import io.leangen.graphql.annotations.GraphQLQuery; +import io.leangen.graphql.spqr.spring.annotations.GraphQLApi; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Objects; +import java.util.Set; + +@Service +@GraphQLApi +public class BookService implements IBookService { + + private static final Set BOOKS_DATA = initializeData(); + + @GraphQLQuery(name = "getBookWithTitle") + public Book getBookWithTitle(@GraphQLArgument(name = "title") String title) { + return BOOKS_DATA.stream() + .filter(book -> book.getTitle().equals(title)) + .findFirst() + .orElse(null); + } + + @GraphQLQuery(name = "getAllBooks", description = "Get all books") + public List getAllBooks() { + return new ArrayList<>(BOOKS_DATA); + } + + @GraphQLMutation(name = "addBook") + public Book addBook(@GraphQLArgument(name = "newBook") Book book) { + BOOKS_DATA.add(book); + return book; + } + + @GraphQLMutation(name = "updateBook") + public Book updateBook(@GraphQLArgument(name = "modifiedBook") Book book) { + BOOKS_DATA.removeIf(b -> Objects.equals(b.getId(), book.getId())); + BOOKS_DATA.add(book); + return book; + } + + @GraphQLMutation(name = "deleteBook") + public boolean deleteBook(@GraphQLArgument(name = "book") Book book) { + return BOOKS_DATA.remove(book); + } + + private static Set initializeData() { + Book book = new Book(1, "J.R.R. Tolkien", "The Lord of the Rings"); + Set books = new HashSet<>(); + books.add(book); + return books; + } + +} \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/sprq/IBookService.java b/graphql-modules/graphql-spqr-boot-starter/src/main/java/com/baeldung/spqr/IBookService.java similarity index 88% rename from spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/sprq/IBookService.java rename to graphql-modules/graphql-spqr-boot-starter/src/main/java/com/baeldung/spqr/IBookService.java index 1c1257c178..fa92494745 100644 --- a/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/sprq/IBookService.java +++ b/graphql-modules/graphql-spqr-boot-starter/src/main/java/com/baeldung/spqr/IBookService.java @@ -1,4 +1,4 @@ -package com.baeldung.sprq; +package com.baeldung.spqr; import java.util.List; @@ -12,4 +12,4 @@ public interface IBookService { Book updateBook(Book book); boolean deleteBook(Book book); -} \ No newline at end of file +} diff --git a/graphql-modules/graphql-spqr-boot-starter/src/test/java/com/baeldung/spqr/SpqrBootStarterAppIntegrationTest.java b/graphql-modules/graphql-spqr-boot-starter/src/test/java/com/baeldung/spqr/SpqrBootStarterAppIntegrationTest.java new file mode 100644 index 0000000000..ee49711276 --- /dev/null +++ b/graphql-modules/graphql-spqr-boot-starter/src/test/java/com/baeldung/spqr/SpqrBootStarterAppIntegrationTest.java @@ -0,0 +1,62 @@ +package com.baeldung.spqr; + +import com.baeldung.SpqrBootStarterApp; +import org.json.JSONException; +import org.json.JSONObject; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.MediaType; +import org.springframework.test.web.reactive.server.WebTestClient; +import reactor.core.publisher.Mono; + +import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; + +@SpringBootTest(webEnvironment = RANDOM_PORT, classes = SpqrBootStarterApp.class) +class SpqrBootStarterAppIntegrationTest { + + private static final String GRAPHQL_PATH = "/graphql"; + + @Autowired + private WebTestClient webTestClient; + + @Test + void whenGetAllBooks_thenValidResponseReturned() { + String getAllBooksQuery = "{getAllBooks{ id title author }}"; + + webTestClient.post() + .uri(GRAPHQL_PATH) + .contentType(MediaType.APPLICATION_JSON) + .body(Mono.just(toJSON(getAllBooksQuery)), String.class) + .exchange() + .expectStatus().isOk() + .expectBody() + .jsonPath("$.data.getAllBooks").isNotEmpty(); + } + + @Test + void whenAddBook_thenValidResponseReturned() { + String addBookMutation = "mutation { addBook(newBook: {id: 123, author: \"J. K. Rowling\", " + + "title: \"Harry Potter and Philosopher's Stone\"}) { id author title } }"; + + webTestClient.post() + .uri(GRAPHQL_PATH) + .contentType(MediaType.APPLICATION_JSON) + .body(Mono.just(toJSON(addBookMutation)), String.class) + .exchange() + .expectStatus().isOk() + .expectBody() + .jsonPath("$.data.addBook.id").isEqualTo("123") + .jsonPath("$.data.addBook.title").isEqualTo("Harry Potter and Philosopher's Stone") + .jsonPath("$.data.addBook.author").isEqualTo("J. K. Rowling"); + } + + private static String toJSON(String query) { + try { + return new JSONObject().put("query", query).toString(); + } catch (JSONException e) { + throw new RuntimeException(e); + } + } + +} diff --git a/graphql-modules/graphql-spqr-boot-starter/src/test/java/com/baeldung/spqr/SpringContextTest.java b/graphql-modules/graphql-spqr-boot-starter/src/test/java/com/baeldung/spqr/SpringContextTest.java new file mode 100644 index 0000000000..b3a4b3f2f6 --- /dev/null +++ b/graphql-modules/graphql-spqr-boot-starter/src/test/java/com/baeldung/spqr/SpringContextTest.java @@ -0,0 +1,13 @@ +package com.baeldung.spqr; + +import com.baeldung.SpqrBootStarterApp; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest(classes = SpqrBootStarterApp.class) +class SpringContextTest { + + @Test + void whenSpringContextIsBootstrapped_thenNoExceptions() { + } +} diff --git a/graphql-modules/graphql-spqr/pom.xml b/graphql-modules/graphql-spqr/pom.xml index 3496be8e29..d845d1ac8a 100644 --- a/graphql-modules/graphql-spqr/pom.xml +++ b/graphql-modules/graphql-spqr/pom.xml @@ -13,19 +13,6 @@ 1.0.0-SNAPSHOT - - - - - org.springframework.boot - spring-boot-dependencies - 2.6.4 - pom - import - - - - org.springframework.boot @@ -33,13 +20,24 @@ io.leangen.graphql - graphql-spqr-spring-boot-starter - ${graphql-spqr-spring-boot-starter-version} + spqr + ${spqr-version} + + + + org.springframework.boot + spring-boot-starter-test + test + + + org.springframework.boot + spring-boot-starter-webflux + test - 0.0.6 + 0.11.2 \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/sprq/BookResolver.java b/graphql-modules/graphql-spqr/src/main/java/com/baeldung/spqr/BookResolver.java similarity index 97% rename from spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/sprq/BookResolver.java rename to graphql-modules/graphql-spqr/src/main/java/com/baeldung/spqr/BookResolver.java index 747d52f0af..1b9cd1b3b3 100644 --- a/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/sprq/BookResolver.java +++ b/graphql-modules/graphql-spqr/src/main/java/com/baeldung/spqr/BookResolver.java @@ -1,4 +1,4 @@ -package com.baeldung.sprq; +package com.baeldung.spqr; import io.leangen.graphql.annotations.GraphQLArgument; import io.leangen.graphql.annotations.GraphQLMutation; diff --git a/graphql-modules/graphql-spqr/src/main/java/com/baeldung/spqr/BookService.java b/graphql-modules/graphql-spqr/src/main/java/com/baeldung/spqr/BookService.java index 2e9c6d8367..60069f0307 100644 --- a/graphql-modules/graphql-spqr/src/main/java/com/baeldung/spqr/BookService.java +++ b/graphql-modules/graphql-spqr/src/main/java/com/baeldung/spqr/BookService.java @@ -1,51 +1,53 @@ package com.baeldung.spqr; -import io.leangen.graphql.annotations.GraphQLArgument; -import io.leangen.graphql.annotations.GraphQLMutation; -import io.leangen.graphql.annotations.GraphQLQuery; -import io.leangen.graphql.spqr.spring.annotations.GraphQLApi; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.HashSet; import java.util.List; +import java.util.Objects; import java.util.Set; -import java.util.stream.Collectors; @Service -@GraphQLApi public class BookService implements IBookService { - Set books = new HashSet<>(); + private static final Set BOOKS_DATA = initializeData(); - @GraphQLQuery(name = "getBookWithTitle") - public Book getBookWithTitle(@GraphQLArgument(name = "title") String title) { - return books.stream() - .filter(book -> book.getTitle() - .equals(title)) + @Override + public Book getBookWithTitle(String title) { + return BOOKS_DATA.stream() + .filter(book -> book.getTitle().equals(title)) .findFirst() .orElse(null); } - @GraphQLQuery(name = "getAllBooks", description = "Get all books") + @Override public List getAllBooks() { - return books.stream().collect(Collectors.toList()); + return new ArrayList<>(BOOKS_DATA); } - @GraphQLMutation(name = "addBook") - public Book addBook(@GraphQLArgument(name = "newBook") Book book) { - books.add(book); + @Override + public Book addBook(Book book) { + BOOKS_DATA.add(book); return book; } - @GraphQLMutation(name = "updateBook") - public Book updateBook(@GraphQLArgument(name = "modifiedBook") Book book) { - books.remove(book); - books.add(book); + @Override + public Book updateBook(Book book) { + BOOKS_DATA.removeIf(b -> Objects.equals(b.getId(), book.getId())); + BOOKS_DATA.add(book); return book; } - @GraphQLMutation(name = "deleteBook") - public boolean deleteBook(@GraphQLArgument(name = "book") Book book) { - return books.remove(book); + @Override + public boolean deleteBook(Book book) { + return BOOKS_DATA.remove(book); } -} \ No newline at end of file + + private static Set initializeData() { + Book book = new Book(1, "J.R.R. Tolkien", "The Lord of the Rings"); + Set books = new HashSet<>(); + books.add(book); + return books; + } +} diff --git a/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/sprq/GraphqlController.java b/graphql-modules/graphql-spqr/src/main/java/com/baeldung/spqr/GraphqlController.java similarity index 83% rename from spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/sprq/GraphqlController.java rename to graphql-modules/graphql-spqr/src/main/java/com/baeldung/spqr/GraphqlController.java index b62bdbd6a8..f2257b6dd9 100644 --- a/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/sprq/GraphqlController.java +++ b/graphql-modules/graphql-spqr/src/main/java/com/baeldung/spqr/GraphqlController.java @@ -1,4 +1,4 @@ -package com.baeldung.sprq; +package com.baeldung.spqr; import graphql.ExecutionResult; import graphql.GraphQL; @@ -21,9 +21,10 @@ public class GraphqlController { @Autowired public GraphqlController(BookResolver bookResolver) { - GraphQLSchema schema = new GraphQLSchemaGenerator().withBasePackages("com.baeldung") - .withOperationsFromSingleton(bookResolver) - .generate(); + GraphQLSchema schema = new GraphQLSchemaGenerator() + .withBasePackages("com.baeldung") + .withOperationsFromSingleton(bookResolver) + .generate(); this.graphQL = new GraphQL.Builder(schema).build(); } diff --git a/graphql-modules/graphql-spqr/src/main/java/com/baeldung/spqr/IBookService.java b/graphql-modules/graphql-spqr/src/main/java/com/baeldung/spqr/IBookService.java index fa92494745..708415d754 100644 --- a/graphql-modules/graphql-spqr/src/main/java/com/baeldung/spqr/IBookService.java +++ b/graphql-modules/graphql-spqr/src/main/java/com/baeldung/spqr/IBookService.java @@ -12,4 +12,4 @@ public interface IBookService { Book updateBook(Book book); boolean deleteBook(Book book); -} +} \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/sprq/SpqrApp.java b/graphql-modules/graphql-spqr/src/main/java/com/baeldung/spqr/SpqrApp.java similarity index 54% rename from spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/sprq/SpqrApp.java rename to graphql-modules/graphql-spqr/src/main/java/com/baeldung/spqr/SpqrApp.java index ec471aa8eb..83d81b43b9 100644 --- a/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/sprq/SpqrApp.java +++ b/graphql-modules/graphql-spqr/src/main/java/com/baeldung/spqr/SpqrApp.java @@ -1,12 +1,9 @@ -package com.baeldung.sprq; +package com.baeldung.spqr; -import org.jobrunr.autoconfigure.JobRunrAutoConfiguration; import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication -@EnableAutoConfiguration(exclude = { JobRunrAutoConfiguration.class}) public class SpqrApp { public static void main(String[] args) { diff --git a/graphql-modules/graphql-spqr/src/test/java/com/baeldung/spqr/SpqrAppIntegrationTest.java b/graphql-modules/graphql-spqr/src/test/java/com/baeldung/spqr/SpqrAppIntegrationTest.java new file mode 100644 index 0000000000..b7b3d4404b --- /dev/null +++ b/graphql-modules/graphql-spqr/src/test/java/com/baeldung/spqr/SpqrAppIntegrationTest.java @@ -0,0 +1,61 @@ +package com.baeldung.spqr; + +import org.json.JSONException; +import org.json.JSONObject; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.MediaType; +import org.springframework.test.web.reactive.server.WebTestClient; +import reactor.core.publisher.Mono; + +import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; + +@SpringBootTest(webEnvironment = RANDOM_PORT, classes = SpqrApp.class) +class SpqrAppIntegrationTest { + + private static final String GRAPHQL_PATH = "/graphql"; + + @Autowired + private WebTestClient webTestClient; + + @Test + void whenGetAllBooks_thenValidResponseReturned() { + String getAllBooksQuery = "{getAllBooks{ id title author }}"; + + webTestClient.post() + .uri(GRAPHQL_PATH) + .contentType(MediaType.APPLICATION_JSON) + .body(Mono.just(toJSON(getAllBooksQuery)), String.class) + .exchange() + .expectStatus().isOk() + .expectBody() + .jsonPath("$.getAllBooks").isNotEmpty(); + } + + @Test + void whenAddBook_thenValidResponseReturned() { + String addBookMutation = "mutation { addBook(newBook: {id: 123, author: \"J. K. Rowling\", " + + "title: \"Harry Potter and Philosopher's Stone\"}) { id author title } }"; + + webTestClient.post() + .uri(GRAPHQL_PATH) + .contentType(MediaType.APPLICATION_JSON) + .body(Mono.just(toJSON(addBookMutation)), String.class) + .exchange() + .expectStatus().isOk() + .expectBody() + .jsonPath("$.addBook.id").isEqualTo("123") + .jsonPath("$.addBook.title").isEqualTo("Harry Potter and Philosopher's Stone") + .jsonPath("$.addBook.author").isEqualTo("J. K. Rowling"); + } + + private static String toJSON(String query) { + try { + return new JSONObject().put("query", query).toString(); + } catch (JSONException e) { + throw new RuntimeException(e); + } + } + +} \ No newline at end of file diff --git a/graphql-modules/graphql-spqr/src/test/java/com/baeldung/spqr/SpringContextTest.java b/graphql-modules/graphql-spqr/src/test/java/com/baeldung/spqr/SpringContextTest.java new file mode 100644 index 0000000000..2271ecbdcc --- /dev/null +++ b/graphql-modules/graphql-spqr/src/test/java/com/baeldung/spqr/SpringContextTest.java @@ -0,0 +1,12 @@ +package com.baeldung.spqr; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest(classes = SpqrApp.class) +class SpringContextTest { + + @Test + void whenSpringContextIsBootstrapped_thenNoExceptions() { + } +} diff --git a/graphql-modules/pom.xml b/graphql-modules/pom.xml index 4f0a0f7fb5..28b075a819 100644 --- a/graphql-modules/pom.xml +++ b/graphql-modules/pom.xml @@ -11,15 +11,28 @@ com.baeldung - parent-boot-2 - 0.0.1-SNAPSHOT - ../parent-boot-2 + parent-modules + 1.0.0-SNAPSHOT + + + + + org.springframework.boot + spring-boot-dependencies + 2.6.4 + pom + import + + + + graphql-dgs graphql-java graphql-spqr + graphql-spqr-boot-starter diff --git a/spring-boot-modules/spring-boot-libraries-2/pom.xml b/spring-boot-modules/spring-boot-libraries-2/pom.xml index de4e879089..ab968204b6 100644 --- a/spring-boot-modules/spring-boot-libraries-2/pom.xml +++ b/spring-boot-modules/spring-boot-libraries-2/pom.xml @@ -57,11 +57,6 @@ ${awaitility.version} test - - io.leangen.graphql - spqr - 0.11.2 - org.reflections reflections diff --git a/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/sprq/BookService.java b/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/sprq/BookService.java deleted file mode 100644 index 6dbfe9c6f9..0000000000 --- a/spring-boot-modules/spring-boot-libraries-2/src/main/java/com/baeldung/sprq/BookService.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.baeldung.sprq; - -import org.springframework.context.annotation.Profile; -import org.springframework.stereotype.Service; - -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; - -@Service -public class BookService implements IBookService { - - Set books = new HashSet<>(); - - @Override - public Book getBookWithTitle(String title) { - return books.stream() - .filter(book -> book.getTitle() - .equals(title)) - .findFirst() - .orElse(null); - } - - @Override - public List getAllBooks() { - return books.stream() - .collect(Collectors.toList()); - } - - @Override - public Book addBook(Book book) { - books.add(book); - return book; - } - - @Override - public Book updateBook(Book book) { - books.remove(book); - books.add(book); - return book; - } - - @Override - public boolean deleteBook(Book book) { - return books.remove(book); - } -} diff --git a/spring-boot-modules/spring-boot-libraries-2/src/test/java/com/baeldung/sprq/GraphqlControllerIntegrationTest.java b/spring-boot-modules/spring-boot-libraries-2/src/test/java/com/baeldung/sprq/GraphqlControllerIntegrationTest.java deleted file mode 100644 index 1060ce0427..0000000000 --- a/spring-boot-modules/spring-boot-libraries-2/src/test/java/com/baeldung/sprq/GraphqlControllerIntegrationTest.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.baeldung.sprq; - -import org.json.JSONException; -import org.json.JSONObject; -import org.junit.Ignore; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.http.MediaType; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.test.web.servlet.MockMvc; - -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = SpqrApp.class) -@AutoConfigureMockMvc -public class GraphqlControllerIntegrationTest { - - @Autowired - private MockMvc mockMvc; - - @Autowired - BookService bookService; - - private static final String GRAPHQL_PATH = "/graphql"; - - @Test - @Ignore("spqr lib is not compatible with Boot 2.7.x, related code needs be moved or upgraded to Boot 2.7.x") - public void givenNoBooks_whenReadAll_thenStatusIsOk() throws Exception { - - String getAllBooksQuery = "{ getAllBooks {id author title } }"; - - this.mockMvc.perform(post(GRAPHQL_PATH).content(toJSON(getAllBooksQuery)) - .contentType( - MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.getAllBooks").isEmpty()); - } - - @Test - @Ignore("spqr lib is not compatible with Boot 2.7.x, related code needs be moved or upgraded to Boot 2.7.x") - public void whenAddBook_thenStatusIsOk() throws Exception { - - String addBookMutation = "mutation { addBook(newBook: {id: 123, author: \"J.R.R. Tolkien\", " - + "title: \"The Lord of the Rings\"}) { id author title } }"; - - this.mockMvc.perform(post(GRAPHQL_PATH).content(toJSON(addBookMutation)) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.addBook.id").value("123")) - .andExpect(jsonPath("$.addBook.author").value("J.R.R. Tolkien")) - .andExpect(jsonPath("$.addBook.title").value("The Lord of the Rings")); - } - - private String toJSON(String query) throws JSONException { - JSONObject jsonObject = new JSONObject(); - jsonObject.put("query", query); - return jsonObject.toString(); - } -} \ No newline at end of file