You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by da...@apache.org on 2024/02/18 12:56:59 UTC

(causeway) 01/01: CAUSEWAY-3676: makes e2e tests more generic

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 bb51d6026382c5f28f9b7b581c1d6e048d74c1a5
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Sun Feb 18 12:55:22 2024 +0000

    CAUSEWAY-3676: makes e2e tests more generic
---
 bom/pom.xml                                        |  20 +-
 viewers/graphql/model/pom.xml                      |   5 +
 .../graphql/model/src/main/java/module-info.java   |   1 +
 .../marshallers/ScalarMarshallerJdk8LocalDate.java |   1 +
 .../marshallers/ScalarMarshallerLongPrimitive.java |   4 +-
 .../marshallers/ScalarMarshallerLongWrapper.java   |   3 +-
 .../ScalarMarshallerShortPrimitive.java            |   3 +-
 .../marshallers/ScalarMarshallerShortWrapper.java  |   3 +-
 ...ayViewerGraphqlTestModuleIntegTestAbstract.java |  63 +++++--
 .../viewer/test/domain/calc/Calculator.java        |  12 ++
 ...ntegTest.each.action_with_disabled_param._.gql} |   0
 ....each.action_with_disabled_param.approved.json} |   0
 ..._IntegTest.each.action_with_hidden_param._.gql} |   0
 ...st.each.action_with_hidden_param.approved.json} |   0
 ...gql => Admin_IntegTest.each.admin_action._.gql} |   0
 ...dmin_IntegTest.each.admin_action.approved.json} |   0
 ... Admin_IntegTest.each.other_admin_action._.gql} |   0
 ...ntegTest.each.other_admin_action.approved.json} |   0
 .../graphql/viewer/test/e2e/Admin_IntegTest.java   |  78 ++++++++
 ...lculator_IntegTest.each.add_big_decimals._.gql} |   0
 ..._IntegTest.each.add_big_decimals.approved.json} |   0
 ...lculator_IntegTest.each.add_big_integers._.gql} |   0
 ..._IntegTest.each.add_big_integers.approved.json} |   0
 ...lator_IntegTest.each.add_double_wrappers._.gql} |   0
 ...tegTest.each.add_double_wrappers.approved.json} |   0
 ...=> Calculator_IntegTest.each.add_doubles._.gql} |   0
 ...lator_IntegTest.each.add_doubles.approved.json} |   0
 ...ulator_IntegTest.each.add_float_wrappers._.gql} |   0
 ...ntegTest.each.add_float_wrappers.approved.json} |   0
 ... => Calculator_IntegTest.each.add_floats._.gql} |   0
 ...ulator_IntegTest.each.add_floats.approved.json} |   0
 ...ator_IntegTest.each.add_integer_wrappers._.gql} |   0
 ...egTest.each.add_integer_wrappers.approved.json} |   0
 ...> Calculator_IntegTest.each.add_integers._.gql} |   0
 ...ator_IntegTest.each.add_integers.approved.json} |   0
 ... Calculator_IntegTest.each.boolean_and_1._.gql} |   0
 ...tor_IntegTest.each.boolean_and_1.approved.json} |   0
 ... Calculator_IntegTest.each.boolean_and_2._.gql} |   0
 ...tor_IntegTest.each.boolean_and_2.approved.json} |   0
 ...=> Calculator_IntegTest.each.boolean_not._.gql} |   0
 ...lator_IntegTest.each.boolean_not.approved.json} |   0
 ...> Calculator_IntegTest.each.boolean_or_1._.gql} |   0
 ...ator_IntegTest.each.boolean_or_1.approved.json} |   0
 ...> Calculator_IntegTest.each.boolean_or_2._.gql} |   0
 ...ator_IntegTest.each.boolean_or_2.approved.json} |   0
 ....gql => Calculator_IntegTest.each.concat._.gql} |   0
 ...Calculator_IntegTest.each.concat.approved.json} |   0
 ... => Calculator_IntegTest.each.next_month._.gql} |   0
 ...ulator_IntegTest.each.next_month.approved.json} |   0
 ...l => Calculator_IntegTest.each.plus_days._.gql} |   0
 ...culator_IntegTest.each.plus_days.approved.json} |   0
 ...Calculator_IntegTest.each.plus_joda_days._.gql} |   0
 ...or_IntegTest.each.plus_joda_days.approved.json} |   0
 ...alculator_IntegTest.each.scenario_concat._.gql} |   0
 ...r_IntegTest.each.scenario_concat.approved.json} |   0
 .../viewer/test/e2e/Calculator_IntegTest.java      |  81 ++++++++
 ...tegTest.change_department_name_visibility._.gql |   0
 ...change_department_name_visibility.approved.json |   0
 .../DepartmentMutating_IntegTest.java              |   2 +-
 ...artment_IntegTest.each.create_department._.gql} |   0
 ...IntegTest.each.create_department.approved.json} |   0
 ...ch.create_department_name_param_disabled._.gql} |   0
 ...e_department_name_param_disabled.approved.json} |   0
 ...ment_IntegTest.each.find_all_departments._.gql} |   0
 ...egTest.each.find_all_departments.approved.json} |   0
 ..._department_and_add_staff_member_choices._.gql} |   0
 ...ent_and_add_staff_member_choices.approved.json} |   0
 ...ch.find_department_and_add_staff_members._.gql} |   0
 ...department_and_add_staff_members.approved.json} |   0
 ..._department_and_change_head_autocomplete._.gql} |   0
 ...ent_and_change_head_autocomplete.approved.json} |   0
 ....find_department_and_change_head_default._.gql} |   0
 ...partment_and_change_head_default.approved.json} |   0
 ....find_department_and_change_name_invalid._.gql} |   0
 ...partment_and_change_name_invalid.approved.json} |   0
 ...nd_department_and_edit_head_autocomplete._.gql} |   0
 ...tment_and_edit_head_autocomplete.approved.json} |   0
 ...and_edit_head_autocomplete_none_matching._.gql} |   0
 ..._head_autocomplete_none_matching.approved.json} |   0
 ....each.find_department_and_list_its_staff._.gql} |   0
 ...nd_department_and_list_its_staff.approved.json} |   0
 ...partment_and_remove_staff_member_choices._.gql} |   0
 ..._and_remove_staff_member_choices.approved.json} |   0
 ...t_IntegTest.each.find_department_by_name._.gql} |   0
 ...est.each.find_department_by_name.approved.json} |   0
 ...scenario_find_department_and_change_name._.gql} |   0
 ..._find_department_and_change_name.approved.json} |   0
 .../viewer/test/e2e/Department_IntegTest.java      |  84 +++++++++
 ...eptHead_IntegTest.each.create_department._.gql} |   0
 ...IntegTest.each.create_department.approved.json} |   0
 ...ch.find_depthead_and_change_name_invalid._.gql} |   0
 ...depthead_and_change_name_invalid.approved.json} |   0
 ..._depthead_and_change_name_invoke_invalid._.gql} |   0
 ...d_and_change_name_invoke_invalid.approved.json} |   0
 ...ead_IntegTest.each.find_depthead_by_name._.gql} |   0
 ...gTest.each.find_depthead_by_name.approved.json} |   0
 .../viewer/test/e2e/DeptHead_IntegTest.java        |  82 +++++++++
 .../StaffMutating_IntegTest.java                   |   2 +-
 ...Mutating_IntegTest.staff_member_edit_name._.gql |   0
 ..._IntegTest.staff_member_edit_name.approved.json |   0
 ...each.create_staff_member_with_department._.gql} |   0
 ...ate_staff_member_with_department.approved.json} |   0
 ....each.find_staff_member_by_name_and_edit._.gql} |   0
 ...nd_staff_member_by_name_and_edit.approved.json} |   0
 ...ff_member_by_name_and_edit_grade_choices._.gql} |   0
 ...r_by_name_and_edit_grade_choices.approved.json} |   0
 ...ff_IntegTest.each.list_all_staff_members._.gql} |   0
 ...Test.each.list_all_staff_members.approved.json} |   0
 ...Test.each.staff_member_name_edit_invalid._.gql} |   0
 ...h.staff_member_name_edit_invalid.approved.json} |   0
 ...ntegTest.each.staff_member_name_validate._.gql} |   0
 ....each.staff_member_name_validate.approved.json} |   0
 .../graphql/viewer/test/e2e/Staff_IntegTest.java   |  93 ++++++++++
 .../e2e/queryandmutations/Admin_IntegTest.java     |  84 ---------
 .../queryandmutations/Calculator_IntegTest.java    | 180 ------------------
 .../queryandmutations/Department_IntegTest.java    | 204 ---------------------
 .../test/e2e/scenario/Calculator_IntegTest.java    |  48 -----
 .../test/e2e/scenario/Department_IntegTest.java    |  46 -----
 ...Mutating_IntegTest.change_department_name._.gql |   0
 ..._IntegTest.change_department_name.approved.json |   0
 .../DeptHeadMutating_IntegTest.java                |  16 +-
 ..._IntegTest.find_depthead_and_change_name._.gql} |   0
 ...st.find_depthead_and_change_name.approved.json} |   0
 .../DeptHead_2_IntegTest.java}                     |  30 +--
 ..._staff_member_by_name_and_download_photo._.gql} |   0
 ...ember_by_name_and_download_photo.approved.json} |   0
 .../Staff_2_IntegTest.java}                        |  81 +-------
 viewers/graphql/test/src/test/resources/schema.gql | 124 +++++++++++--
 128 files changed, 620 insertions(+), 730 deletions(-)

