From 2bcd660ec0b39a23f882428f8519527eeee43def Mon Sep 17 00:00:00 2001 From: PaulBredl Date: Tue, 16 Apr 2024 11:58:20 +0200 Subject: [PATCH 01/10] upgrade meitrex-common --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index a2535c6..735d8ae 100644 --- a/build.gradle +++ b/build.gradle @@ -48,7 +48,7 @@ repositories { } dependencies { - implementation 'de.unistuttgart.iste.meitrex:meitrex-common:1.0.0' + implementation 'de.unistuttgart.iste.meitrex:meitrex-common:1.0.1' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-graphql' implementation 'org.springframework.boot:spring-boot-starter-test' From 6398e0dd337010089f5e8b15b39e5643a8ea1960 Mon Sep 17 00:00:00 2001 From: PaulBredl Date: Wed, 17 Apr 2024 23:21:12 +0200 Subject: [PATCH 02/10] upgrade meitrex-common --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 735d8ae..0a42610 100644 --- a/build.gradle +++ b/build.gradle @@ -48,7 +48,7 @@ repositories { } dependencies { - implementation 'de.unistuttgart.iste.meitrex:meitrex-common:1.0.1' + implementation 'de.unistuttgart.iste.meitrex:meitrex-common:1.0.2' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-graphql' implementation 'org.springframework.boot:spring-boot-starter-test' From a3abdb94269c456da8ca3b52c5005e39089dfc4d Mon Sep 17 00:00:00 2001 From: PaulBredl Date: Thu, 18 Apr 2024 10:32:24 +0200 Subject: [PATCH 03/10] make clear database better in deleting tables --- .../common/testutil/ClearDatabase.java | 43 ++++++++++++++++--- 1 file changed, 36 insertions(+), 7 deletions(-) diff --git a/src/main/java/de/unistuttgart/iste/meitrex/common/testutil/ClearDatabase.java b/src/main/java/de/unistuttgart/iste/meitrex/common/testutil/ClearDatabase.java index f4d23ad..b1ca9ed 100644 --- a/src/main/java/de/unistuttgart/iste/meitrex/common/testutil/ClearDatabase.java +++ b/src/main/java/de/unistuttgart/iste/meitrex/common/testutil/ClearDatabase.java @@ -7,8 +7,7 @@ import javax.sql.DataSource; import java.sql.*; -import java.util.ArrayList; -import java.util.List; +import java.util.*; /** * JUnit test extension that clears the database after each test. @@ -26,13 +25,13 @@ public class ClearDatabase implements AfterEachCallback, BeforeAllCallback { private DataSource dataSource; - private String[] tablesInOrderOfDeletion = null; + private List tablesInOrderOfDeletion = null; @Override public void beforeAll(ExtensionContext context) { context.getTestClass().ifPresent(testClass -> { if (testClass.isAnnotationPresent(TablesToDelete.class)) { - this.tablesInOrderOfDeletion = testClass.getAnnotation(TablesToDelete.class).value(); + this.tablesInOrderOfDeletion = Arrays.asList(testClass.getAnnotation(TablesToDelete.class).value()); } }); this.dataSource = SpringExtension.getApplicationContext(context).getBean("dataSource", DataSource.class); @@ -40,13 +39,43 @@ public void beforeAll(ExtensionContext context) { @Override public void afterEach(ExtensionContext context) throws SQLException { + deleteTables(); + } + + private void deleteTables() throws SQLException { + List notDeletedTables = getTablesToDelete(); + + while (!notDeletedTables.isEmpty()) { + List tablesToDelete = new ArrayList<>(notDeletedTables); + + RuntimeException lastException = new RuntimeException("Could not delete tables"); + + for (String table : notDeletedTables) { + try { + deleteSingleTable(table); + tablesToDelete.remove(table); + } catch (RuntimeException e) { + lastException = e; + } + } + + if (tablesToDelete.size() == notDeletedTables.size()) { + // no tables were deleted + throw lastException; + } + + notDeletedTables = tablesToDelete; + } + } + + private void deleteSingleTable(String table) { JdbcTemplate template = new JdbcTemplate(this.dataSource); - JdbcTestUtils.deleteFromTables(template, getTablesToDelete()); + JdbcTestUtils.deleteFromTables(template, table); } - private String[] getTablesToDelete() throws SQLException { + private List getTablesToDelete() throws SQLException { if (this.tablesInOrderOfDeletion == null) { - this.tablesInOrderOfDeletion = getAllDbTableNames(this.dataSource).toArray(new String[0]); + this.tablesInOrderOfDeletion = getAllDbTableNames(this.dataSource); } return this.tablesInOrderOfDeletion; } From 8309b8c426050543f0dbb0a96169fcc42bee8d16 Mon Sep 17 00:00:00 2001 From: PaulBredl Date: Sat, 27 Apr 2024 13:21:37 +0200 Subject: [PATCH 04/10] small refactorings --- .../common/testutil/ClearDatabase.java | 20 ++++++++++--------- .../testutil/MeitrexPostgresSqlContainer.java | 4 ++-- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/main/java/de/unistuttgart/iste/meitrex/common/testutil/ClearDatabase.java b/src/main/java/de/unistuttgart/iste/meitrex/common/testutil/ClearDatabase.java index b1ca9ed..98c9f99 100644 --- a/src/main/java/de/unistuttgart/iste/meitrex/common/testutil/ClearDatabase.java +++ b/src/main/java/de/unistuttgart/iste/meitrex/common/testutil/ClearDatabase.java @@ -1,13 +1,19 @@ package de.unistuttgart.iste.meitrex.common.testutil; -import org.junit.jupiter.api.extension.*; +import org.junit.jupiter.api.extension.AfterEachCallback; +import org.junit.jupiter.api.extension.BeforeAllCallback; +import org.junit.jupiter.api.extension.ExtensionContext; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.jdbc.JdbcTestUtils; import javax.sql.DataSource; -import java.sql.*; -import java.util.*; +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; /** * JUnit test extension that clears the database after each test. @@ -43,6 +49,7 @@ public void afterEach(ExtensionContext context) throws SQLException { } private void deleteTables() throws SQLException { + JdbcTemplate template = new JdbcTemplate(this.dataSource); List notDeletedTables = getTablesToDelete(); while (!notDeletedTables.isEmpty()) { @@ -52,7 +59,7 @@ private void deleteTables() throws SQLException { for (String table : notDeletedTables) { try { - deleteSingleTable(table); + JdbcTestUtils.deleteFromTables(template, table); tablesToDelete.remove(table); } catch (RuntimeException e) { lastException = e; @@ -68,11 +75,6 @@ private void deleteTables() throws SQLException { } } - private void deleteSingleTable(String table) { - JdbcTemplate template = new JdbcTemplate(this.dataSource); - JdbcTestUtils.deleteFromTables(template, table); - } - private List getTablesToDelete() throws SQLException { if (this.tablesInOrderOfDeletion == null) { this.tablesInOrderOfDeletion = getAllDbTableNames(this.dataSource); diff --git a/src/main/java/de/unistuttgart/iste/meitrex/common/testutil/MeitrexPostgresSqlContainer.java b/src/main/java/de/unistuttgart/iste/meitrex/common/testutil/MeitrexPostgresSqlContainer.java index 0c63755..395e65c 100644 --- a/src/main/java/de/unistuttgart/iste/meitrex/common/testutil/MeitrexPostgresSqlContainer.java +++ b/src/main/java/de/unistuttgart/iste/meitrex/common/testutil/MeitrexPostgresSqlContainer.java @@ -8,7 +8,7 @@ * This class is a singleton that starts a postgresql container for testing. * It can be used in two ways: *

- * 1. Use the {@link meitrexPostgresSqlContainer} as a JUnit 5 extension: + * 1. Use the {@link MeitrexPostgresSqlContainer} as a JUnit 5 extension: *

  *         @ExtendWith(meitrexPostgresSqlContainer.class)
  *         public class MyTest {
@@ -17,7 +17,7 @@
  *      
* This is the preferred way and is automatically done by the {@link GraphQlApiTest} annotation. *

- * 2. Use the {@link meitrexPostgresSqlContainer} as a container: + * 2. Use the {@link MeitrexPostgresSqlContainer} as a container: *

  *         @Testcontainers
  *         public class MyTest {

From de864624b05890757c7c6c849444b5cf72eee53a Mon Sep 17 00:00:00 2001
From: PaulBredl 
Date: Sat, 27 Apr 2024 13:22:14 +0200
Subject: [PATCH 05/10] add support for graphql websocket testing

---
 build.gradle                                  |  1 +
 .../GraphQlTesterParameterResolver.java       | 72 +++++++++++++++----
 .../meitrex/common/testutil/HeaderUtils.java  |  9 ++-
 3 files changed, 65 insertions(+), 17 deletions(-)

diff --git a/build.gradle b/build.gradle
index 0a42610..66922e6 100644
--- a/build.gradle
+++ b/build.gradle
@@ -53,6 +53,7 @@ dependencies {
 	implementation 'org.springframework.boot:spring-boot-starter-graphql'
 	implementation 'org.springframework.boot:spring-boot-starter-test'
 	implementation 'org.springframework.graphql:spring-graphql-test'
+	implementation 'org.springframework.boot:spring-boot-starter-webflux'
 	compileOnly 'org.projectlombok:lombok'
 	annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
 	annotationProcessor 'org.projectlombok:lombok'
diff --git a/src/main/java/de/unistuttgart/iste/meitrex/common/testutil/GraphQlTesterParameterResolver.java b/src/main/java/de/unistuttgart/iste/meitrex/common/testutil/GraphQlTesterParameterResolver.java
index 49c6505..6a38fc6 100644
--- a/src/main/java/de/unistuttgart/iste/meitrex/common/testutil/GraphQlTesterParameterResolver.java
+++ b/src/main/java/de/unistuttgart/iste/meitrex/common/testutil/GraphQlTesterParameterResolver.java
@@ -2,13 +2,20 @@
 
 import de.unistuttgart.iste.meitrex.common.user_handling.LoggedInUser;
 import lombok.SneakyThrows;
-import org.junit.jupiter.api.extension.*;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.api.extension.ParameterContext;
+import org.junit.jupiter.api.extension.ParameterResolutionException;
+import org.junit.jupiter.api.extension.ParameterResolver;
 import org.springframework.graphql.test.tester.GraphQlTester;
 import org.springframework.graphql.test.tester.HttpGraphQlTester;
+import org.springframework.graphql.test.tester.WebGraphQlTester;
+import org.springframework.graphql.test.tester.WebSocketGraphQlTester;
 import org.springframework.test.context.junit.jupiter.SpringExtension;
 import org.springframework.test.web.reactive.server.WebTestClient;
 import org.springframework.test.web.servlet.client.MockMvcWebTestClient;
 import org.springframework.web.context.WebApplicationContext;
+import org.springframework.web.reactive.socket.client.ReactorNettyWebSocketClient;
+import org.springframework.web.reactive.socket.client.WebSocketClient;
 
 import java.lang.reflect.Field;
 import java.util.Optional;
@@ -30,7 +37,7 @@
  *     public void test(GraphQlTester tester) {
  *        // ...
  * 
- * + *

* If the test class has a field annotated with {@link InjectCurrentUserHeader}, * the user header will be automatically added to the tester. * The field must be of type {@link UUID} or {@link LoggedInUser}. @@ -39,38 +46,73 @@ * private UUID userId; * // ... * + * + * This extension, by default, uses a {@link HttpGraphQlTester}, which can also be + * explicitly requested by using a parameter of type {@link HttpGraphQlTester}. + * To use a {@link WebSocketGraphQlTester}, the test method must have a parameter + * of type {@link WebSocketGraphQlTester}. */ public class GraphQlTesterParameterResolver implements ParameterResolver { @Override public boolean supportsParameter(final ParameterContext parameterContext, final ExtensionContext extensionContext) throws ParameterResolutionException { - return parameterContext.getParameter().getType().equals(GraphQlTester.class) - || parameterContext.getParameter().getType().equals(HttpGraphQlTester.class); + final var type = parameterContext.getParameter().getType(); + + return type.equals(GraphQlTester.class) + || type.equals(HttpGraphQlTester.class) + || type.equals(WebSocketGraphQlTester.class) + || type.equals(WebGraphQlTester.class); } @Override public Object resolveParameter(final ParameterContext parameterContext, final ExtensionContext extensionContext) throws ParameterResolutionException { + if (parameterContext.getParameter().getType().equals(WebSocketGraphQlTester.class)) { + return createWebSocketGraphQlTester(extensionContext); + } else { + return createHttpGraphQlTester(extensionContext); + } + } + + private HttpGraphQlTester createHttpGraphQlTester(final ExtensionContext extensionContext) { final WebApplicationContext context = (WebApplicationContext) SpringExtension.getApplicationContext(extensionContext); final WebTestClient webTestClient = MockMvcWebTestClient.bindToApplicationContext(context) .configureClient() - .baseUrl("/graphql") + .baseUrl(getHttpGraphQlRoute()) .build(); HttpGraphQlTester tester = HttpGraphQlTester.create(webTestClient); - tester = injectCurrentUserHeaderIfNecessary(tester, extensionContext); + return (HttpGraphQlTester) injectCurrentUserHeaderIfNecessary(tester, extensionContext); + } - return tester; + private WebSocketGraphQlTester createWebSocketGraphQlTester(final ExtensionContext extensionContext) { + final String url = "ws://localhost:" + getPort() + getWebSocketGraphQlRoute(); + WebSocketClient client = new ReactorNettyWebSocketClient(); + WebSocketGraphQlTester tester = WebSocketGraphQlTester.builder(url, client).build(); + + return (WebSocketGraphQlTester) injectCurrentUserHeaderIfNecessary(tester, extensionContext); + } + + private String getPort() { + return System.getProperty("server.port"); + } + + private String getHttpGraphQlRoute() { + return System.getProperty("spring.graphql.path", "/graphql"); + } + + private String getWebSocketGraphQlRoute() { + return System.getProperty("spring.graphql.websocket.path", "/graphql-ws"); } @SneakyThrows @SuppressWarnings("java:S3011") - private HttpGraphQlTester injectCurrentUserHeaderIfNecessary(final HttpGraphQlTester tester, - final ExtensionContext extensionContext) { + private WebGraphQlTester injectCurrentUserHeaderIfNecessary(final WebGraphQlTester tester, + final ExtensionContext extensionContext) { final Optional> testClass = extensionContext.getTestClass(); @@ -89,12 +131,14 @@ private HttpGraphQlTester injectCurrentUserHeaderIfNecessary(final HttpGraphQlTe field.setAccessible(true); // make private fields accessible if (UUID.class.equals(fieldType)) { - return HeaderUtils.addCurrentUserHeader(tester, (UUID) field.get(extensionContext.getTestInstance().orElseThrow())); - } else if (LoggedInUser.class.equals(fieldType)) { - return HeaderUtils.addCurrentUserHeader(tester, (LoggedInUser) field.get(extensionContext.getTestInstance().orElseThrow())); - } else { - throw new ParameterResolutionException("Field annotated with InjectCurrentUserHeader must be of type UUID or LoggedInUser"); + UUID userId = (UUID) field.get(extensionContext.getTestInstance().orElseThrow()); + return HeaderUtils.addCurrentUserHeader(tester, userId); + } + if (LoggedInUser.class.equals(fieldType)) { + LoggedInUser user = (LoggedInUser) field.get(extensionContext.getTestInstance().orElseThrow()); + return HeaderUtils.addCurrentUserHeader(tester, user); } + throw new ParameterResolutionException("Field annotated with InjectCurrentUserHeader must be of type UUID or LoggedInUser"); } return tester; diff --git a/src/main/java/de/unistuttgart/iste/meitrex/common/testutil/HeaderUtils.java b/src/main/java/de/unistuttgart/iste/meitrex/common/testutil/HeaderUtils.java index 44be2c8..ff3cde6 100644 --- a/src/main/java/de/unistuttgart/iste/meitrex/common/testutil/HeaderUtils.java +++ b/src/main/java/de/unistuttgart/iste/meitrex/common/testutil/HeaderUtils.java @@ -5,8 +5,11 @@ import lombok.AccessLevel; import lombok.NoArgsConstructor; import org.springframework.graphql.test.tester.HttpGraphQlTester; +import org.springframework.graphql.test.tester.WebGraphQlTester; -import java.util.*; +import java.util.Collections; +import java.util.List; +import java.util.UUID; /** * Utility class for adding the current user header to a {@link HttpGraphQlTester}. @@ -21,7 +24,7 @@ public class HeaderUtils { * @param user the user * @return the tester */ - public static HttpGraphQlTester addCurrentUserHeader(final HttpGraphQlTester tester, final LoggedInUser user) { + public static WebGraphQlTester addCurrentUserHeader(final WebGraphQlTester tester, final LoggedInUser user) { return tester.mutate() .header("CurrentUser", getJson(user)) .build(); @@ -36,7 +39,7 @@ public static HttpGraphQlTester addCurrentUserHeader(final HttpGraphQlTester tes * @param userId the user id to use * @return the tester */ - public static HttpGraphQlTester addCurrentUserHeader(final HttpGraphQlTester tester, final UUID userId) { + public static WebGraphQlTester addCurrentUserHeader(final WebGraphQlTester tester, final UUID userId) { final LoggedInUser user = LoggedInUser.builder() .userName("test") .id(userId) From 3fe208c7e77a81f75799c93199df28f621e4c7f7 Mon Sep 17 00:00:00 2001 From: PaulBredl Date: Sat, 27 Apr 2024 13:23:47 +0200 Subject: [PATCH 06/10] add a collection of useful matchers --- .../common/testutil/MeitrexMatchers.java | 95 +++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 src/main/java/de/unistuttgart/iste/meitrex/common/testutil/MeitrexMatchers.java diff --git a/src/main/java/de/unistuttgart/iste/meitrex/common/testutil/MeitrexMatchers.java b/src/main/java/de/unistuttgart/iste/meitrex/common/testutil/MeitrexMatchers.java new file mode 100644 index 0000000..7937a8c --- /dev/null +++ b/src/main/java/de/unistuttgart/iste/meitrex/common/testutil/MeitrexMatchers.java @@ -0,0 +1,95 @@ +package de.unistuttgart.iste.meitrex.common.testutil; + +import org.hamcrest.FeatureMatcher; +import org.hamcrest.Matcher; +import org.springframework.graphql.ResponseError; + +import java.util.Collection; +import java.util.function.Function; + +import static org.hamcrest.Matchers.contains; +import static org.hamcrest.Matchers.hasEntry; + +/** + * Collection of useful Hamcrest matchers. + */ +public class MeitrexMatchers { + private MeitrexMatchers() { + } + + /** + * Matcher that checks if a collection of {@link ResponseError}s contains exactly + * one error that matches the given matcher. + * + * @param errorMatcher the matcher for the response error to check against + * @return the matcher + */ + public static Matcher> containsError(Matcher errorMatcher) { + return contains(errorMatcher); + } + + /** + * Matcher for response errors that checks if the error is caused by a specific exception. + * + * @param exceptionClass the exception class + * @return the matcher + * @see #containsError(Matcher) + */ + public static Matcher causedBy(Class exceptionClass) { + return hasFeature("exception", + ResponseError::getExtensions, + hasEntry("exception", exceptionClass.getSimpleName())); + } + + /** + * Matcher for response errors that checks if the error has a specific message. + * + * @param messageMatcher the message + * @return the matcher + */ + public static Matcher withMessage(Matcher messageMatcher) { + return hasFeature("message", ResponseError::getMessage, messageMatcher); + } + + /** + * Matcher that accesses a function of the actual object and checks if the result matches the given matcher. + * This is useful, e.g., for checking if a certain field of an object has a specific value. + * + * @param accessor the function to access the feature + * @param matcher the matcher for the feature + * @param type of the actual object + * @param type of the feature + * @return the matcher + */ + public static Matcher hasFeature(Function accessor, Matcher matcher) { + return hasFeature("feature", accessor, matcher); + } + + /** + * Like {@link #hasFeature(Function, Matcher)}, but with a custom feature name. + */ + public static Matcher hasFeature(String featureName, Function accessor, Matcher matcher) { + return new FeatureMatcher<>(matcher, "has " + featureName, featureName) { + @Override + protected R featureValueOf(T actual) { + return accessor.apply(actual); + } + }; + } + + /** + * Matcher that matches a collection of objects against a collection of matchers. + * + * @param collection the collection to match + * @param matcherFunction the function to create a matcher for each element + * @param the type of the collection elements + * @param the type of the matchers + * @return the array of matchers + */ + @SuppressWarnings("unchecked") + public static Matcher[] each(Collection collection, Function> matcherFunction) { + return (Matcher[]) collection.stream() + .map(matcherFunction) + .toArray(Matcher[]::new); + } +} From 7e47fb78f4ca8b191522b13b4c6ea10e1aa60969 Mon Sep 17 00:00:00 2001 From: PaulBredl Date: Sat, 4 May 2024 09:24:02 +0200 Subject: [PATCH 07/10] update meitrex-common --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 66922e6..ef3dec5 100644 --- a/build.gradle +++ b/build.gradle @@ -48,7 +48,7 @@ repositories { } dependencies { - implementation 'de.unistuttgart.iste.meitrex:meitrex-common:1.0.2' + implementation 'de.unistuttgart.iste.meitrex:meitrex-common:1.0.3' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-graphql' implementation 'org.springframework.boot:spring-boot-starter-test' From 4ec7858fae5ddcbfa03d19770bdda2fa6f285975 Mon Sep 17 00:00:00 2001 From: PaulBredl Date: Tue, 28 May 2024 15:02:37 +0200 Subject: [PATCH 08/10] update meitrex common --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index ef3dec5..ba305df 100644 --- a/build.gradle +++ b/build.gradle @@ -48,7 +48,7 @@ repositories { } dependencies { - implementation 'de.unistuttgart.iste.meitrex:meitrex-common:1.0.3' + implementation 'de.unistuttgart.iste.meitrex:meitrex-common:1.0.4' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-graphql' implementation 'org.springframework.boot:spring-boot-starter-test' From 349e4610446d37e02ecf5d945b1ae43896363a93 Mon Sep 17 00:00:00 2001 From: PaulBredl Date: Wed, 5 Jun 2024 16:51:04 +0200 Subject: [PATCH 09/10] update meitrex common --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index ba305df..3fda5cc 100644 --- a/build.gradle +++ b/build.gradle @@ -48,7 +48,7 @@ repositories { } dependencies { - implementation 'de.unistuttgart.iste.meitrex:meitrex-common:1.0.4' + implementation 'de.unistuttgart.iste.meitrex:meitrex-common:1.0.5' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-graphql' implementation 'org.springframework.boot:spring-boot-starter-test' From 4eced78865a1efda9394532588e4fffead864b5c Mon Sep 17 00:00:00 2001 From: PaulBredl Date: Fri, 7 Jun 2024 19:46:44 +0200 Subject: [PATCH 10/10] update meitrex common --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 3fda5cc..2656d30 100644 --- a/build.gradle +++ b/build.gradle @@ -48,7 +48,7 @@ repositories { } dependencies { - implementation 'de.unistuttgart.iste.meitrex:meitrex-common:1.0.5' + implementation 'de.unistuttgart.iste.meitrex:meitrex-common:1.0.6' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-graphql' implementation 'org.springframework.boot:spring-boot-starter-test'