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