diff --git a/bom/pom.xml b/bom/pom.xml
index 4f49c6aef1..d475c1deb3 100644
--- a/bom/pom.xml
+++ b/bom/pom.xml
@@ -120,6 +120,7 @@ It is therefore a copy of org.apache:apache, with customisations clearly identif
 
         <git-commit-id-plugin.version>4.9.10</git-commit-id-plugin.version>
         <graphql-java.version>19.2</graphql-java.version>
+        <graphql-java-extended-scalars.version>19.1</graphql-java-extended-scalars.version>
         <guava.version>33.0.0-jre</guava.version>
 
         <htmlparser.version>2.1</htmlparser.version>
@@ -1497,13 +1498,6 @@ It is therefore a copy of org.apache:apache, with customisations clearly identif
             </dependency>
 
 
-            <!-- dependency convergence clash with org.apache.cxf:cxf-core:3.4.0 (used
-				by causeway-mappings-jaxrsclient-impl) TODO ... jaxrsclient was removed -->
-			<dependency>
-				<groupId>com.fasterxml.woodstox</groupId>
-				<artifactId>woodstox-core</artifactId>
-				<version>6.6.0</version>
-			</dependency>
             <dependency>
 				<groupId>org.codehaus.woodstox</groupId>
 				<artifactId>stax2-api</artifactId>
@@ -1519,11 +1513,23 @@ It is therefore a copy of org.apache:apache, with customisations clearly identif
 				<artifactId>org.eclipse.persistence.sdo</artifactId>
 				<version>2.7.14</version> <!-- do not upgrade 2.x to 3.x or higher until Spring 6 -->
 			</dependency>
+            <!-- dependency convergence clash with org.apache.cxf:cxf-core:3.4.0 (used
+				by causeway-mappings-jaxrsclient-impl) TODO ... jaxrsclient was removed -->
+			<dependency>
+				<groupId>com.fasterxml.woodstox</groupId>
+				<artifactId>woodstox-core</artifactId>
+				<version>6.6.0</version>
+			</dependency>
 			<dependency>
 	            <groupId>com.sun.xml.bind</groupId>
 	            <artifactId>jaxb-impl</artifactId>
 	            <version>2.3.9</version> <!-- do not upgrade 2.x to 3.x or higher until Spring 6 -->
 	        </dependency>
+            <dependency>
+                <groupId>com.graphql-java</groupId>
+                <artifactId>graphql-java-extended-scalars</artifactId>
+                <version>${graphql-java-extended-scalars.version}</version>
+            </dependency>
 
 			<dependency>
 				<groupId>org.ow2.asm</groupId>
diff --git a/viewers/graphql/model/pom.xml b/viewers/graphql/model/pom.xml
index 6006583e39..234aaefea6 100644
--- a/viewers/graphql/model/pom.xml
+++ b/viewers/graphql/model/pom.xml
@@ -71,6 +71,11 @@
 			<artifactId>graphql-java</artifactId>
 		</dependency>
 
+		<dependency>
+			<groupId>com.graphql-java</groupId>
+			<artifactId>graphql-java-extended-scalars</artifactId>
+        </dependency>
+
 
 		<!-- TEST DEPENDENCIES -->
 
diff --git a/viewers/graphql/model/src/main/java/module-info.java b/viewers/graphql/model/src/main/java/module-info.java
index 8588e7499a..4da4776905 100644
--- a/viewers/graphql/model/src/main/java/module-info.java
+++ b/viewers/graphql/model/src/main/java/module-info.java
@@ -15,4 +15,5 @@ module org.apache.causeway.incubator.viewer.graphql.model {
     requires org.apache.causeway.core.metamodel;
     requires com.graphqljava;
     requires spring.boot.autoconfigure;
+    requires com.graphqljava.extendedscalars;
 }
\ No newline at end of file
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerJdk8LocalDate.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerJdk8LocalDate.java
index dd1a378690..6251cdae1a 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerJdk8LocalDate.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerJdk8LocalDate.java
@@ -25,6 +25,7 @@ import javax.annotation.Priority;
 import javax.inject.Inject;
 
 import graphql.Scalars;
+import graphql.scalars.ExtendedScalars;
 
 import org.springframework.stereotype.Component;
 
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerLongPrimitive.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerLongPrimitive.java
index 62f059336a..2eed98dfe5 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerLongPrimitive.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerLongPrimitive.java
@@ -21,7 +21,7 @@ package org.apache.causeway.viewer.graphql.model.marshallers;
 import javax.annotation.Priority;
 import javax.inject.Inject;
 
-import graphql.Scalars;
+import graphql.scalars.ExtendedScalars;
 
 import org.springframework.stereotype.Component;
 
@@ -39,7 +39,7 @@ public class ScalarMarshallerLongPrimitive extends ScalarMarshallerAbstract<Long
 
     @Inject
     public ScalarMarshallerLongPrimitive(final CausewayConfiguration causewayConfiguration) {
-        super(long.class, Scalars.GraphQLString, causewayConfiguration);
+        super(long.class, ExtendedScalars.GraphQLLong, causewayConfiguration);
     }
 
     @Override
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerLongWrapper.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerLongWrapper.java
index 190b372a8c..6120d1fd36 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerLongWrapper.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerLongWrapper.java
@@ -22,6 +22,7 @@ import javax.annotation.Priority;
 import javax.inject.Inject;
 
 import graphql.Scalars;
+import graphql.scalars.ExtendedScalars;
 
 import org.springframework.stereotype.Component;
 
@@ -39,7 +40,7 @@ public class ScalarMarshallerLongWrapper extends ScalarMarshallerAbstract<Long>
 
     @Inject
     public ScalarMarshallerLongWrapper(final CausewayConfiguration causewayConfiguration) {
-        super(Long.class, Scalars.GraphQLString, causewayConfiguration);
+        super(Long.class, ExtendedScalars.GraphQLLong, causewayConfiguration);
     }
 
     @Override
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerShortPrimitive.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerShortPrimitive.java
index 2763d06d4b..5b0ec222ec 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerShortPrimitive.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerShortPrimitive.java
@@ -22,6 +22,7 @@ import javax.annotation.Priority;
 import javax.inject.Inject;
 
 import graphql.Scalars;
+import graphql.scalars.ExtendedScalars;
 
 import org.springframework.stereotype.Component;
 
@@ -36,7 +37,7 @@ public class ScalarMarshallerShortPrimitive extends ScalarMarshallerAbstract<Sho
 
     @Inject
     public ScalarMarshallerShortPrimitive(final CausewayConfiguration causewayConfiguration) {
-        super(short.class, Scalars.GraphQLInt, causewayConfiguration);
+        super(short.class, ExtendedScalars.GraphQLShort, causewayConfiguration);
     }
 
     @Override
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerShortWrapper.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerShortWrapper.java
index 20393403d4..e371932226 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerShortWrapper.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/marshallers/ScalarMarshallerShortWrapper.java
@@ -22,6 +22,7 @@ import javax.annotation.Priority;
 import javax.inject.Inject;
 
 import graphql.Scalars;
+import graphql.scalars.ExtendedScalars;
 
 import org.springframework.stereotype.Component;
 
@@ -36,7 +37,7 @@ public class ScalarMarshallerShortWrapper extends ScalarMarshallerAbstract<Short
 
     @Inject
     public ScalarMarshallerShortWrapper(final CausewayConfiguration causewayConfiguration) {
-        super(Short.class, Scalars.GraphQLInt, causewayConfiguration);
+        super(Short.class, ExtendedScalars.GraphQLShort, causewayConfiguration);
     }
 
     @Override
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 e46df99789..0bccb229d4 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
@@ -50,6 +50,7 @@ import org.springframework.context.annotation.PropertySource;
 import org.springframework.context.annotation.PropertySources;
 import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
 import org.springframework.graphql.test.tester.HttpGraphQlTester;
+import org.springframework.lang.Nullable;
 import org.springframework.test.context.ActiveProfiles;
 import org.springframework.test.web.reactive.server.WebTestClient;
 
@@ -69,6 +70,7 @@ import org.apache.causeway.viewer.graphql.viewer.test.domain.UniversityModule;
 
 import static org.apache.causeway.commons.internal.assertions._Assert.assertNotNull;
 
+import lombok.SneakyThrows;
 import lombok.Value;
 import lombok.val;
 
