This is an automated email from the ASF dual-hosted git repository. danhaywood pushed a commit to branch CAUSEWAY-3676 in repository https://gitbox.apache.org/repos/asf/causeway.git
commit 21d1774b9db591199c341f9fe782cb32aa658e83 Author: danhaywood <[email protected]> AuthorDate: Thu Feb 22 20:36:36 2024 +0000 CAUSEWAY-3676: refactors integ test abstract a little --- ...ayViewerGraphqlTestModuleIntegTestAbstract.java | 79 +++++++++++++++++++++ .../viewer/test/e2e/AbstractDynamic_IntegTest.java | 81 ---------------------- .../viewer/test/e2e/Abstract_IntegTest.java | 27 +------- .../graphql/viewer/test/e2e/Admin_IntegTest.java | 2 +- .../viewer/test/e2e/Calculator_IntegTest.java | 2 +- .../viewer/test/e2e/Department_IntegTest.java | 2 +- .../viewer/test/e2e/DeptHead_IntegTest.java | 2 +- .../graphql/viewer/test/e2e/People_IntegTest.java | 2 +- .../graphql/viewer/test/e2e/Person_IntegTest.java | 2 +- .../graphql/viewer/test/e2e/Staff_IntegTest.java | 2 +- .../e2e/special/DeptHeadMutating_IntegTest.java | 2 - .../test/e2e/special/DeptHead_2_IntegTest.java | 2 - .../test/e2e/special/Person_2_IntegTest.java | 3 - .../viewer/test/e2e/special/Staff_2_IntegTest.java | 2 - .../test/schema/GqlSchema_print_IntegTest.java | 4 ++ 15 files changed, 93 insertions(+), 121 deletions(-) diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/CausewayViewerGraphqlTestModuleIntegTestAbstract.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/CausewayViewerGraphqlTestModuleIntegTestAbstract.java index 0bccb229d4..654f6b448f 100644 --- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/CausewayViewerGraphqlTestModuleIntegTestAbstract.java +++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/CausewayViewerGraphqlTestModuleIntegTestAbstract.java @@ -18,23 +18,36 @@ */ package org.apache.causeway.viewer.graphql.viewer.test; +import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.io.InputStream; import java.lang.reflect.Method; import java.net.URI; +import java.net.URISyntaxException; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.Collections; import java.util.Map; +import java.util.stream.Collectors; import javax.inject.Inject; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.causeway.applib.value.Blob; +import org.apache.causeway.viewer.graphql.viewer.test.e2e.Abstract_IntegTest; + +import org.approvaltests.Approvals; import org.approvaltests.core.Options; +import org.approvaltests.integrations.junit5.JupiterApprovals; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DynamicTest; import org.junit.jupiter.api.MethodOrderer; import org.junit.jupiter.api.TestInfo; import org.junit.jupiter.api.TestInstance; @@ -48,6 +61,7 @@ import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.context.annotation.Import; import org.springframework.context.annotation.PropertySource; import org.springframework.context.annotation.PropertySources; +import org.springframework.core.io.ClassPathResource; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.graphql.test.tester.HttpGraphQlTester; import org.springframework.lang.Nullable; @@ -89,6 +103,15 @@ import lombok.val; @ActiveProfiles("test") public abstract class CausewayViewerGraphqlTestModuleIntegTestAbstract { + private final String suffix; + + protected CausewayViewerGraphqlTestModuleIntegTestAbstract(String suffix) { + this.suffix = suffix; + } + protected CausewayViewerGraphqlTestModuleIntegTestAbstract() { + this("._.gql"); + } + /** * Compared to the production app manifest <code>domainapp.webapp.AppManifest</code>, * here we in effect disable security checks, and we exclude any web/UI modules. @@ -283,4 +306,60 @@ public abstract class CausewayViewerGraphqlTestModuleIntegTestAbstract { } + + protected Iterable<DynamicTest> each() throws IOException, URISyntaxException { + + val integClassName = getClass().getSimpleName(); + val classUrl = getClass().getResource(integClassName + ".class"); + Path classPath = Paths.get(classUrl.toURI()); + Path directoryPath = classPath.getParent(); + + return Files.walk(directoryPath) + .filter(Files::isRegularFile) + .filter(file -> { + String fileName = file.getFileName().toString(); + return fileName.startsWith(integClassName) && fileName.endsWith(suffix); + }) + .map(file -> { + String fileName = file.getFileName().toString(); + String testName = fileName.substring(integClassName.length() + ".each.".length()).replace(suffix, ""); + return JupiterApprovals.dynamicTest( + testName, + options -> { + try { + Approvals.verify(submitFileNamed(fileName), jsonOptions(options)); + } finally { + afterEach(); + beforeEach(); + } + }); + }) + .collect(Collectors.toList()); + } + + protected void beforeEach() {} + + protected void afterEach() {} + + protected static Blob asPdfBlob(String fileName) { + val bytes = toBytes(fileName); + return new Blob(fileName, "application/pdf", bytes); + } + + @SneakyThrows + protected static byte[] toBytes(String fileName){ + InputStream inputStream = new ClassPathResource(fileName, Abstract_IntegTest.class).getInputStream(); + ByteArrayOutputStream buffer = new ByteArrayOutputStream(); + + int nRead; + byte[] data = new byte[16384]; + + while ((nRead = inputStream.read(data, 0, data.length)) != -1) { + buffer.write(data, 0, nRead); + } + + return buffer.toByteArray(); + } + + } diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/AbstractDynamic_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/AbstractDynamic_IntegTest.java deleted file mode 100644 index 9e40b79bd2..0000000000 --- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/AbstractDynamic_IntegTest.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.causeway.viewer.graphql.viewer.test.e2e; - -import java.io.IOException; -import java.net.URISyntaxException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.stream.Collectors; - -import org.approvaltests.Approvals; -import org.approvaltests.integrations.junit5.JupiterApprovals; -import org.junit.jupiter.api.DynamicTest; -import org.junit.jupiter.api.Order; -import org.junit.jupiter.api.TestFactory; - -import org.springframework.test.context.ActiveProfiles; - -import lombok.val; - - -@ActiveProfiles("test") -public abstract class AbstractDynamic_IntegTest extends Abstract_IntegTest { - - private final String suffix; - - protected AbstractDynamic_IntegTest(String suffix) { - this.suffix = suffix; - } - protected AbstractDynamic_IntegTest() { - this("._.gql"); - } - - protected Iterable<DynamicTest> each() throws IOException, URISyntaxException { - - val integClassName = getClass().getSimpleName(); - val classUrl = getClass().getResource(integClassName + ".class"); - Path classPath = Paths.get(classUrl.toURI()); - Path directoryPath = classPath.getParent(); - - return Files.walk(directoryPath) - .filter(Files::isRegularFile) - .filter(file -> { - String fileName = file.getFileName().toString(); - return fileName.startsWith(integClassName) && fileName.endsWith(suffix); - }) - .map(file -> { - String fileName = file.getFileName().toString(); - String testName = fileName.substring(integClassName.length() + ".each.".length()).replace(suffix, ""); - return JupiterApprovals.dynamicTest( - testName, - options -> { - try { - Approvals.verify(submitFileNamed(fileName), jsonOptions(options)); - } finally { - afterEach(); - beforeEach(); - } - }); - }) - .collect(Collectors.toList()); - } - -} diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Abstract_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Abstract_IntegTest.java index a6e2548cdf..e2786e4a9e 100644 --- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Abstract_IntegTest.java +++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Abstract_IntegTest.java @@ -68,20 +68,15 @@ public abstract class Abstract_IntegTest extends CausewayViewerGraphqlTestModule deptHeadRepository.create("Dr. George Harwood", civilEngineering); // staff - staffMemberRepository.create("Letitia Leadbetter", classics, asBlob("StaffMember-photo-Foo.pdf")); - staffMemberRepository.create("Gerry Jones", classics, asBlob("StaffMember-photo-Bar.pdf")); - staffMemberRepository.create("Mervin Hughes", physics, asBlob("StaffMember-photo-Fizz.pdf")); + staffMemberRepository.create("Letitia Leadbetter", classics, asPdfBlob("StaffMember-photo-Foo.pdf")); + staffMemberRepository.create("Gerry Jones", classics, asPdfBlob("StaffMember-photo-Bar.pdf")); + staffMemberRepository.create("Mervin Hughes", physics, asPdfBlob("StaffMember-photo-Fizz.pdf")); staffMemberRepository.create("John Gartner", physics); staffMemberRepository.create("Margaret Randall", physics); }); } - protected Blob asBlob(String fileName) { - val bytes = toBytes(fileName); - return new Blob(fileName, "application/pdf", bytes); - } - @AfterEach protected void afterEach(){ transactionService.runTransactional(Propagation.REQUIRED, () -> { @@ -93,20 +88,4 @@ public abstract class Abstract_IntegTest extends CausewayViewerGraphqlTestModule }); } - @SneakyThrows - private byte[] toBytes(String fileName){ - InputStream inputStream = new ClassPathResource(fileName, Abstract_IntegTest.class).getInputStream(); - ByteArrayOutputStream buffer = new ByteArrayOutputStream(); - - int nRead; - byte[] data = new byte[16384]; - - while ((nRead = inputStream.read(data, 0, data.length)) != -1) { - buffer.write(data, 0, nRead); - } - - return buffer.toByteArray(); - } - - } diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.java index 15ab840000..48e1a3818b 100644 --- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.java +++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.java @@ -45,7 +45,7 @@ import java.util.stream.Collectors; //NOT USING @Transactional since we are running server within same transaction otherwise @Order(20) @ActiveProfiles("test") -public class Admin_IntegTest extends AbstractDynamic_IntegTest { +public class Admin_IntegTest extends Abstract_IntegTest { @Override @TestFactory diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.java index 75fd0359fc..80b3897826 100644 --- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.java +++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.java @@ -48,7 +48,7 @@ import org.apache.causeway.viewer.graphql.viewer.test.e2e.Abstract_IntegTest; //NOT USING @Transactional since we are running server within same transaction otherwise @Order(30) @ActiveProfiles("test") -public class Calculator_IntegTest extends AbstractDynamic_IntegTest { +public class Calculator_IntegTest extends Abstract_IntegTest { @Override @TestFactory diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.java index 6870edcb68..95e76ef898 100644 --- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.java +++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.java @@ -51,7 +51,7 @@ import lombok.val; //NOT USING @Transactional since we are running server within same transaction otherwise @Order(40) @ActiveProfiles("test") -public class Department_IntegTest extends AbstractDynamic_IntegTest { +public class Department_IntegTest extends Abstract_IntegTest { @Override @TestFactory diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.java index 9618bce3a8..ad8bab14ed 100644 --- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.java +++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.java @@ -49,7 +49,7 @@ import org.apache.causeway.viewer.graphql.viewer.test.e2e.Abstract_IntegTest; //NOT USING @Transactional since we are running server within same transaction otherwise @Order(50) @ActiveProfiles("test") -public class DeptHead_IntegTest extends AbstractDynamic_IntegTest { +public class DeptHead_IntegTest extends Abstract_IntegTest { @Override @TestFactory diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/People_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/People_IntegTest.java index 7d170fae3e..ea4738fb5e 100644 --- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/People_IntegTest.java +++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/People_IntegTest.java @@ -39,7 +39,7 @@ import lombok.val; //NOT USING @Transactional since we are running server within same transaction otherwise @Order(50) @ActiveProfiles("test") -public class People_IntegTest extends AbstractDynamic_IntegTest { +public class People_IntegTest extends Abstract_IntegTest { @Override @TestFactory diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Person_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Person_IntegTest.java index f4dd8cbb4c..679bd85757 100644 --- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Person_IntegTest.java +++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Person_IntegTest.java @@ -39,7 +39,7 @@ import lombok.val; //NOT USING @Transactional since we are running server within same transaction otherwise @Order(50) @ActiveProfiles("test") -public class Person_IntegTest extends AbstractDynamic_IntegTest { +public class Person_IntegTest extends Abstract_IntegTest { @Override @TestFactory diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.java index 2482392b72..0a1dd5a450 100644 --- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.java +++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.java @@ -59,7 +59,7 @@ import lombok.val; //NOT USING @Transactional since we are running server within same transaction otherwise @Order(60) @ActiveProfiles("test") -public class Staff_IntegTest extends AbstractDynamic_IntegTest { +public class Staff_IntegTest extends Abstract_IntegTest { @Override @TestFactory diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/special/DeptHeadMutating_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/special/DeptHeadMutating_IntegTest.java index 94cd5463b6..f60514e5bc 100644 --- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/special/DeptHeadMutating_IntegTest.java +++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/special/DeptHeadMutating_IntegTest.java @@ -20,8 +20,6 @@ package org.apache.causeway.viewer.graphql.viewer.test.e2e.special; import java.util.Optional; -import org.apache.causeway.viewer.graphql.viewer.test.e2e.AbstractDynamic_IntegTest; - import org.approvaltests.Approvals; import org.approvaltests.reporters.DiffReporter; import org.approvaltests.reporters.UseReporter; diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/special/DeptHead_2_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/special/DeptHead_2_IntegTest.java index da1d229e36..4d9aaa2830 100644 --- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/special/DeptHead_2_IntegTest.java +++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/special/DeptHead_2_IntegTest.java @@ -18,8 +18,6 @@ */ package org.apache.causeway.viewer.graphql.viewer.test.e2e.special; -import org.apache.causeway.viewer.graphql.viewer.test.e2e.AbstractDynamic_IntegTest; - import org.approvaltests.Approvals; import org.approvaltests.reporters.DiffReporter; import org.approvaltests.reporters.UseReporter; diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/special/Person_2_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/special/Person_2_IntegTest.java index 5eb8675a75..edcf1fb782 100644 --- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/special/Person_2_IntegTest.java +++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/special/Person_2_IntegTest.java @@ -22,8 +22,6 @@ import java.util.Optional; import org.apache.causeway.viewer.graphql.viewer.test.domain.dept.StaffMember; -import org.apache.causeway.viewer.graphql.viewer.test.e2e.AbstractDynamic_IntegTest; - import org.approvaltests.Approvals; import org.approvaltests.reporters.DiffReporter; import org.approvaltests.reporters.UseReporter; @@ -35,7 +33,6 @@ import org.springframework.transaction.annotation.Propagation; import org.apache.causeway.applib.services.bookmark.Bookmark; import org.apache.causeway.commons.internal.collections._Maps; -import org.apache.causeway.viewer.graphql.viewer.test.domain.dept.Department; import org.apache.causeway.viewer.graphql.viewer.test.e2e.Abstract_IntegTest; import lombok.val; diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/special/Staff_2_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/special/Staff_2_IntegTest.java index 03c6d8f18f..bd2357ab2c 100644 --- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/special/Staff_2_IntegTest.java +++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/special/Staff_2_IntegTest.java @@ -26,8 +26,6 @@ import java.net.http.HttpResponse; import com.fasterxml.jackson.databind.ObjectMapper; -import org.apache.causeway.viewer.graphql.viewer.test.e2e.AbstractDynamic_IntegTest; - import org.approvaltests.Approvals; import org.approvaltests.reporters.DiffReporter; import org.approvaltests.reporters.UseReporter; diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/schema/GqlSchema_print_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/schema/GqlSchema_print_IntegTest.java index d55627dfa0..03795a5be1 100644 --- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/schema/GqlSchema_print_IntegTest.java +++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/schema/GqlSchema_print_IntegTest.java @@ -52,6 +52,10 @@ public class GqlSchema_print_IntegTest extends CausewayViewerGraphqlTestModuleIn @Inject private SpecificationLoader specificationLoader; @Inject private GraphQlSourceForCauseway graphQlSourceForCauseway; + public GqlSchema_print_IntegTest() { + super("._.gql"); + } + @BeforeEach protected void beforeEach() { assertNotNull(causewaySystemEnvironment);