@@ -157,36 +159,50 @@ public abstract class CausewayViewerGraphqlTestModuleIntegTestAbstract {
      * @return the response body as a string
      * @throws Exception if an error occurs during the submission
      */
-    protected String submit() throws Exception{
+    protected String submit() {
         return submit(Collections.emptyMap());
     }
 
-    protected String submit(Map<String,String> replacements) throws Exception{
+    @SneakyThrows
+    protected String submit(Map<String,String> replacements) {
         val httpRequest = buildRequest(testInfo, "._.gql", replacements);
         return submitRequest(httpRequest);
     }
 
-    protected String submit(String variant) throws Exception{
+    protected String submit(String variant) {
         return submit(variant, Collections.emptyMap());
     }
 
-    protected String submit(String variant, Map<String,String> replacements) throws Exception{
+    @SneakyThrows
+    protected String submit(String variant, Map<String,String> replacements) {
         val httpRequest = buildRequest(testInfo, "._." +variant + ".gql", replacements);
         return submitRequest(httpRequest);
     }
 
+    @SneakyThrows
+    protected String submitFileNamed(final String fileName) {
+        val httpRequest = buildRequest(fileName, Collections.emptyMap());
+        return submitRequest(httpRequest);
+    }
+
     @Value
     protected static class GqlBody {
         String query;
     }
 
+    @SneakyThrows
     protected HttpRequest buildRequest(
             final TestInfo testInfo,
             final String resourceSuffix,
-            final Map<String, String> replacements) throws IOException {
+            final Map<String, String> replacements) {
 
         val testMethodName = testInfo.getTestMethod().map(Method::getName).get();
         val resourceName = getClass().getSimpleName() + "." + testMethodName + resourceSuffix;
+        return buildRequest(resourceName, replacements);
+    }
+
+    @SneakyThrows
+    protected HttpRequest buildRequest(String resourceName, Map<String, String> replacements) {
         String resourceContents = readResource(resourceName);
         String resourceContent = replace(resourceContents, replacements);
 
@@ -237,22 +253,33 @@ public abstract class CausewayViewerGraphqlTestModuleIntegTestAbstract {
     }
 
     protected Options jsonOptions() {
-        return jsonOptions(BookmarkOptions.SCRUB);
+        return jsonOptions(null, BookmarkOptions.SCRUB);
     }
 
     protected Options jsonOptions(BookmarkOptions bookmarkOptions) {
-        return new Options().withScrubber(s -> {
-            try {
-                String prettyJson = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(objectMapper.readTree(s));
-                if (bookmarkOptions == BookmarkOptions.SCRUB) {
-                    prettyJson = prettyJson.replaceAll(":\\d+/", ":NNN/");
-                }
-                return prettyJson;
-            } catch (JsonProcessingException e) {
-                throw new RuntimeException(e);
-            }
-        })
-        .forFile().withExtension(".json");
+        return jsonOptions(null, bookmarkOptions);
+    }
+
+    public Options jsonOptions(Options options) {
+        return jsonOptions(options, BookmarkOptions.SCRUB);
+    }
+
+    public Options jsonOptions(@Nullable Options options, BookmarkOptions bookmarkOptions) {
+        if (options == null) {
+            options = new Options();
+        }
+        return options.withScrubber(s -> {
+                    try {
+                        String prettyJson = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(objectMapper.readTree(s));
+                        if (bookmarkOptions == BookmarkOptions.SCRUB) {
+                            prettyJson = prettyJson.replaceAll(":\\d+/", ":NNN/");
+                        }
+                        return prettyJson;
+                    } catch (JsonProcessingException e) {
+                        throw new RuntimeException(e);
+                    }
+                })
+                .forFile().withExtension(".json");
     }
 
 
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/calc/Calculator.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/calc/Calculator.java
index 64ad99c6e2..37614c261c 100644
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/calc/Calculator.java
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/calc/Calculator.java
@@ -3,6 +3,7 @@ package org.apache.causeway.viewer.graphql.viewer.test.domain.calc;
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.time.LocalDate;
+import java.time.ZonedDateTime;
 
 import javax.annotation.Priority;
 import javax.inject.Inject;
@@ -89,11 +90,22 @@ public class Calculator {
         return date.plusDays(numDays);
     }
 
+    @Action(semantics = SemanticsOf.SAFE)
+    public ZonedDateTime plusDaysAndHoursAndMinutes(ZonedDateTime dateTime, int numDays, int numHours, int numMinutes) {
+        return dateTime.plusDays(numDays).plusHours(numHours).plusMinutes(numMinutes);
+    }
+
     @Action(semantics = SemanticsOf.SAFE)
     public org.joda.time.LocalDate plusJodaDays(org.joda.time.LocalDate date, int numDays) {
         return date.plusDays(numDays);
     }
 
+    @Action(semantics = SemanticsOf.SAFE)
+    public org.joda.time.DateTime plusJodaDaysAndHoursAndMinutes(org.joda.time.DateTime dateTime, int numDays, int numHours, int numMinutes) {
+        return dateTime.plusDays(numDays).plusHours(numHours).plusMinutes(numMinutes);
+    }
+
+
     @Action(semantics = SemanticsOf.SAFE)
     public boolean and(boolean x, boolean y) {
         return x & y;
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Admin_IntegTest.action_with_disabled_param._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.each.action_with_disabled_param._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Admin_IntegTest.action_with_disabled_param._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.each.action_with_disabled_param._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Admin_IntegTest.action_with_disabled_param.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.each.action_with_disabled_param.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Admin_IntegTest.action_with_disabled_param.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.each.action_with_disabled_param.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Admin_IntegTest.action_with_hidden_param._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.each.action_with_hidden_param._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Admin_IntegTest.action_with_hidden_param._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.each.action_with_hidden_param._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Admin_IntegTest.action_with_hidden_param.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.each.action_with_hidden_param.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Admin_IntegTest.action_with_hidden_param.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.each.action_with_hidden_param.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Admin_IntegTest.admin_action._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.each.admin_action._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Admin_IntegTest.admin_action._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.each.admin_action._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Admin_IntegTest.admin_action.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.each.admin_action.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Admin_IntegTest.admin_action.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.each.admin_action.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Admin_IntegTest.other_admin_action._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.each.other_admin_action._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Admin_IntegTest.other_admin_action._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.each.other_admin_action._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Admin_IntegTest.other_admin_action.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.each.other_admin_action.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Admin_IntegTest.other_admin_action.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.each.other_admin_action.approved.json
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
new file mode 100644
index 0000000000..b5499d2194
--- /dev/null
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.java
@@ -0,0 +1,78 @@
+/*
+ *  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 org.approvaltests.Approvals;
+import org.approvaltests.integrations.junit5.JupiterApprovals;
+import org.approvaltests.reporters.DiffReporter;
+import org.approvaltests.reporters.UseReporter;
+import org.junit.jupiter.api.DynamicTest;
+import org.junit.jupiter.api.Order;
+import org.junit.jupiter.api.Test;
+
+import org.junit.jupiter.api.TestFactory;
+
+import org.springframework.test.context.ActiveProfiles;
+
+import org.apache.causeway.viewer.graphql.viewer.test.e2e.Abstract_IntegTest;
+
+import lombok.val;
+
+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;
+
+
+//NOT USING @Transactional since we are running server within same transaction otherwise
+@Order(20)
+@ActiveProfiles("test")
+public class Admin_IntegTest extends Abstract_IntegTest {
+
+    @TestFactory
+    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("._.gql");
+                })
+                .map(file -> {
+                    String fileName = file.getFileName().toString();
+                    String testName = fileName.substring(integClassName.length() + ".each.".length()).replace("._.gql", "");
+                    return JupiterApprovals.dynamicTest(
+                            testName,
+                            options -> {
+                                Approvals.verify(submitFileNamed(fileName), jsonOptions(options));
+                                afterEach();
+                                beforeEach();
+                            });
+                })
+                .collect(Collectors.toList());
+    }
+
+}
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.add_big_decimals._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.add_big_decimals._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.add_big_decimals._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.add_big_decimals._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.add_big_decimals.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.add_big_decimals.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.add_big_decimals.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.add_big_decimals.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.add_big_integers._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.add_big_integers._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.add_big_integers._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.add_big_integers._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.add_big_integers.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.add_big_integers.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.add_big_integers.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.add_big_integers.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.add_double_wrappers._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.add_double_wrappers._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.add_double_wrappers._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.add_double_wrappers._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.add_double_wrappers.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.add_double_wrappers.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.add_double_wrappers.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.add_double_wrappers.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.add_doubles._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.add_doubles._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.add_doubles._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.add_doubles._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.add_doubles.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.add_doubles.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.add_doubles.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.add_doubles.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.add_float_wrappers._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.add_float_wrappers._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.add_float_wrappers._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.add_float_wrappers._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.add_float_wrappers.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.add_float_wrappers.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.add_float_wrappers.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.add_float_wrappers.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.add_floats._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.add_floats._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.add_floats._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.add_floats._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.add_floats.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.add_floats.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.add_floats.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.add_floats.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.add_integer_wrappers._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.add_integer_wrappers._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.add_integer_wrappers._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.add_integer_wrappers._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.add_integer_wrappers.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.add_integer_wrappers.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.add_integer_wrappers.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.add_integer_wrappers.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.add_integers._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.add_integers._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.add_integers._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.add_integers._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.add_integers.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.add_integers.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.add_integers.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.add_integers.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.boolean_and_1._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.boolean_and_1._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.boolean_and_1._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.boolean_and_1._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.boolean_and_1.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.boolean_and_1.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.boolean_and_1.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.boolean_and_1.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.boolean_and_2._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.boolean_and_2._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.boolean_and_2._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.boolean_and_2._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.boolean_and_2.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.boolean_and_2.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.boolean_and_2.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.boolean_and_2.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.boolean_not._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.boolean_not._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.boolean_not._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.boolean_not._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.boolean_not.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.boolean_not.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.boolean_not.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.boolean_not.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.boolean_or_1._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.boolean_or_1._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.boolean_or_1._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.boolean_or_1._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.boolean_or_1.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.boolean_or_1.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.boolean_or_1.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.boolean_or_1.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.boolean_or_2._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.boolean_or_2._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.boolean_or_2._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.boolean_or_2._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.boolean_or_2.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.boolean_or_2.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.boolean_or_2.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.boolean_or_2.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.concat._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.concat._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.concat._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.concat._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.concat.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.concat.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.concat.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.concat.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.next_month._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.next_month._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.next_month._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.next_month._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.next_month.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.next_month.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.next_month.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.next_month.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.plus_days._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.plus_days._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.plus_days._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.plus_days._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.plus_days.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.plus_days.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.plus_days.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.plus_days.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.plus_joda_days._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.plus_joda_days._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.plus_joda_days._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.plus_joda_days._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.plus_joda_days.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.plus_joda_days.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.plus_joda_days.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.plus_joda_days.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/scenario/Calculator_IntegTest.concat._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.scenario_concat._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/scenario/Calculator_IntegTest.concat._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.scenario_concat._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/scenario/Calculator_IntegTest.concat.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.scenario_concat.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/scenario/Calculator_IntegTest.concat.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.each.scenario_concat.approved.json
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
new file mode 100644
index 0000000000..ad95af5cfd
--- /dev/null
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.java
@@ -0,0 +1,81 @@
+/*
+ *  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 lombok.SneakyThrows;
+import lombok.val;
+
+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.Collections;
+import java.util.stream.Collectors;
+
+import org.approvaltests.Approvals;
+import org.approvaltests.core.Options;
+import org.approvaltests.integrations.junit5.JupiterApprovals;
+import org.approvaltests.reporters.DiffReporter;
+import org.approvaltests.reporters.UseReporter;
+import org.junit.jupiter.api.DynamicTest;
+import org.junit.jupiter.api.Order;
+import org.junit.jupiter.api.Test;
+
+import org.junit.jupiter.api.TestFactory;
+
+import org.springframework.test.context.ActiveProfiles;
+
+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 Abstract_IntegTest {
+
+    @TestFactory
+    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("._.gql");
+                })
+                .map(file -> {
+                    String fileName = file.getFileName().toString();
+                    String testName = fileName.substring(integClassName.length() + ".each.".length()).replace("._.gql", "");
+                    return JupiterApprovals.dynamicTest(
+                            testName,
+                            options -> {
+                                Approvals.verify(submitFileNamed(fileName), jsonOptions(options));
+                                afterEach();
+                                beforeEach();
+                            });
+                })
+                .collect(Collectors.toList());
+    }
+
+}
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/DepartmentMutating_IntegTest.change_department_name_visibility._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DepartmentMutating_IntegTest.change_department_name_visibility._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/DepartmentMutating_IntegTest.change_department_name_visibility._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DepartmentMutating_IntegTest.change_department_name_visibility._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/DepartmentMutating_IntegTest.change_department_name_visibility.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DepartmentMutating_IntegTest.change_department_name_visibility.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/DepartmentMutating_IntegTest.change_department_name_visibility.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DepartmentMutating_IntegTest.change_department_name_visibility.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/DepartmentMutating_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DepartmentMutating_IntegTest.java
similarity index 96%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/DepartmentMutating_IntegTest.java
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DepartmentMutating_IntegTest.java
index 8e08aa42a1..7a21171d2c 100644
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/DepartmentMutating_IntegTest.java
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DepartmentMutating_IntegTest.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.viewer.test.e2e.queryandmutations;
+package org.apache.causeway.viewer.graphql.viewer.test.e2e;
 
 import java.util.Optional;
 
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.create_department._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.create_department._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.create_department._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.create_department._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.create_department.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.create_department.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.create_department.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.create_department.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.create_department_name_param_disabled._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.create_department_name_param_disabled._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.create_department_name_param_disabled._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.create_department_name_param_disabled._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.create_department_name_param_disabled.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.create_department_name_param_disabled.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.create_department_name_param_disabled.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.create_department_name_param_disabled.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_all_departments._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_all_departments._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_all_departments._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_all_departments._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_all_departments.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_all_departments.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_all_departments.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_all_departments.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_department_and_add_staff_member_choices._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_department_and_add_staff_member_choices._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_department_and_add_staff_member_choices._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_department_and_add_staff_member_choices._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_department_and_add_staff_member_choices.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_department_and_add_staff_member_choices.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_department_and_add_staff_member_choices.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_department_and_add_staff_member_choices.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_department_and_add_staff_members._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_department_and_add_staff_members._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_department_and_add_staff_members._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_department_and_add_staff_members._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_department_and_add_staff_members.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_department_and_add_staff_members.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_department_and_add_staff_members.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_department_and_add_staff_members.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_department_and_change_head_autocomplete._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_department_and_change_head_autocomplete._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_department_and_change_head_autocomplete._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_department_and_change_head_autocomplete._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_department_and_change_head_autocomplete.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_department_and_change_head_autocomplete.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_department_and_change_head_autocomplete.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_department_and_change_head_autocomplete.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_department_and_change_head_default._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_department_and_change_head_default._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_department_and_change_head_default._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_department_and_change_head_default._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_department_and_change_head_default.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_department_and_change_head_default.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_department_and_change_head_default.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_department_and_change_head_default.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_department_and_change_name_invalid._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_department_and_change_name_invalid._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_department_and_change_name_invalid._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_department_and_change_name_invalid._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_department_and_change_name_invalid.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_department_and_change_name_invalid.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_department_and_change_name_invalid.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_department_and_change_name_invalid.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_department_and_edit_head_autocomplete._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_department_and_edit_head_autocomplete._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_department_and_edit_head_autocomplete._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_department_and_edit_head_autocomplete._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_department_and_edit_head_autocomplete.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_department_and_edit_head_autocomplete.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_department_and_edit_head_autocomplete.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_department_and_edit_head_autocomplete.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_department_and_edit_head_autocomplete_none_matching._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_department_and_edit_head_autocomplete_none_matching._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_department_and_edit_head_autocomplete_none_matching._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_department_and_edit_head_autocomplete_none_matching._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_department_and_edit_head_autocomplete_none_matching.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_department_and_edit_head_autocomplete_none_matching.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_department_and_edit_head_autocomplete_none_matching.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_department_and_edit_head_autocomplete_none_matching.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_department_and_list_its_staff._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_department_and_list_its_staff._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_department_and_list_its_staff._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_department_and_list_its_staff._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_department_and_list_its_staff.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_department_and_list_its_staff.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_department_and_list_its_staff.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_department_and_list_its_staff.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_department_and_remove_staff_member_choices._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_department_and_remove_staff_member_choices._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_department_and_remove_staff_member_choices._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_department_and_remove_staff_member_choices._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_department_and_remove_staff_member_choices.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_department_and_remove_staff_member_choices.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_department_and_remove_staff_member_choices.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_department_and_remove_staff_member_choices.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_department_by_name._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_department_by_name._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_department_by_name._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_department_by_name._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_department_by_name.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_department_by_name.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.find_department_by_name.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.find_department_by_name.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/scenario/Department_IntegTest.find_department_and_change_name._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.scenario_find_department_and_change_name._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/scenario/Department_IntegTest.find_department_and_change_name._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.scenario_find_department_and_change_name._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/scenario/Department_IntegTest.find_department_and_change_name.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.scenario_find_department_and_change_name.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/scenario/Department_IntegTest.find_department_and_change_name.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.each.scenario_find_department_and_change_name.approved.json
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
new file mode 100644
index 0000000000..32e9e571c1
--- /dev/null
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.java
@@ -0,0 +1,84 @@
+/*
+ *  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.List;
+import java.util.stream.Collectors;
+
+import org.approvaltests.Approvals;
+import org.approvaltests.integrations.junit5.JupiterApprovals;
+import org.approvaltests.reporters.DiffReporter;
+import org.approvaltests.reporters.UseReporter;
+import org.junit.jupiter.api.DynamicTest;
+import org.junit.jupiter.api.Order;
+import org.junit.jupiter.api.Test;
+
+import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat;
+
+import org.junit.jupiter.api.TestFactory;
+
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.transaction.annotation.Propagation;
+
+import org.apache.causeway.viewer.graphql.viewer.test.domain.dept.Department;
+import org.apache.causeway.viewer.graphql.viewer.test.domain.dept.DeptHead;
+import org.apache.causeway.viewer.graphql.viewer.test.e2e.Abstract_IntegTest;
+
+import lombok.val;
+
+
+//NOT USING @Transactional since we are running server within same transaction otherwise
+@Order(40)
+@ActiveProfiles("test")
+public class Department_IntegTest extends Abstract_IntegTest {
+
+    @TestFactory
+    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("._.gql");
+                })
+                .map(file -> {
+                    String fileName = file.getFileName().toString();
+                    String testName = fileName.substring(integClassName.length() + ".each.".length()).replace("._.gql", "");
+                    return JupiterApprovals.dynamicTest(
+                            testName,
+                            options -> {
+                                Approvals.verify(submitFileNamed(fileName), jsonOptions(options));
+                                afterEach();
+                                beforeEach();
+                            });
+                })
+                .collect(Collectors.toList());
+    }
+
+}
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/DeptHeadMutating_IntegTest.create_department._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.each.create_department._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/DeptHeadMutating_IntegTest.create_department._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.each.create_department._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/DeptHeadMutating_IntegTest.create_department.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.each.create_department.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/DeptHeadMutating_IntegTest.create_department.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.each.create_department.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/DeptHead_IntegTest.find_depthead_and_change_name_invalid._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.each.find_depthead_and_change_name_invalid._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/DeptHead_IntegTest.find_depthead_and_change_name_invalid._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.each.find_depthead_and_change_name_invalid._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/DeptHead_IntegTest.find_depthead_and_change_name_invalid.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.each.find_depthead_and_change_name_invalid.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/DeptHead_IntegTest.find_depthead_and_change_name_invalid.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.each.find_depthead_and_change_name_invalid.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/DeptHead_IntegTest.find_depthead_and_change_name_invoke_invalid._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.each.find_depthead_and_change_name_invoke_invalid._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/DeptHead_IntegTest.find_depthead_and_change_name_invoke_invalid._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.each.find_depthead_and_change_name_invoke_invalid._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/DeptHead_IntegTest.find_depthead_and_change_name_invoke_invalid.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.each.find_depthead_and_change_name_invoke_invalid.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/DeptHead_IntegTest.find_depthead_and_change_name_invoke_invalid.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.each.find_depthead_and_change_name_invoke_invalid.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/DeptHead_IntegTest.find_depthead_by_name._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.each.find_depthead_by_name._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/DeptHead_IntegTest.find_depthead_by_name._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.each.find_depthead_by_name._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/DeptHead_IntegTest.find_depthead_by_name.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.each.find_depthead_by_name.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/DeptHead_IntegTest.find_depthead_by_name.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.each.find_depthead_by_name.approved.json
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
new file mode 100644
index 0000000000..b8a8952515
--- /dev/null
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.java
@@ -0,0 +1,82 @@
+/*
+ *  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 lombok.val;
+
+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.approvaltests.reporters.DiffReporter;
+import org.approvaltests.reporters.UseReporter;
+import org.junit.jupiter.api.DynamicTest;
+import org.junit.jupiter.api.Order;
+import org.junit.jupiter.api.Test;
+
+import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat;
+
+import org.junit.jupiter.api.TestFactory;
+
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.transaction.annotation.Propagation;
+
+import org.apache.causeway.viewer.graphql.viewer.test.domain.dept.DeptHead;
+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 Abstract_IntegTest {
+
+    @TestFactory
+    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("._.gql");
+                })
+                .map(file -> {
+                    String fileName = file.getFileName().toString();
+                    String testName = fileName.substring(integClassName.length() + ".each.".length()).replace("._.gql", "");
+                    return JupiterApprovals.dynamicTest(
+                            testName,
+                            options -> {
+                                Approvals.verify(submitFileNamed(fileName), jsonOptions(options));
+                                afterEach();
+                                beforeEach();
+                            });
+                })
+                .collect(Collectors.toList());
+    }
+
+}
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/StaffMutating_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/StaffMutating_IntegTest.java
similarity index 96%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/StaffMutating_IntegTest.java
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/StaffMutating_IntegTest.java
index 4a594ab762..962c404395 100644
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/StaffMutating_IntegTest.java
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/StaffMutating_IntegTest.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.viewer.test.e2e.queryandmutations;
+package org.apache.causeway.viewer.graphql.viewer.test.e2e;
 
 import org.approvaltests.Approvals;
 import org.approvaltests.reporters.DiffReporter;
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/StaffMutating_IntegTest.staff_member_edit_name._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/StaffMutating_IntegTest.staff_member_edit_name._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/StaffMutating_IntegTest.staff_member_edit_name._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/StaffMutating_IntegTest.staff_member_edit_name._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/StaffMutating_IntegTest.staff_member_edit_name.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/StaffMutating_IntegTest.staff_member_edit_name.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/StaffMutating_IntegTest.staff_member_edit_name.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/StaffMutating_IntegTest.staff_member_edit_name.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.create_staff_member_with_department._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.each.create_staff_member_with_department._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.create_staff_member_with_department._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.each.create_staff_member_with_department._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.create_staff_member_with_department.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.each.create_staff_member_with_department.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.create_staff_member_with_department.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.each.create_staff_member_with_department.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.find_staff_member_by_name_and_edit._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.each.find_staff_member_by_name_and_edit._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.find_staff_member_by_name_and_edit._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.each.find_staff_member_by_name_and_edit._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.find_staff_member_by_name_and_edit.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.each.find_staff_member_by_name_and_edit.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.find_staff_member_by_name_and_edit.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.each.find_staff_member_by_name_and_edit.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.find_staff_member_by_name_and_edit_grade_choices._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.each.find_staff_member_by_name_and_edit_grade_choices._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.find_staff_member_by_name_and_edit_grade_choices._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.each.find_staff_member_by_name_and_edit_grade_choices._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.find_staff_member_by_name_and_edit_grade_choices.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.each.find_staff_member_by_name_and_edit_grade_choices.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.find_staff_member_by_name_and_edit_grade_choices.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.each.find_staff_member_by_name_and_edit_grade_choices.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.list_all_staff_members._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.each.list_all_staff_members._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.list_all_staff_members._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.each.list_all_staff_members._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.list_all_staff_members.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.each.list_all_staff_members.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.list_all_staff_members.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.each.list_all_staff_members.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.staff_member_name_edit_invalid._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.each.staff_member_name_edit_invalid._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.staff_member_name_edit_invalid._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.each.staff_member_name_edit_invalid._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.staff_member_name_edit_invalid.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.each.staff_member_name_edit_invalid.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.staff_member_name_edit_invalid.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.each.staff_member_name_edit_invalid.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.staff_member_name_validate._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.each.staff_member_name_validate._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.staff_member_name_validate._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.each.staff_member_name_validate._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.staff_member_name_validate.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.each.staff_member_name_validate.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.staff_member_name_validate.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.each.staff_member_name_validate.approved.json
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
new file mode 100644
index 0000000000..86b8037408
--- /dev/null
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.java
@@ -0,0 +1,93 @@
+/*
+ *  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.URI;
+import java.net.URISyntaxException;
+import java.net.http.HttpClient;
+import java.net.http.HttpRequest;
+import java.net.http.HttpResponse;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import org.approvaltests.Approvals;
+import org.approvaltests.integrations.junit5.JupiterApprovals;
+import org.approvaltests.reporters.DiffReporter;
+import org.approvaltests.reporters.UseReporter;
+import org.junit.jupiter.api.DynamicTest;
+import org.junit.jupiter.api.Order;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestFactory;
+import org.junit.jupiter.api.condition.DisabledIfEnvironmentVariable;
+
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
+import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat;
+
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.transaction.annotation.Propagation;
+
+import org.apache.causeway.applib.services.bookmark.Bookmark;
+import org.apache.causeway.viewer.graphql.viewer.test.domain.dept.StaffMember;
+import org.apache.causeway.viewer.graphql.viewer.test.e2e.Abstract_IntegTest;
+
+import lombok.val;
+
+
+//NOT USING @Transactional since we are running server within same transaction otherwise
+@Order(60)
+@ActiveProfiles("test")
+public class Staff_IntegTest extends Abstract_IntegTest {
+
+    @TestFactory
+    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("._.gql");
+                })
+                .map(file -> {
+                    String fileName = file.getFileName().toString();
+                    String testName = fileName.substring(integClassName.length() + ".each.".length()).replace("._.gql", "");
+                    return JupiterApprovals.dynamicTest(
+                            testName,
+                            options -> {
+                                Approvals.verify(submitFileNamed(fileName), jsonOptions(options));
+                                afterEach();
+                                beforeEach();
+                            });
+                })
+                .collect(Collectors.toList());
+    }
+
+
+}
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Admin_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Admin_IntegTest.java
deleted file mode 100644
index bc12c60fde..0000000000
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Admin_IntegTest.java
+++ /dev/null
@@ -1,84 +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.queryandmutations;
-
-import org.approvaltests.Approvals;
-import org.approvaltests.reporters.DiffReporter;
-import org.approvaltests.reporters.UseReporter;
-import org.junit.jupiter.api.Order;
-import org.junit.jupiter.api.Test;
-
-import org.springframework.test.context.ActiveProfiles;
-
-import org.apache.causeway.viewer.graphql.viewer.test.e2e.Abstract_IntegTest;
-
-import lombok.val;
-
-
-//NOT USING @Transactional since we are running server within same transaction otherwise
-@Order(20)
-@ActiveProfiles("test")
-public class Admin_IntegTest extends Abstract_IntegTest {
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void admin_action() throws Exception {
-
-        // when
-        val response = submit();
-
-        // then payload
-        Approvals.verify(response, jsonOptions());
-    }
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void action_with_disabled_param() throws Exception {
-
-        // when
-        val response = submit();
-
-        // then payload
-        Approvals.verify(response, jsonOptions());
-    }
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void action_with_hidden_param() throws Exception {
-
-        // when
-        val response = submit();
-
-        // then payload
-        Approvals.verify(response, jsonOptions());
-    }
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void other_admin_action() throws Exception {
-
-        // when
-        val response = submit();
-
-        // then payload
-        Approvals.verify(response, jsonOptions());
-    }
-
-
-}
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.java
deleted file mode 100644
index 24b72688ab..0000000000
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Calculator_IntegTest.java
+++ /dev/null
@@ -1,180 +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.queryandmutations;
-
-import org.approvaltests.Approvals;
-import org.approvaltests.reporters.DiffReporter;
-import org.approvaltests.reporters.UseReporter;
-import org.junit.jupiter.api.Order;
-import org.junit.jupiter.api.Test;
-
-import org.springframework.test.context.ActiveProfiles;
-
-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 Abstract_IntegTest {
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void add_integers() throws Exception {
-
-        // when, then
-        Approvals.verify(submit(), jsonOptions());
-    }
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void add_integer_wrappers() throws Exception {
-
-        // when, then
-        Approvals.verify(submit(), jsonOptions());
-    }
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void add_doubles() throws Exception {
-
-        // when, then
-        Approvals.verify(submit(), jsonOptions());
-    }
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void add_double_wrappers() throws Exception {
-
-        // when, then
-        Approvals.verify(submit(), jsonOptions());
-    }
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void add_floats() throws Exception {
-
-        // when, then
-        Approvals.verify(submit(), jsonOptions());
-    }
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void add_float_wrappers() throws Exception {
-
-        // when, then
-        Approvals.verify(submit(), jsonOptions());
-    }
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void add_big_integers() throws Exception {
-
-        // when, then
-        Approvals.verify(submit(), jsonOptions());
-    }
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void add_big_decimals() throws Exception {
-
-        // when, then
-        Approvals.verify(submit(), jsonOptions());
-    }
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void plus_days() throws Exception {
-
-        // when, then
-        Approvals.verify(submit(), jsonOptions());
-    }
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void plus_joda_days() throws Exception {
-
-        // when, then
-        Approvals.verify(submit(), jsonOptions());
-    }
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void boolean_and_1() throws Exception {
-
-        // when, then
-        Approvals.verify(submit(), jsonOptions());
-
-    }
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void boolean_and_2() throws Exception {
-
-        // when, then
-        Approvals.verify(submit(), jsonOptions());
-    }
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void boolean_or_1() throws Exception {
-
-        // when, then
-        Approvals.verify(submit(), jsonOptions());
-
-    }
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void boolean_or_2() throws Exception {
-
-        // when, then
-        Approvals.verify(submit(), jsonOptions());
-
-    }
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void boolean_not() throws Exception {
-
-        // when, then
-        Approvals.verify(submit(), jsonOptions());
-
-    }
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void next_month() throws Exception {
-
-        // when, then
-        Approvals.verify(submit(), jsonOptions());
-
-    }
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void concat() throws Exception {
-
-        // when, then
-        Approvals.verify(submit(), jsonOptions());
-
-    }
-
-
-}
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.java
deleted file mode 100644
index 55e23e5054..0000000000
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Department_IntegTest.java
+++ /dev/null
@@ -1,204 +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.queryandmutations;
-
-import java.util.List;
-
-import org.approvaltests.Approvals;
-import org.approvaltests.reporters.DiffReporter;
-import org.approvaltests.reporters.UseReporter;
-import org.junit.jupiter.api.Order;
-import org.junit.jupiter.api.Test;
-
-import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat;
-
-import org.springframework.test.context.ActiveProfiles;
-import org.springframework.transaction.annotation.Propagation;
-
-import org.apache.causeway.viewer.graphql.viewer.test.domain.dept.Department;
-import org.apache.causeway.viewer.graphql.viewer.test.domain.dept.DeptHead;
-import org.apache.causeway.viewer.graphql.viewer.test.e2e.Abstract_IntegTest;
-
-import lombok.val;
-
-
-//NOT USING @Transactional since we are running server within same transaction otherwise
-@Order(40)
-@ActiveProfiles("test")
-public class Department_IntegTest extends Abstract_IntegTest {
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void find_all_departments() throws Exception {
-
-        // given
-        transactionService.runTransactional(Propagation.REQUIRED, () -> {
-
-            departmentRepository.create("foo", null);
-            departmentRepository.create("bar", null);
-            transactionService.flushTransaction();
-
-            List<Department> allDepartment = departmentRepository.findAll();
-            assertThat(allDepartment).hasSize(2);
-
-            List<DeptHead> allDeptHead = deptHeadRepository.findAll();
-            assertThat(allDeptHead).isEmpty();
-        });
-
-        // when, then
-        Approvals.verify(submit(), jsonOptions());
-    }
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void find_department_by_name() throws Exception {
-
-        // when, then
-        Approvals.verify(submit(), jsonOptions());
-    }
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void find_department_and_change_name_invalid() throws Exception {
-
-        // when, then
-        Approvals.verify(submit(), jsonOptions());
-    }
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void find_department_and_change_head_default() throws Exception {
-
-        // when, then
-        Approvals.verify(submit(), jsonOptions());
-    }
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void find_department_and_edit_head_autocomplete() throws Exception {
-
-        // when, then
-        Approvals.verify(submit(), jsonOptions());
-    }
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void find_department_and_edit_head_autocomplete_none_matching() throws Exception {
-
-        // when, then
-        Approvals.verify(submit(), jsonOptions());
-    }
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void find_department_and_add_staff_member_choices() throws Exception {
-
-        // when, then
-        Approvals.verify(submit(), jsonOptions());
-
-    }
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void find_department_and_add_staff_members() throws Exception {
-
-        // when, then
-        Approvals.verify(submit(), jsonOptions());
-
-    }
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void find_department_and_change_head_autocomplete() throws Exception {
-
-        // when, then
-        Approvals.verify(submit(), jsonOptions());
-    }
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void create_department() throws Exception {
-
-        // given
-        final int numDepartmentsInitially =
-                transactionService.callTransactional(
-                        Propagation.REQUIRED,
-                        () -> departmentRepository.findAll().size()
-                ).valueAsNonNullElseFail();
-
-        // when
-        String newDepartmentName = "newbie";
-        val response = submit();
-
-        // then payload
-        Approvals.verify(response, jsonOptions());
-
-        // and also in the database
-        final List<Department> allDepartment =
-                transactionService.callTransactional(
-                        Propagation.REQUIRED,
-                        () -> departmentRepository.findAll()
-                ).valueAsNonNullElseFail();
-
-        assertThat(allDepartment)
-                .hasSize(numDepartmentsInitially + 1)
-                .filteredOn(x -> x.getName().equals(newDepartmentName))
-                .extracting(Department::getName)
-                .first()
-                .isEqualTo(newDepartmentName);
-
-        final Department newbieDepartment =
-                transactionService.callTransactional(
-                        Propagation.REQUIRED,
-                        () -> departmentRepository.findByName(newDepartmentName)
-                ).valueAsNullableElseFail();
-
-        assertThat(newbieDepartment).isNotNull();
-    }
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void create_department_name_param_disabled() throws Exception {
-
-        // when
-        val response = submit();
-
-        // then payload
-        Approvals.verify(response, jsonOptions());
-    }
-
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void find_department_and_remove_staff_member_choices() throws Exception {
-
-        // when, then
-        Approvals.verify(submit(), jsonOptions());
-    }
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void find_department_and_list_its_staff() throws Exception {
-
-        // when, then
-        Approvals.verify(submit(), jsonOptions());
-    }
-
-
-}
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/scenario/Calculator_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/scenario/Calculator_IntegTest.java
deleted file mode 100644
index bb57a593f8..0000000000
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/scenario/Calculator_IntegTest.java
+++ /dev/null
@@ -1,48 +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.scenario;
-
-import org.approvaltests.Approvals;
-import org.approvaltests.reporters.DiffReporter;
-import org.approvaltests.reporters.UseReporter;
-import org.junit.jupiter.api.Order;
-import org.junit.jupiter.api.Test;
-
-import org.springframework.test.context.ActiveProfiles;
-
-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 Abstract_IntegTest {
-
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void concat() throws Exception {
-
-        // when, then
-        Approvals.verify(submit(), jsonOptions());
-
-    }
-
-
-}
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/scenario/Department_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/scenario/Department_IntegTest.java
deleted file mode 100644
index 82d253d988..0000000000
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/scenario/Department_IntegTest.java
+++ /dev/null
@@ -1,46 +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.scenario;
-
-import org.approvaltests.Approvals;
-import org.approvaltests.reporters.DiffReporter;
-import org.approvaltests.reporters.UseReporter;
-import org.junit.jupiter.api.Order;
-import org.junit.jupiter.api.Test;
-
-import org.springframework.test.context.ActiveProfiles;
-
-import org.apache.causeway.viewer.graphql.viewer.test.e2e.Abstract_IntegTest;
-
-
-//NOT USING @Transactional since we are running server within same transaction otherwise
-@Order(40)
-@ActiveProfiles("test")
-public class Department_IntegTest extends Abstract_IntegTest {
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void find_department_and_change_name() throws Exception {
-
-        // when, then
-        Approvals.verify(submit(), jsonOptions());
-    }
-
-
-}
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/DeptHeadMutating_IntegTest.change_department_name._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/special/DeptHeadMutating_IntegTest.change_department_name._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/DeptHeadMutating_IntegTest.change_department_name._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/special/DeptHeadMutating_IntegTest.change_department_name._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/DeptHeadMutating_IntegTest.change_department_name.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/special/DeptHeadMutating_IntegTest.change_department_name.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/DeptHeadMutating_IntegTest.change_department_name.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/special/DeptHeadMutating_IntegTest.change_department_name.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/DeptHeadMutating_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/special/DeptHeadMutating_IntegTest.java
similarity index 86%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/DeptHeadMutating_IntegTest.java
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/special/DeptHeadMutating_IntegTest.java
index 46799d4b15..abd2185aa5 100644
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/DeptHeadMutating_IntegTest.java
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/special/DeptHeadMutating_IntegTest.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.viewer.test.e2e.queryandmutations;
+package org.apache.causeway.viewer.graphql.viewer.test.e2e.special;
 
 import java.util.Optional;
 
@@ -42,18 +42,6 @@ import lombok.val;
 @ActiveProfiles("test")
 public class DeptHeadMutating_IntegTest extends Abstract_IntegTest {
 
-    @Test
-    @UseReporter(DiffReporter.class)
-    void create_department() throws Exception {
-
-        // when lookup 'Prof. Dicky Horwich' and change it to 'Prof. Richard Horwich'
-        String response = submit();
-
-        // then payload
-        Approvals.verify(response, jsonOptions());
-
-    }
-
     @Test
     @UseReporter(DiffReporter.class)
     void change_department_name() throws Exception {
@@ -72,6 +60,6 @@ public class DeptHeadMutating_IntegTest extends Abstract_IntegTest {
 
         // then payload
         Approvals.verify(response, jsonOptions());
-    }
 
+    }
 }
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/DeptHead_IntegTest.find_depthead_and_change_name._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/special/DeptHead_2_IntegTest.find_depthead_and_change_name._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/DeptHead_IntegTest.find_depthead_and_change_name._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/special/DeptHead_2_IntegTest.find_depthead_and_change_name._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/DeptHead_IntegTest.find_depthead_and_change_name.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/special/DeptHead_2_IntegTest.find_depthead_and_change_name.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/DeptHead_IntegTest.find_depthead_and_change_name.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/special/DeptHead_2_IntegTest.find_depthead_and_change_name.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/DeptHead_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/special/DeptHead_2_IntegTest.java
similarity index 73%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/DeptHead_IntegTest.java
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/special/DeptHead_2_IntegTest.java
index 8cc2cd5ff3..4d9aaa2830 100644
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/DeptHead_IntegTest.java
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/special/DeptHead_2_IntegTest.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.viewer.test.e2e.queryandmutations;
+package org.apache.causeway.viewer.graphql.viewer.test.e2e.special;
 
 import org.approvaltests.Approvals;
 import org.approvaltests.reporters.DiffReporter;
@@ -36,33 +36,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 Abstract_IntegTest {
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void find_depthead_by_name() throws Exception {
-
-        // when, then
-        Approvals.verify(submit(), jsonOptions());
-    }
-
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void find_depthead_and_change_name_invalid() throws Exception {
-
-        String response = submit();
-
-        // then payload
-        Approvals.verify(response, jsonOptions());
-    }
-    @Test
-    @UseReporter(DiffReporter.class)
-    void find_depthead_and_change_name_invoke_invalid() throws Exception {
-
-        // when, then
-        Approvals.verify(submit(), jsonOptions());
-    }
+public class DeptHead_2_IntegTest extends Abstract_IntegTest {
 
     @Test
     @UseReporter(DiffReporter.class)
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.find_staff_member_by_name_and_download_photo._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/special/Staff_2_IntegTest.find_staff_member_by_name_and_download_photo._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.find_staff_member_by_name_and_download_photo._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/special/Staff_2_IntegTest.find_staff_member_by_name_and_download_photo._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.find_staff_member_by_name_and_download_photo.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/special/Staff_2_IntegTest.find_staff_member_by_name_and_download_photo.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.find_staff_member_by_name_and_download_photo.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/special/Staff_2_IntegTest.find_staff_member_by_name_and_download_photo.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/special/Staff_2_IntegTest.java
similarity index 62%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.java
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/special/Staff_2_IntegTest.java
index f992595a07..bfb905b8e7 100644
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.java
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/special/Staff_2_IntegTest.java
@@ -16,16 +16,14 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.viewer.test.e2e.queryandmutations;
+package org.apache.causeway.viewer.graphql.viewer.test.e2e.special;
 
 import java.io.IOException;
 import java.net.URI;
 import java.net.http.HttpClient;
 import java.net.http.HttpRequest;
 import java.net.http.HttpResponse;
-import java.util.Optional;
 
-import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
 import org.approvaltests.Approvals;
@@ -33,16 +31,11 @@ import org.approvaltests.reporters.DiffReporter;
 import org.approvaltests.reporters.UseReporter;
 import org.junit.jupiter.api.Order;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.condition.DisabledIfEnvironmentVariable;
 
 import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
-import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat;
 
 import org.springframework.test.context.ActiveProfiles;
-import org.springframework.transaction.annotation.Propagation;
 
-import org.apache.causeway.applib.services.bookmark.Bookmark;
-import org.apache.causeway.viewer.graphql.viewer.test.domain.dept.StaffMember;
 import org.apache.causeway.viewer.graphql.viewer.test.e2e.Abstract_IntegTest;
 
 import lombok.val;
@@ -51,77 +44,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 Abstract_IntegTest {
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void list_all_staff_members() throws Exception {
-
-        // when, then
-        Approvals.verify(submit(), jsonOptions());
-    }
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void find_staff_member_by_name_and_edit_grade_choices() throws Exception {
-
-        // when, then
-        Approvals.verify(submit(), jsonOptions());
-    }
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void find_staff_member_by_name_and_edit() throws Exception {
-
-        // given
-        final Optional<Bookmark> bookmarkIfAny =
-                transactionService.callTransactional(
-                        Propagation.REQUIRED,
-                        () -> {
-                            StaffMember pojo = staffMemberRepository.findByName("Gerry Jones");
-                            return bookmarkService.bookmarkFor(pojo);
-                        }
-                ).valueAsNullableElseFail();
-
-        assertThat(bookmarkIfAny).isPresent();
-
-        // when, then
-        Approvals.verify(submit(), jsonOptions());
-
-        // and in the database...
-        final Optional<StaffMember> staffMemberIfAny =
-                transactionService.callTransactional(
-                        Propagation.REQUIRED,
-                        () -> bookmarkService.lookup(bookmarkIfAny.get(), StaffMember.class)
-                ).valueAsNullableElseFail();
-
-        assertThat(staffMemberIfAny).isPresent();
-        assertThat(staffMemberIfAny.get()).extracting(StaffMember::getName).isEqualTo("Gerald Johns");
-    }
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void staff_member_name_validate() throws Exception {
-
-        // when, then
-        Approvals.verify(submit(), jsonOptions());
-    }
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void staff_member_name_edit_invalid() throws Exception {
-
-        // when, then
-        Approvals.verify(submit(), jsonOptions());
-    }
-
-    @Test
-    @UseReporter(DiffReporter.class)
-    void create_staff_member_with_department() throws Exception {
-
-        Approvals.verify(submit(), jsonOptions());
-
-    }
+public class Staff_2_IntegTest extends Abstract_IntegTest {
 
     @Test
     @UseReporter(DiffReporter.class)
diff --git a/viewers/graphql/test/src/test/resources/schema.gql b/viewers/graphql/test/src/test/resources/schema.gql
index ad5e32ac20..a6b68304bb 100644
--- a/viewers/graphql/test/src/test/resources/schema.gql
+++ b/viewers/graphql/test/src/test/resources/schema.gql
@@ -1876,7 +1876,9 @@ type university_calc_Calculator {
   not: university_calc_Calculator__not__gqlv_action
   or: university_calc_Calculator__or__gqlv_action
   plusDays: university_calc_Calculator__plusDays__gqlv_action
+  plusDaysAndHoursAndMinutes: university_calc_Calculator__plusDaysAndHoursAndMinutes__gqlv_action
   plusJodaDays: university_calc_Calculator__plusJodaDays__gqlv_action
+  plusJodaDaysAndHoursAndMinutes: university_calc_Calculator__plusJodaDaysAndHoursAndMinutes__gqlv_action
 }
 
 type university_calc_Calculator__addBigDecimals__gqlv_action {
@@ -2152,9 +2154,9 @@ type university_calc_Calculator__addIntegers__y__gqlv_action_parameter {
 type university_calc_Calculator__addShortWrappers__gqlv_action {
   disabled: String
   hidden: Boolean
-  invoke(x: Int!, y: Int): Int
+  invoke(x: Short!, y: Short): Short
   params: university_calc_Calculator__addShortWrappers__gqlv_action_params
-  validate(x: Int, y: Int): String
+  validate(x: Short, y: Short): String
 }
 
 type university_calc_Calculator__addShortWrappers__gqlv_action_params {
@@ -2164,24 +2166,24 @@ type university_calc_Calculator__addShortWrappers__gqlv_action_params {
 
 type university_calc_Calculator__addShortWrappers__x__gqlv_action_parameter {
   datatype: String
-  disabled(x: Int): String
+  disabled(x: Short): String
   hidden: Boolean
   validity: String
 }
 
 type university_calc_Calculator__addShortWrappers__y__gqlv_action_parameter {
   datatype: String
-  disabled(x: Int, y: Int): String
-  hidden(x: Int): Boolean
+  disabled(x: Short, y: Short): String
+  hidden(x: Short): Boolean
   validity: String
 }
 
 type university_calc_Calculator__addShorts__gqlv_action {
   disabled: String
   hidden: Boolean
-  invoke(x: Int!, y: Int!): Int
+  invoke(x: Short!, y: Short!): Short
   params: university_calc_Calculator__addShorts__gqlv_action_params
-  validate(x: Int, y: Int): String
+  validate(x: Short, y: Short): String
 }
 
 type university_calc_Calculator__addShorts__gqlv_action_params {
@@ -2191,15 +2193,15 @@ type university_calc_Calculator__addShorts__gqlv_action_params {
 
 type university_calc_Calculator__addShorts__x__gqlv_action_parameter {
   datatype: String
-  disabled(x: Int): String
+  disabled(x: Short): String
   hidden: Boolean
   validity: String
 }
 
 type university_calc_Calculator__addShorts__y__gqlv_action_parameter {
   datatype: String
-  disabled(x: Int, y: Int): String
-  hidden(x: Int): Boolean
+  disabled(x: Short, y: Short): String
+  hidden(x: Short): Boolean
   validity: String
 }
 
@@ -2323,9 +2325,52 @@ type university_calc_Calculator__or__y__gqlv_action_parameter {
   validity: String
 }
 
+type university_calc_Calculator__plusDaysAndHoursAndMinutes__dateTime__gqlv_action_parameter {
+  datatype: String
+  disabled(dateTime: String): String
+  hidden: Boolean
+  validity: String
+}
+
+type university_calc_Calculator__plusDaysAndHoursAndMinutes__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke(dateTime: String!, numDays: Int!, numHours: Int!, numMinutes: Int!): String
+  params: university_calc_Calculator__plusDaysAndHoursAndMinutes__gqlv_action_params
+  validate(dateTime: String, numDays: Int, numHours: Int, numMinutes: Int): String
+}
+
+type university_calc_Calculator__plusDaysAndHoursAndMinutes__gqlv_action_params {
+  dateTime: university_calc_Calculator__plusDaysAndHoursAndMinutes__dateTime__gqlv_action_parameter
+  numDays: university_calc_Calculator__plusDaysAndHoursAndMinutes__numDays__gqlv_action_parameter
+  numHours: university_calc_Calculator__plusDaysAndHoursAndMinutes__numHours__gqlv_action_parameter
+  numMinutes: university_calc_Calculator__plusDaysAndHoursAndMinutes__numMinutes__gqlv_action_parameter
+}
+
+type university_calc_Calculator__plusDaysAndHoursAndMinutes__numDays__gqlv_action_parameter {
+  datatype: String
+  disabled(dateTime: String, numDays: Int): String
+  hidden(dateTime: String): Boolean
+  validity: String
+}
+
+type university_calc_Calculator__plusDaysAndHoursAndMinutes__numHours__gqlv_action_parameter {
+  datatype: String
+  disabled(dateTime: String, numDays: Int, numHours: Int): String
+  hidden(dateTime: String, numDays: Int): Boolean
+  validity: String
+}
+
+type university_calc_Calculator__plusDaysAndHoursAndMinutes__numMinutes__gqlv_action_parameter {
+  datatype: String
+  disabled(dateTime: String, numDays: Int, numHours: Int, numMinutes: Int): String
+  hidden(dateTime: String, numDays: Int, numHours: Int): Boolean
+  validity: String
+}
+
 type university_calc_Calculator__plusDays__date__gqlv_action_parameter {
   datatype: String
-  disabled(date: String): String
+  disabled(date: Date): String
   hidden: Boolean
   validity: String
 }
@@ -2333,9 +2378,9 @@ type university_calc_Calculator__plusDays__date__gqlv_action_parameter {
 type university_calc_Calculator__plusDays__gqlv_action {
   disabled: String
   hidden: Boolean
-  invoke(date: String!, numDays: Int!): String
+  invoke(date: Date!, numDays: Int!): Date
   params: university_calc_Calculator__plusDays__gqlv_action_params
-  validate(date: String, numDays: Int): String
+  validate(date: Date, numDays: Int): String
 }
 
 type university_calc_Calculator__plusDays__gqlv_action_params {
@@ -2345,8 +2390,51 @@ type university_calc_Calculator__plusDays__gqlv_action_params {
 
 type university_calc_Calculator__plusDays__numDays__gqlv_action_parameter {
   datatype: String
-  disabled(date: String, numDays: Int): String
-  hidden(date: String): Boolean
+  disabled(date: Date, numDays: Int): String
+  hidden(date: Date): Boolean
+  validity: String
+}
+
+type university_calc_Calculator__plusJodaDaysAndHoursAndMinutes__dateTime__gqlv_action_parameter {
+  datatype: String
+  disabled(dateTime: String): String
+  hidden: Boolean
+  validity: String
+}
+
+type university_calc_Calculator__plusJodaDaysAndHoursAndMinutes__gqlv_action {
+  disabled: String
+  hidden: Boolean
+  invoke(dateTime: String!, numDays: Int!, numHours: Int!, numMinutes: Int!): String
+  params: university_calc_Calculator__plusJodaDaysAndHoursAndMinutes__gqlv_action_params
+  validate(dateTime: String, numDays: Int, numHours: Int, numMinutes: Int): String
+}
+
+type university_calc_Calculator__plusJodaDaysAndHoursAndMinutes__gqlv_action_params {
+  dateTime: university_calc_Calculator__plusJodaDaysAndHoursAndMinutes__dateTime__gqlv_action_parameter
+  numDays: university_calc_Calculator__plusJodaDaysAndHoursAndMinutes__numDays__gqlv_action_parameter
+  numHours: university_calc_Calculator__plusJodaDaysAndHoursAndMinutes__numHours__gqlv_action_parameter
+  numMinutes: university_calc_Calculator__plusJodaDaysAndHoursAndMinutes__numMinutes__gqlv_action_parameter
+}
+
+type university_calc_Calculator__plusJodaDaysAndHoursAndMinutes__numDays__gqlv_action_parameter {
+  datatype: String
+  disabled(dateTime: String, numDays: Int): String
+  hidden(dateTime: String): Boolean
+  validity: String
+}
+
+type university_calc_Calculator__plusJodaDaysAndHoursAndMinutes__numHours__gqlv_action_parameter {
+  datatype: String
+  disabled(dateTime: String, numDays: Int, numHours: Int): String
+  hidden(dateTime: String, numDays: Int): Boolean
+  validity: String
+}
+
+type university_calc_Calculator__plusJodaDaysAndHoursAndMinutes__numMinutes__gqlv_action_parameter {
+  datatype: String
+  disabled(dateTime: String, numDays: Int, numHours: Int, numMinutes: Int): String
+  hidden(dateTime: String, numDays: Int, numHours: Int): Boolean
   validity: String
 }
 
@@ -2882,6 +2970,12 @@ enum org_apache_causeway_viewer_graphql_viewer_test_domain_dept_Grade__gqlv_enum
   SENIOR_LECTURER
 }
 
+"An RFC-3339 compliant Full Date Scalar"
+scalar Date
+
+"A 16-bit signed integer"
+scalar Short
+
 input causeway_applib_DomainObjectList__gqlv_input {
   id: ID
   ref: String