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 3751b2b5690e55705cee0e90e5de2f56ddb7afaa
Author: danhaywood <[email protected]>
AuthorDate: Wed Jan 17 19:35:28 2024 +0000

    CAUSEWAY-3676: wip, resurrected first end to end test and also dumping the 
schema
---
 .../causeway/viewer/graphql/viewer/test/.gitignore |   2 +
 ...ayViewerGraphqlTestModuleIntegTestAbstract.java | 211 +++++
 .../viewer/test/{source => }/ScratchPad.java       |   2 +-
 .../E1.java => domain/Department.java}             |  24 +-
 .../viewer/test/domain/DepartmentRepository.java   |  51 ++
 .../gqltestdomain/E2.java => domain/DeptHead.java} |  84 +-
 .../viewer/test/domain/DeptHeadRepository.java     |  55 ++
 .../gqltestdomain => domain}/TestDomainModule.java |   6 +-
 .../TopLevelMenu.java}                             |  35 +-
 .../TestEntity.java => domain/WithName.java}       |   4 +-
 .../WithNameRepository.java}                       |  28 +-
 .../EndToEnd_IntegTest.changeName.approved.json    |   0
 .../EndToEnd_IntegTest.changeName.submit.gql       |   2 +-
 .../EndToEnd_IntegTest.createE1.approved.json      |   0
 .../EndToEnd_IntegTest.createE1.submit.gql         |   0
 ...nd_IntegTest.find_all_departments.approved.json |  21 +
 ...oEnd_IntegTest.find_all_departments.submit.gql} |   4 +-
 .../viewer/test/e2e/EndToEnd_IntegTest.java        | 199 +++++
 ...oEnd_IntegTest.schema_types_name.approved.json} | 188 ++--
 ...ndToEnd_IntegTest.schema_types_name.submit.gql} |   0
 .../introspection-query-request.gql                |   0
 .../GqlSchema_detail_IntegTest.java}               |  60 +-
 .../test/schema/GqlSchema_print_IntegTest.java     |  87 ++
 .../GqlSchema_print_IntegTest.schema.approved.gql} |  54 +-
 .../viewer/test/schema/MyWinMergeDiffReporter.java |  28 +
 .../viewer/graphql/viewer/test/source/.gitignore   |   1 -
 ...ayViewerGraphqlTestModuleIntegTestAbstract.java |  97 ---
 .../EndToEnd_IntegTest.findAllE1.approved.json     |  14 -
 .../viewer/test/source/EndToEnd_IntegTest.java     | 284 -------
 .../source/gqltestdomain/TestEntityRepository.java |  77 --
 .../viewer/src/test/resources/testfiles/schema.gql | 943 ++++++++++++---------
 31 files changed, 1479 insertions(+), 1082 deletions(-)

diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/.gitignore
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/.gitignore
new file mode 100644
index 0000000000..837d57bea7
--- /dev/null
+++ 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/.gitignore
@@ -0,0 +1,2 @@
+*.received.gql
+*.received.json
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/CausewayViewerGraphqlTestModuleIntegTestAbstract.java
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/CausewayViewerGraphqlTestModuleIntegTestAbstract.java
new file mode 100644
index 0000000000..028d32d3b5
--- /dev/null
+++ 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/CausewayViewerGraphqlTestModuleIntegTestAbstract.java
@@ -0,0 +1,211 @@
+/*
+ *  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;
+
+import lombok.Value;
+import lombok.val;
+
+import java.io.IOException;
+import java.lang.reflect.Method;
+import java.net.URI;
+import java.net.http.HttpClient;
+import java.net.http.HttpRequest;
+import java.net.http.HttpResponse;
+import java.nio.charset.StandardCharsets;
+
+import javax.inject.Inject;
+
+import org.apache.causeway.applib.services.xactn.TransactionService;
+import org.apache.causeway.commons.internal.resources._Resources;
+
+import org.apache.causeway.core.config.environment.CausewaySystemEnvironment;
+import org.apache.causeway.core.metamodel.specloader.SpecificationLoader;
+import 
org.apache.causeway.viewer.graphql.viewer.source.GraphQlServiceForCauseway;
+import 
org.apache.causeway.viewer.graphql.viewer.source.GraphQlSourceForCauseway;
+
+import org.approvaltests.core.Options;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.MethodOrderer;
+import org.junit.jupiter.api.TestInfo;
+import org.junit.jupiter.api.TestInstance;
+import org.junit.jupiter.api.TestMethodOrder;
+
+import org.springframework.boot.SpringBootConfiguration;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import 
org.springframework.boot.test.autoconfigure.graphql.tester.AutoConfigureHttpGraphQlTester;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.web.server.LocalServerPort;
+import org.springframework.context.annotation.Import;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.context.annotation.PropertySources;
+import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
+import org.springframework.graphql.test.tester.HttpGraphQlTester;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.test.web.reactive.server.WebTestClient;
+
+import org.apache.causeway.core.config.presets.CausewayPresets;
+import 
org.apache.causeway.core.runtimeservices.CausewayModuleCoreRuntimeServices;
+import 
org.apache.causeway.persistence.jpa.eclipselink.CausewayModulePersistenceJpaEclipselink;
+import org.apache.causeway.security.bypass.CausewayModuleSecurityBypass;
+import 
org.apache.causeway.testing.fixtures.applib.CausewayModuleTestingFixturesApplib;
+import 
org.apache.causeway.viewer.graphql.viewer.CausewayModuleIncViewerGraphqlViewer;
+import org.apache.causeway.viewer.graphql.viewer.test.domain.TestDomainModule;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import static 
org.apache.causeway.commons.internal.assertions._Assert.assertNotNull;
+
+@SpringBootTest(
+        classes = {
+                CausewayViewerGraphqlTestModuleIntegTestAbstract.TestApp.class
+        },
+        webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT
+)
+@AutoConfigureHttpGraphQlTester
+@TestInstance(TestInstance.Lifecycle.PER_CLASS)
+@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
+@ActiveProfiles("test")
+public abstract class CausewayViewerGraphqlTestModuleIntegTestAbstract {
+
+    /**
+     * Compared to the production app manifest 
<code>domainapp.webapp.AppManifest</code>,
+     * here we in effect disable security checks, and we exclude any web/UI 
modules.
+     */
+    @SpringBootConfiguration
+    @EnableAutoConfiguration
+    @EnableJpaRepositories
+    @Import({
+
+            CausewayModuleCoreRuntimeServices.class,
+            CausewayModuleSecurityBypass.class,
+            CausewayModulePersistenceJpaEclipselink.class,
+            CausewayModuleTestingFixturesApplib.class,
+            CausewayModuleIncViewerGraphqlViewer.class,
+
+            TestDomainModule.class
+    })
+    @PropertySources({
+            @PropertySource(CausewayPresets.H2InMemory_withUniqueSchema),
+            @PropertySource(CausewayPresets.UseLog4j2Test),
+            @PropertySource(CausewayPresets.SilenceMetaModel),
+            @PropertySource(CausewayPresets.SilenceProgrammingModel),
+    })
+    public static class TestApp {
+
+    }
+
+    @Inject protected CausewaySystemEnvironment causewaySystemEnvironment;
+    @Inject protected SpecificationLoader specificationLoader;
+    @Inject protected TransactionService transactionService;
+    @Inject protected GraphQlSourceForCauseway graphQlSourceForCauseway;
+    @Inject protected GraphQlServiceForCauseway graphQlServiceForCauseway;
+
+    @LocalServerPort
+    protected int port;
+
+    @BeforeEach
+    void init(final TestInfo testInfo) {
+        this.testInfo = testInfo;
+        assertNotNull(causewaySystemEnvironment);
+        assertNotNull(specificationLoader);
+        assertNotNull(transactionService);
+        assertNotNull(graphQlSourceForCauseway);
+        assertNotNull(graphQlServiceForCauseway);
+    }
+
+
+    /**
+     * Populated automatically by JUnit5
+     */
+    protected TestInfo testInfo;
+
+    private ObjectMapper objectMapper = new ObjectMapper();
+
+    protected HttpGraphQlTester graphQlTester() {
+        WebTestClient client =
+                WebTestClient.bindToServer()
+                        .baseUrl("http://0.0.0.0:"; + port + "/graphql")
+                        .build();
+        return HttpGraphQlTester.create(client);
+    }
+
+
+    /**
+     * Builds an HTTP request based on the current {@link TestInfo}, with 
suffix <code>.submit.gql</code>,
+     * and unmarshalls the response as a string
+     *
+     * @return the response body as a string
+     * @throws Exception if an error occurs during the submission
+     */
+    protected String submit() throws Exception{
+        val httpRequest = buildRequest(testInfo, ".submit.gql");
+        return submitRequest(httpRequest);
+    }
+
+    @Value
+    protected static class GqlBody {
+        String query;
+    }
+
+    protected HttpRequest buildRequest(
+            final TestInfo testInfo,
+            final String resourceSuffix) throws IOException {
+
+        val testMethodName = 
testInfo.getTestMethod().map(Method::getName).get();
+        val resourceName = getClass().getSimpleName() + "." + testMethodName + 
resourceSuffix;
+        val resourceContents = readResource(resourceName);
+
+        val uri = URI.create(String.format("http://0.0.0.0:%d/graphql";, port));
+
+        val gqlBody = new GqlBody(resourceContents);
+        val gqlBodyStr = objectMapper.writeValueAsString(gqlBody);
+        val bodyPublisher = HttpRequest.BodyPublishers.ofString(gqlBodyStr);
+
+        return HttpRequest.newBuilder().
+                uri(uri).
+                POST(bodyPublisher).
+                setHeader("Content-Type", "application/json").
+                build();
+    }
+
+    private String submitRequest(final HttpRequest request) throws 
IOException, InterruptedException {
+        val responseBodyHandler = HttpResponse.BodyHandlers.ofString();
+        val httpClient = HttpClient.newBuilder().build();
+        val httpResponse = httpClient.send(request, responseBodyHandler);
+        return httpResponse.body();
+    }
+
+    private String readResource(final String resourceName) throws IOException {
+        return _Resources.loadAsString(getClass(), resourceName, 
StandardCharsets.UTF_8);
+    }
+
+    protected Options jsonOptions() {
+        return new Options().withScrubber(s -> {
+            try {
+                return 
objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(objectMapper.readTree(s));
+            } catch (JsonProcessingException e) {
+                throw new RuntimeException(e);
+            }
+        })
+        .forFile().withExtension(".json");
+    }
+
+
+}
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/ScratchPad.java
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/ScratchPad.java
similarity index 97%
rename from 
incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/ScratchPad.java
rename to 
incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/ScratchPad.java
index 824f1b4bc1..a0df76afc2 100644
--- 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/ScratchPad.java
+++ 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/ScratchPad.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.viewer.test.source;
+package org.apache.causeway.viewer.graphql.viewer.test;
 
 import java.util.ArrayList;
 import java.util.HashSet;
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/gqltestdomain/E1.java
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/Department.java
similarity index 74%
rename from 
incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/gqltestdomain/E1.java
rename to 
incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/Department.java
index 2cb68b146c..c9779a8921 100644
--- 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/gqltestdomain/E1.java
+++ 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/Department.java
@@ -16,9 +16,8 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.viewer.test.source.gqltestdomain;
+package org.apache.causeway.viewer.graphql.viewer.test.domain;
 
-import javax.inject.Named;
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
 import javax.persistence.Id;
@@ -31,17 +30,24 @@ import org.apache.causeway.applib.annotation.Nature;
 import org.apache.causeway.applib.annotation.Property;
 
 import lombok.Getter;
+import lombok.NoArgsConstructor;
 import lombok.Setter;
 
 //@Profile("demo-jpa")
 @Entity
 @Table(
         schema = "public",
-        name = "E1"
+        name = "Department"
 )
-@Named("gqltestdomain.E1")
[email protected]("gql.test.domain.Department")
+@NoArgsConstructor
 @DomainObject(nature = Nature.ENTITY)
-public class E1 implements TestEntity, Comparable {
+public class Department implements WithName, Comparable {
+
+    public Department(String name, DeptHead deptHead) {
+        this.name = name;
+        this.deptHead = deptHead;
+    }
 
     @Id
     @GeneratedValue
@@ -53,12 +59,12 @@ public class E1 implements TestEntity, Comparable {
     @Getter @Setter
     @Property
     @OneToOne(optional = true)
-    @JoinColumn(name = "e2_id")
-    private E2 e2;
+    @JoinColumn(name = "employee_id")
+    private DeptHead deptHead;
 
     @Override
     public int compareTo(final Object o) {
-        E1 e1 = (E1) o;
-        return this.getName().compareTo(e1.getName());
+        Department department = (Department) o;
+        return this.getName().compareTo(department.getName());
     }
 }
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/DepartmentRepository.java
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/DepartmentRepository.java
new file mode 100644
index 0000000000..3b18e6c5ee
--- /dev/null
+++ 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/DepartmentRepository.java
@@ -0,0 +1,51 @@
+/*
+ *  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.domain;
+
+import java.util.List;
+
+import javax.inject.Inject;
+
+import org.springframework.lang.Nullable;
+import org.springframework.stereotype.Repository;
+
+import org.apache.causeway.applib.services.repository.RepositoryService;
+
+@Repository
+public class DepartmentRepository {
+
+    @Inject private RepositoryService repositoryService;
+
+    public Department create(final String name, @Nullable final DeptHead 
deptHead) {
+        Department department = new Department(name, deptHead);
+        department.setName(name);
+        department.setDeptHead(deptHead);
+        repositoryService.persistAndFlush(department);
+        return department;
+    }
+
+    public List<Department> findAll() {
+        return repositoryService.allInstances(Department.class);
+    }
+
+    public void removeAll(){
+        repositoryService.removeAll(Department.class);
+    }
+
+}
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/gqltestdomain/E2.java
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/DeptHead.java
similarity index 55%
rename from 
incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/gqltestdomain/E2.java
rename to 
incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/DeptHead.java
index 157b8ee882..ad82f41393 100644
--- 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/gqltestdomain/E2.java
+++ 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/DeptHead.java
@@ -16,27 +16,23 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.viewer.test.source.gqltestdomain;
+package org.apache.causeway.viewer.graphql.viewer.test.domain;
 
-import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
 
 import javax.inject.Inject;
-import javax.inject.Named;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
 import javax.persistence.Id;
 import javax.persistence.JoinColumn;
-import javax.persistence.OneToMany;
 import javax.persistence.OneToOne;
 import javax.persistence.Table;
 import javax.persistence.Transient;
 
 import org.apache.causeway.applib.annotation.Action;
 import org.apache.causeway.applib.annotation.Bounding;
-import org.apache.causeway.applib.annotation.Collection;
 import org.apache.causeway.applib.annotation.DomainObject;
 import org.apache.causeway.applib.annotation.Nature;
 import org.apache.causeway.applib.annotation.Property;
@@ -45,15 +41,14 @@ import org.apache.causeway.applib.annotation.SemanticsOf;
 import lombok.Getter;
 import lombok.Setter;
 
-//@Profile("demo-jpa")
 @Entity
 @Table(
         schema = "public",
-        name = "E2"
+        name = "DeptHead"
 )
-@Named("gqltestdomain.E2")
[email protected]("gql.test.domain.DeptHead")
 @DomainObject(nature = Nature.ENTITY, bounding = Bounding.BOUNDED)
-public class E2 implements TestEntity{
+public class DeptHead implements WithName {
 
     @Id
     @GeneratedValue
@@ -66,56 +61,45 @@ public class E2 implements TestEntity{
     @Getter @Setter
     @Property
     @OneToOne(optional = true)
-    @JoinColumn(name = "e1_id")
-    private E1 e1;
+    @JoinColumn(name = "department_id")
+    private Department department;
 
-    @Action(semantics = SemanticsOf.IDEMPOTENT)
-    public E2 changeName(final String newName){
-        setName(newName);
-        return this;
-    }
-
-    public String default0ChangeName(){
-        return getName();
-    }
 
     @Action(semantics = SemanticsOf.IDEMPOTENT)
-    public E2 changeE1(final E1 e1){
-        setE1(e1);
-        return this;
-    }
+    public class changeName {
 
-    public List<E1> choices0ChangeE1(){
-        return 
testEntityRepository.findAllE1().stream().filter(e->e!=getE1()).collect(Collectors.toList());
-    }
+        public DeptHead act(final String newName){
+            setName(newName);
+            return DeptHead.this;
+        }
 
-    public String validateChangeE1(final E1 e1){
-        if (getE1() == e1) return "Already there";
-        return null;
+        public String default0Act(){
+            return getName();
+        }
     }
 
-    @OneToMany
-    @Getter @Setter
-    private List<E2> otherE2List = new ArrayList<>();
-
-    @Getter @Setter
-    @Collection
-    private List<String> stringList = new ArrayList<>();
 
-    @Getter @Setter
-    @Collection
-    private List<Integer> zintList = new ArrayList<>();
-
-    @Action(semantics = SemanticsOf.SAFE)
-    public List<TestEntity> otherEntities(){
-        List<TestEntity> result = new ArrayList<>();
-        result.addAll(testEntityRepository.findAllE1());
-        
result.addAll(testEntityRepository.findAllE2().stream().filter(e2->e2!=this).collect(Collectors.toList()));
-        return result;
+    @Action(semantics = SemanticsOf.IDEMPOTENT)
+    public class changeDeptHead {
+
+        public DeptHead act(final Department department){
+            setDepartment(department);
+            return DeptHead.this;
+        }
+
+        public List<Department> choices0Act(){
+            return departmentRepository.findAll().stream().
+                    filter(d -> d != getDepartment()).
+                    collect(Collectors.toList());
+        }
+
+        public String validateAct(final Department department){
+            if (getDepartment() == department) return "Already there";
+            return null;
+        }
     }
 
-    @Inject
-    @Transient
-    TestEntityRepository testEntityRepository;
+
+    @Inject @Transient DepartmentRepository departmentRepository;
 
 }
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/DeptHeadRepository.java
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/DeptHeadRepository.java
new file mode 100644
index 0000000000..e96e0110c8
--- /dev/null
+++ 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/DeptHeadRepository.java
@@ -0,0 +1,55 @@
+/*
+ *  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.domain;
+
+import java.util.List;
+
+import javax.inject.Inject;
+
+import org.springframework.lang.Nullable;
+import org.springframework.stereotype.Repository;
+
+import org.apache.causeway.applib.services.repository.RepositoryService;
+
+@Repository
+public class DeptHeadRepository {
+
+    @Inject private RepositoryService repositoryService;
+
+    public DeptHead create(final String name, @Nullable final Department 
department) {
+        DeptHead deptHead = new DeptHead();
+        deptHead.setName(name);
+        deptHead.setDepartment(department);
+        repositoryService.persistAndFlush(deptHead);
+        return deptHead;
+    }
+
+    public List<DeptHead> findAll() {
+        return repositoryService.allInstances(DeptHead.class);
+    }
+
+    public void removeAll(){
+        repositoryService.removeAll(DeptHead.class);
+    }
+
+    public DeptHead findByName(final String name){
+        return 
findAll().stream().filter(e2->e2.getName().equals(name)).findFirst().orElse(null);
+    }
+
+}
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/gqltestdomain/TestDomainModule.java
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/TestDomainModule.java
similarity index 89%
rename from 
incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/gqltestdomain/TestDomainModule.java
rename to 
incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/TestDomainModule.java
index 26ebcf8225..537ef8fe12 100644
--- 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/gqltestdomain/TestDomainModule.java
+++ 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/TestDomainModule.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.viewer.test.source.gqltestdomain;
+package org.apache.causeway.viewer.graphql.viewer.test.domain;
 
 import org.springframework.boot.autoconfigure.domain.EntityScan;
 import org.springframework.context.annotation.ComponentScan;
@@ -37,8 +37,8 @@ public class TestDomainModule implements ModuleWithFixtures {
         return new FixtureScript() {
             @Override
             protected void execute(ExecutionContext executionContext) {
-                repositoryService.removeAll(E1.class);
-                repositoryService.removeAll(E2.class);
+                repositoryService.removeAll(Department.class);
+                repositoryService.removeAll(DeptHead.class);
             }
         };
     }
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/gqltestdomain/GQLTestDomainMenu.java
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/TopLevelMenu.java
similarity index 66%
rename from 
incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/gqltestdomain/GQLTestDomainMenu.java
rename to 
incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/TopLevelMenu.java
index 8ff8d37593..baab6cca13 100644
--- 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/gqltestdomain/GQLTestDomainMenu.java
+++ 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/TopLevelMenu.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.viewer.test.source.gqltestdomain;
+package org.apache.causeway.viewer.graphql.viewer.test.domain;
 
 import java.util.List;
 
@@ -33,39 +33,44 @@ import org.apache.causeway.applib.annotation.SemanticsOf;
 
 import lombok.RequiredArgsConstructor;
 
-@Named("gqltestdomain.GQLTestDomainMenu")
+@Named("gql.test.domain.TopLevelMenu")
 @DomainService(
         nature=NatureOfService.VIEW)
 @javax.annotation.Priority(PriorityPrecedence.EARLY)
 @RequiredArgsConstructor(onConstructor_ = {@Inject})
-public class GQLTestDomainMenu {
+public class TopLevelMenu {
+
+    final DepartmentRepository departmentRepository;
+    final DeptHeadRepository deptHeadRepository;
+    final WithNameRepository withNameRepository;
 
     @Action(semantics = SemanticsOf.NON_IDEMPOTENT)
-    public E1 createE1(final String name, @Nullable final E2 e2){
-        return testEntityRepository.createE1(name, e2);
+    public Department createDepartment(
+            final String name,
+            @Nullable final DeptHead deptHead
+    ){
+        return departmentRepository.create(name, deptHead);
     }
 
     @Action(semantics = SemanticsOf.SAFE)
-    public List<E1> findAllE1(){
-        return testEntityRepository.findAllE1();
+    public List<Department> findAllDepartments(){
+        return departmentRepository.findAll();
     }
 
     @Action(semantics = SemanticsOf.SAFE)
-    public List<E2> findAllE2(){
-        return testEntityRepository.findAllE2();
+    public List<DeptHead> findAllDeptHeads(){
+        return deptHeadRepository.findAll();
     }
 
     @Action(semantics = SemanticsOf.SAFE)
-    public List<TestEntity> findAllTestEntities(){
-        return testEntityRepository.findAllTestEntities();
+    public List<WithName> findAllEntitiesWithName(){
+        return withNameRepository.findAll();
     }
 
     @Action(semantics = SemanticsOf.SAFE)
-    public E2 findE2(final String name){
-        return testEntityRepository.findE2ByName(name);
+    public DeptHead findDeptHeadByName(final String name){
+        return deptHeadRepository.findByName(name);
     }
 
-    @Inject
-    TestEntityRepository testEntityRepository;
 
 }
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/gqltestdomain/TestEntity.java
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/WithName.java
similarity index 88%
copy from 
incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/gqltestdomain/TestEntity.java
copy to 
incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/WithName.java
index b6ebc7575a..aeb7dabdec 100644
--- 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/gqltestdomain/TestEntity.java
+++ 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/WithName.java
@@ -16,9 +16,9 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.viewer.test.source.gqltestdomain;
+package org.apache.causeway.viewer.graphql.viewer.test.domain;
 
-public interface TestEntity {
+public interface WithName {
 
     public String getName();
 
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/gqltestdomain/TestEntity.java
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/WithNameRepository.java
similarity index 53%
rename from 
incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/gqltestdomain/TestEntity.java
rename to 
incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/WithNameRepository.java
index b6ebc7575a..fe5bf15b0c 100644
--- 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/gqltestdomain/TestEntity.java
+++ 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/WithNameRepository.java
@@ -16,10 +16,32 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.viewer.test.source.gqltestdomain;
+package org.apache.causeway.viewer.graphql.viewer.test.domain;
 
-public interface TestEntity {
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.inject.Inject;
+
+import org.springframework.stereotype.Repository;
+
+@Repository
+public class WithNameRepository {
+
+    @Inject private DepartmentRepository departmentRepository;
+    @Inject private DeptHeadRepository deptHeadRepository;
+
+    public List<WithName> findAll() {
+        final List<WithName> result = new ArrayList<>();
+        result.addAll(departmentRepository.findAll());
+        result.addAll(deptHeadRepository.findAll());
+        return result;
+    }
+
+    public void removeAll(){
+        departmentRepository.removeAll();
+        deptHeadRepository.removeAll();
+    }
 
-    public String getName();
 
 }
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/EndToEnd_IntegTest.changeName.approved.json
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/EndToEnd_IntegTest.changeName.approved.json
similarity index 100%
rename from 
incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/EndToEnd_IntegTest.changeName.approved.json
rename to 
incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/EndToEnd_IntegTest.changeName.approved.json
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/EndToEnd_IntegTest.changeName.submit.gql
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/EndToEnd_IntegTest.changeName.submit.gql
similarity index 89%
rename from 
incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/EndToEnd_IntegTest.changeName.submit.gql
rename to 
incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/EndToEnd_IntegTest.changeName.submit.gql
index e2b8760084..ffc29ff7f8 100644
--- 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/EndToEnd_IntegTest.changeName.submit.gql
+++ 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/EndToEnd_IntegTest.changeName.submit.gql
@@ -4,7 +4,7 @@
       name_gql_mutations {
         changeName(newName:"bar") {
           name
-          e1 {
+          department {
             name
           }
         }
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/EndToEnd_IntegTest.createE1.approved.json
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/EndToEnd_IntegTest.createE1.approved.json
similarity index 100%
rename from 
incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/EndToEnd_IntegTest.createE1.approved.json
rename to 
incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/EndToEnd_IntegTest.createE1.approved.json
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/EndToEnd_IntegTest.createE1.submit.gql
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/EndToEnd_IntegTest.createE1.submit.gql
similarity index 100%
rename from 
incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/EndToEnd_IntegTest.createE1.submit.gql
rename to 
incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/EndToEnd_IntegTest.createE1.submit.gql
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/EndToEnd_IntegTest.find_all_departments.approved.json
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/EndToEnd_IntegTest.find_all_departments.approved.json
new file mode 100644
index 0000000000..eace6ed631
--- /dev/null
+++ 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/EndToEnd_IntegTest.find_all_departments.approved.json
@@ -0,0 +1,21 @@
+{
+  "data" : {
+    "gql_test_domain_TopLevelMenu" : {
+      "findAllDepartments" : [ {
+        "name" : "foo",
+        "_gql_meta" : {
+          "id" : "1",
+          "logicalTypeName" : "gql.test.domain.Department",
+          "version" : null
+        }
+      }, {
+        "name" : "bar",
+        "_gql_meta" : {
+          "id" : "2",
+          "logicalTypeName" : "gql.test.domain.Department",
+          "version" : null
+        }
+      } ]
+    }
+  }
+}
\ No newline at end of file
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/EndToEnd_IntegTest.findAllE1.submit.gql
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/EndToEnd_IntegTest.find_all_departments.submit.gql
similarity index 65%
rename from 
incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/EndToEnd_IntegTest.findAllE1.submit.gql
rename to 
incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/EndToEnd_IntegTest.find_all_departments.submit.gql
index 38e7907d5b..c921e5677d 100644
--- 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/EndToEnd_IntegTest.findAllE1.submit.gql
+++ 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/EndToEnd_IntegTest.find_all_departments.submit.gql
@@ -1,6 +1,6 @@
 {
-  gqltestdomain_GQLTestDomainMenu {
-    findAllE1 {
+  gql_test_domain_TopLevelMenu {
+    findAllDepartments {
       name
       _gql_meta {
           id
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/EndToEnd_IntegTest.java
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/EndToEnd_IntegTest.java
new file mode 100644
index 0000000000..b4bedbfa57
--- /dev/null
+++ 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/EndToEnd_IntegTest.java
@@ -0,0 +1,199 @@
+/*
+ *  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.lang.reflect.Method;
+import java.net.URI;
+import java.net.http.HttpClient;
+import java.net.http.HttpRequest;
+import java.net.http.HttpResponse;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.inject.Inject;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import 
org.apache.causeway.viewer.graphql.viewer.source.GraphQlServiceForCauseway;
+
+import 
org.apache.causeway.viewer.graphql.viewer.test.CausewayViewerGraphqlTestModuleIntegTestAbstract;
+
+import org.apache.causeway.viewer.graphql.viewer.test.domain.Department;
+
+import org.apache.causeway.viewer.graphql.viewer.test.domain.DeptHead;
+import 
org.apache.causeway.viewer.graphql.viewer.test.domain.DepartmentRepository;
+
+import 
org.apache.causeway.viewer.graphql.viewer.test.domain.DeptHeadRepository;
+
+import 
org.apache.causeway.viewer.graphql.viewer.test.schema.MyWinMergeDiffReporter;
+
+import org.approvaltests.Approvals;
+import org.approvaltests.core.Options;
+import org.approvaltests.reporters.DiffReporter;
+import org.approvaltests.reporters.TextWebReporter;
+import org.approvaltests.reporters.UseReporter;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInfo;
+import org.junit.jupiter.api.condition.DisabledIfSystemProperty;
+
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.transaction.annotation.Propagation;
+
+import org.apache.causeway.applib.services.xactn.TransactionService;
+import org.apache.causeway.commons.internal.resources._Resources;
+import org.apache.causeway.core.config.environment.CausewaySystemEnvironment;
+import org.apache.causeway.core.metamodel.specloader.SpecificationLoader;
+import 
org.apache.causeway.viewer.graphql.viewer.source.GraphQlSourceForCauseway;
+import org.apache.causeway.viewer.graphql.viewer.test.domain.TopLevelMenu;
+
+import static 
org.apache.causeway.commons.internal.assertions._Assert.assertEquals;
+import static 
org.apache.causeway.commons.internal.assertions._Assert.assertNotNull;
+import static 
org.apache.causeway.commons.internal.assertions._Assert.assertTrue;
+
+import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat;
+
+import lombok.Value;
+import lombok.val;
+
+
+//NOT USING @Transactional since we are running server within same transaction 
otherwise
+@ActiveProfiles("test")
+public class EndToEnd_IntegTest extends 
CausewayViewerGraphqlTestModuleIntegTestAbstract {
+
+    @Inject DepartmentRepository departmentRepository;
+    @Inject DeptHeadRepository deptHeadRepository;
+    @Inject TopLevelMenu topLevelMenu;
+
+    @AfterEach
+    void afterEach(){
+        transactionService.runTransactional(Propagation.REQUIRED, () -> {
+            departmentRepository.removeAll();
+            deptHeadRepository.removeAll();
+        });
+    }
+
+    @Test
+    @UseReporter({MyWinMergeDiffReporter.class, DiffReporter.class})
+    void schema_types_name() throws Exception {
+        Approvals.verify(submit(), jsonOptions());
+    }
+
+
+    @Test
+    @UseReporter({MyWinMergeDiffReporter.class, 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());
+    }
+
+    //TODO started to fail on 2022-09-04, with testEntityRepository findAll 
being empty
+    @Test @DisabledIfSystemProperty(named = "isRunningWithSurefire", matches = 
"true")
+    @UseReporter(TextWebReporter.class)
+    void createE1() throws Exception {
+
+        //File targetFile3 = new 
File("src/test/resources/testfiles/targetFile3.gql");
+
+        String response1 = 
transactionService.callTransactional(Propagation.REQUIRED, () -> {
+
+            String submit = submit();
+            // just to show we need to query in separate tranasction
+            List<DeptHead> list = deptHeadRepository.findAll();
+            assertTrue(list.isEmpty());
+            return submit;
+
+        }).ifFailureFail().getValue().get();
+
+        final List<Department> allDepartment = new ArrayList<>();
+        transactionService.runTransactional(Propagation.REQUIRED, () -> {
+
+            List<Department> all = departmentRepository.findAll();
+            allDepartment.addAll(all);
+
+        });
+
+        assertEquals(1, allDepartment.size());
+        assertEquals("newbee", allDepartment.get(0).getName());
+
+        Approvals.verify(response1, jsonOptions());
+
+    }
+
+    //TODO started to fail on 2023-07-25
+    //disabled to rescue CI build
+    @Test @DisabledIfSystemProperty(named = "isRunningWithSurefire", matches = 
"true")
+    @UseReporter(TextWebReporter.class)
+    void changeName() throws Exception {
+
+        List<DeptHead> deptHeadList = new ArrayList<>();
+
+        transactionService.runTransactional(Propagation.REQUIRED, () -> {
+
+            deptHeadList.add(deptHeadRepository.create("foo", null));
+
+        });
+
+        DeptHead deptHead = deptHeadList.get(0);
+        assertEquals("foo", deptHead.getName());
+        assertEquals(deptHead.getName(), 
topLevelMenu.findDeptHeadByName("foo").getName());
+
+        String response = 
transactionService.callTransactional(Propagation.REQUIRED, () -> {
+
+            return submit();
+
+        }).ifFailureFail().getValue().get();
+
+        deptHeadList.clear();
+        transactionService.runTransactional(Propagation.REQUIRED, () -> {
+
+            List<DeptHead> all = deptHeadRepository.findAll();
+            deptHeadList.addAll(all);
+
+        });
+
+        DeptHead deptHeadModified = deptHeadList.get(0);
+
+        //TODO: implement ...
+//        assertEquals("bar", deptHeadModified.getName());
+//
+//        Approvals.verify(response, new Options());
+
+    }
+
+
+}
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/EndToEnd_IntegTest.simple_post_request.approved.json
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/EndToEnd_IntegTest.schema_types_name.approved.json
similarity index 53%
rename from 
incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/EndToEnd_IntegTest.simple_post_request.approved.json
rename to 
incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/EndToEnd_IntegTest.schema_types_name.approved.json
index 9dca72bb91..57aa17d2bb 100644
--- 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/EndToEnd_IntegTest.simple_post_request.approved.json
+++ 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/EndToEnd_IntegTest.schema_types_name.approved.json
@@ -27,22 +27,10 @@
         "name" : "__Type"
       }, {
         "name" : "__TypeKind"
-      }, {
-        "name" : "_gql_input__gqltestdomain_E1"
-      }, {
-        "name" : "_gql_input__gqltestdomain_E2"
-      }, {
-        "name" : "_gql_input__causeway_applib_ActionNode"
-      }, {
-        "name" : "_gql_input__causeway_applib_CollectionNode"
       }, {
         "name" : "_gql_input__causeway_applib_DomainObjectList"
-      }, {
-        "name" : "_gql_input__causeway_applib_FacetAttrNode"
       }, {
         "name" : "_gql_input__causeway_applib_FacetGroupNode"
-      }, {
-        "name" : "_gql_input__causeway_applib_FacetNode"
       }, {
         "name" : "_gql_input__causeway_applib_ParameterNode"
       }, {
@@ -53,6 +41,14 @@
         "name" : "_gql_input__causeway_applib_TypeNode"
       }, {
         "name" : "_gql_input__causeway_applib_UserMemento"
+      }, {
+        "name" : "_gql_input__causeway_applib_node_ActionNode"
+      }, {
+        "name" : "_gql_input__causeway_applib_node_CollectionNode"
+      }, {
+        "name" : "_gql_input__causeway_applib_node_FacetAttrNode"
+      }, {
+        "name" : "_gql_input__causeway_applib_node_FacetNode"
       }, {
         "name" : "_gql_input__causeway_conf_ConfigurationProperty"
       }, {
@@ -71,74 +67,64 @@
         "name" : "_gql_input__causeway_feat_ApplicationTypeMember"
       }, {
         "name" : "_gql_input__causeway_feat_ApplicationTypeProperty"
+      }, {
+        "name" : "_gql_input__causeway_schema_metamodel_v2_DomainClassDto"
       }, {
         "name" : "_gql_input__causeway_security_LoginRedirect"
       }, {
         "name" : "_gql_input__causeway_testing_fixtures_FixtureResult"
       }, {
-        "name" : "_gql_input__java_util_SortedMap"
+        "name" : "_gql_input__gql_test_domain_Department"
       }, {
-        "name" : "_gql_input__java_util_stream_Stream"
+        "name" : "_gql_input__gql_test_domain_DeptHead"
       }, {
-        "name" : 
"_gql_input__org_apache_causeway_applib_services_inject_ServiceInjector"
-      }, {
-        "name" : 
"_gql_input__org_apache_causeway_core_metamodel_inspect_model_MMNode"
+        "name" : "_gql_input__java_lang_Runnable"
       }, {
-        "name" : 
"_gql_input__org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript"
+        "name" : "_gql_input__java_util_Map"
       }, {
-        "name" : 
"_gql_input__org_apache_causeway_viewer_graphql_viewer_source_gqltestdomain_TestEntity"
+        "name" : "_gql_input__java_util_SortedMap"
       }, {
-        "name" : "gqltestdomain_E1"
+        "name" : "_gql_input__java_util_concurrent_Callable"
       }, {
-        "name" : "gqltestdomain_E1__DomainObject_meta"
+        "name" : "_gql_input__java_util_function_BiFunction"
       }, {
-        "name" : "gqltestdomain_E2"
+        "name" : "_gql_input__java_util_function_Consumer"
       }, {
-        "name" : "gqltestdomain_E2__DomainObject_meta"
+        "name" : "_gql_input__java_util_function_Function"
       }, {
-        "name" : "gqltestdomain_E2__DomainObject_mutators"
+        "name" : "_gql_input__java_util_stream_Stream"
       }, {
-        "name" : "gqltestdomain_GQLTestDomainMenu"
+        "name" : "_gql_input__org_apache_causeway_commons_functional_Either"
       }, {
-        "name" : "causeway_applib_ActionNode"
+        "name" : "_gql_input__org_apache_causeway_commons_functional_Railway"
       }, {
-        "name" : "causeway_applib_ActionNode__DomainObject_meta"
+        "name" : 
"_gql_input__org_apache_causeway_commons_functional_ThrowingConsumer"
       }, {
-        "name" : "causeway_applib_ActionNode__DomainObject_mutators"
+        "name" : 
"_gql_input__org_apache_causeway_commons_functional_ThrowingFunction"
       }, {
-        "name" : "causeway_applib_CollectionNode"
+        "name" : 
"_gql_input__org_apache_causeway_commons_functional_ThrowingRunnable"
       }, {
-        "name" : "causeway_applib_CollectionNode__DomainObject_meta"
+        "name" : "_gql_input__org_apache_causeway_commons_functional_Try"
       }, {
-        "name" : "causeway_applib_CollectionNode__DomainObject_mutators"
+        "name" : 
"_gql_input__org_apache_causeway_core_metamodel_inspect_model_MMNode"
       }, {
-        "name" : "causeway_applib_DomainObjectList"
+        "name" : 
"_gql_input__org_apache_causeway_core_metamodel_inspect_model_MemberNode"
       }, {
-        "name" : "causeway_applib_DomainObjectList__DomainObject_meta"
+        "name" : 
"_gql_input__org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript"
       }, {
-        "name" : "causeway_applib_FacetAttrNode"
+        "name" : 
"_gql_input__org_apache_causeway_viewer_graphql_viewer_test_domain_WithName"
       }, {
-        "name" : "causeway_applib_FacetAttrNode__DomainObject_meta"
+        "name" : "causeway_applib_DomainObjectList"
       }, {
-        "name" : "causeway_applib_FacetAttrNode__DomainObject_mutators"
+        "name" : "causeway_applib_DomainObjectList__DomainObject_meta"
       }, {
         "name" : "causeway_applib_FacetGroupNode"
       }, {
         "name" : "causeway_applib_FacetGroupNode__DomainObject_meta"
-      }, {
-        "name" : "causeway_applib_FacetGroupNode__DomainObject_mutators"
-      }, {
-        "name" : "causeway_applib_FacetNode"
-      }, {
-        "name" : "causeway_applib_FacetNode__DomainObject_meta"
-      }, {
-        "name" : "causeway_applib_FacetNode__DomainObject_mutators"
       }, {
         "name" : "causeway_applib_ParameterNode"
       }, {
         "name" : "causeway_applib_ParameterNode__DomainObject_meta"
-      }, {
-        "name" : "causeway_applib_ParameterNode__DomainObject_mutators"
       }, {
         "name" : "causeway_applib_PropertyNode"
       }, {
@@ -153,14 +139,32 @@
         "name" : "causeway_applib_TypeNode"
       }, {
         "name" : "causeway_applib_TypeNode__DomainObject_meta"
-      }, {
-        "name" : "causeway_applib_TypeNode__DomainObject_mutators"
       }, {
         "name" : "causeway_applib_UserMemento"
       }, {
         "name" : "causeway_applib_UserMemento__DomainObject_meta"
       }, {
         "name" : "causeway_applib_UserMenu"
+      }, {
+        "name" : "causeway_applib_node_ActionNode"
+      }, {
+        "name" : "causeway_applib_node_ActionNode__DomainObject_meta"
+      }, {
+        "name" : "causeway_applib_node_ActionNode__DomainObject_mutators"
+      }, {
+        "name" : "causeway_applib_node_CollectionNode"
+      }, {
+        "name" : "causeway_applib_node_CollectionNode__DomainObject_meta"
+      }, {
+        "name" : "causeway_applib_node_CollectionNode__DomainObject_mutators"
+      }, {
+        "name" : "causeway_applib_node_FacetAttrNode"
+      }, {
+        "name" : "causeway_applib_node_FacetAttrNode__DomainObject_meta"
+      }, {
+        "name" : "causeway_applib_node_FacetNode"
+      }, {
+        "name" : "causeway_applib_node_FacetNode__DomainObject_meta"
       }, {
         "name" : "causeway_conf_ConfigurationMenu"
       }, {
@@ -199,6 +203,10 @@
         "name" : "causeway_feat_ApplicationTypeProperty__DomainObject_meta"
       }, {
         "name" : "causeway_feat_ApplicationType__DomainObject_meta"
+      }, {
+        "name" : "causeway_schema_metamodel_v2_DomainClassDto"
+      }, {
+        "name" : 
"causeway_schema_metamodel_v2_DomainClassDto__DomainObject_meta"
       }, {
         "name" : "causeway_security_LoginRedirect"
       }, {
@@ -209,33 +217,105 @@
         "name" : "causeway_testing_fixtures_FixtureResult"
       }, {
         "name" : "causeway_testing_fixtures_FixtureResult__DomainObject_meta"
+      }, {
+        "name" : "gql_test_domain_Department"
+      }, {
+        "name" : "gql_test_domain_Department__DomainObject_meta"
+      }, {
+        "name" : "gql_test_domain_DeptHead"
+      }, {
+        "name" : "gql_test_domain_DeptHead__DomainObject_meta"
+      }, {
+        "name" : "gql_test_domain_DeptHead__DomainObject_mutators"
+      }, {
+        "name" : "gqltestdomain_GQLTestDomainMenu"
+      }, {
+        "name" : "java_lang_Runnable"
+      }, {
+        "name" : "java_lang_Runnable__DomainObject_meta"
+      }, {
+        "name" : "java_util_Map"
+      }, {
+        "name" : "java_util_Map__DomainObject_meta"
       }, {
         "name" : "java_util_SortedMap"
       }, {
         "name" : "java_util_SortedMap__DomainObject_meta"
+      }, {
+        "name" : "java_util_concurrent_Callable"
+      }, {
+        "name" : "java_util_concurrent_Callable__DomainObject_meta"
+      }, {
+        "name" : "java_util_function_BiFunction"
+      }, {
+        "name" : "java_util_function_BiFunction__DomainObject_meta"
+      }, {
+        "name" : "java_util_function_Consumer"
+      }, {
+        "name" : "java_util_function_Consumer__DomainObject_meta"
+      }, {
+        "name" : "java_util_function_Function"
+      }, {
+        "name" : "java_util_function_Function__DomainObject_meta"
       }, {
         "name" : "java_util_stream_Stream"
       }, {
         "name" : "java_util_stream_Stream__DomainObject_meta"
       }, {
-        "name" : "org_apache_causeway_applib_services_inject_ServiceInjector"
+        "name" : "org_apache_causeway_commons_functional_Either"
+      }, {
+        "name" : 
"org_apache_causeway_commons_functional_Either__DomainObject_meta"
+      }, {
+        "name" : 
"org_apache_causeway_commons_functional_Either__DomainObject_mutators"
+      }, {
+        "name" : "org_apache_causeway_commons_functional_Railway"
+      }, {
+        "name" : 
"org_apache_causeway_commons_functional_Railway__DomainObject_meta"
+      }, {
+        "name" : 
"org_apache_causeway_commons_functional_Railway__DomainObject_mutators"
+      }, {
+        "name" : "org_apache_causeway_commons_functional_ThrowingConsumer"
+      }, {
+        "name" : 
"org_apache_causeway_commons_functional_ThrowingConsumer__DomainObject_meta"
+      }, {
+        "name" : 
"org_apache_causeway_commons_functional_ThrowingConsumer__DomainObject_mutators"
       }, {
-        "name" : 
"org_apache_causeway_applib_services_inject_ServiceInjector__DomainObject_meta"
+        "name" : "org_apache_causeway_commons_functional_ThrowingFunction"
       }, {
-        "name" : 
"org_apache_causeway_applib_services_inject_ServiceInjector__DomainObject_mutators"
+        "name" : 
"org_apache_causeway_commons_functional_ThrowingFunction__DomainObject_meta"
+      }, {
+        "name" : 
"org_apache_causeway_commons_functional_ThrowingFunction__DomainObject_mutators"
+      }, {
+        "name" : "org_apache_causeway_commons_functional_ThrowingRunnable"
+      }, {
+        "name" : 
"org_apache_causeway_commons_functional_ThrowingRunnable__DomainObject_meta"
+      }, {
+        "name" : 
"org_apache_causeway_commons_functional_ThrowingRunnable__DomainObject_mutators"
+      }, {
+        "name" : "org_apache_causeway_commons_functional_Try"
+      }, {
+        "name" : 
"org_apache_causeway_commons_functional_Try__DomainObject_meta"
+      }, {
+        "name" : 
"org_apache_causeway_commons_functional_Try__DomainObject_mutators"
       }, {
         "name" : "org_apache_causeway_core_metamodel_inspect_model_MMNode"
       }, {
         "name" : 
"org_apache_causeway_core_metamodel_inspect_model_MMNode__DomainObject_meta"
+      }, {
+        "name" : "org_apache_causeway_core_metamodel_inspect_model_MemberNode"
+      }, {
+        "name" : 
"org_apache_causeway_core_metamodel_inspect_model_MemberNode__DomainObject_meta"
+      }, {
+        "name" : 
"org_apache_causeway_core_metamodel_inspect_model_MemberNode__DomainObject_mutators"
       }, {
         "name" : 
"org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript"
       }, {
         "name" : 
"org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript__DomainObject_meta"
       }, {
-        "name" : 
"org_apache_causeway_viewer_graphql_viewer_source_gqltestdomain_TestEntity"
+        "name" : 
"org_apache_causeway_viewer_graphql_viewer_test_domain_WithName"
       }, {
-        "name" : 
"org_apache_causeway_viewer_graphql_viewer_source_gqltestdomain_TestEntity__DomainObject_meta"
+        "name" : 
"org_apache_causeway_viewer_graphql_viewer_test_domain_WithName__DomainObject_meta"
       } ]
     }
   }
-}
+}
\ No newline at end of file
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/EndToEnd_IntegTest.simple_post_request.submit.gql
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/EndToEnd_IntegTest.schema_types_name.submit.gql
similarity index 100%
rename from 
incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/EndToEnd_IntegTest.simple_post_request.submit.gql
rename to 
incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/EndToEnd_IntegTest.schema_types_name.submit.gql
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/introspection-query-request.gql
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/introspectquery/introspection-query-request.gql
similarity index 100%
rename from 
incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/introspection-query-request.gql
rename to 
incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/introspectquery/introspection-query-request.gql
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/GQLSchema_IntegTest.java
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/schema/GqlSchema_detail_IntegTest.java
similarity index 80%
rename from 
incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/GQLSchema_IntegTest.java
rename to 
incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/schema/GqlSchema_detail_IntegTest.java
index 35c63ef439..65f10c4874 100644
--- 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/GQLSchema_IntegTest.java
+++ 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/schema/GqlSchema_detail_IntegTest.java
@@ -16,32 +16,27 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.causeway.viewer.graphql.viewer.test.source;
+package org.apache.causeway.viewer.graphql.viewer.test.schema;
 
 import java.util.List;
-import java.util.stream.Collectors;
 
 import javax.inject.Inject;
 
-import org.apache.causeway.commons.internal.base._Strings;
-import org.apache.causeway.commons.io.TextUtils;
+import org.apache.causeway.viewer.graphql.viewer.test.domain.DeptHead;
 
-import org.approvaltests.Approvals;
-import org.approvaltests.core.Options;
-import org.approvaltests.reporters.DiffReporter;
-import org.approvaltests.reporters.UseReporter;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
+
 import org.springframework.transaction.annotation.Transactional;
 
 import org.apache.causeway.core.config.environment.CausewaySystemEnvironment;
 import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
 import org.apache.causeway.core.metamodel.specloader.SpecificationLoader;
 import 
org.apache.causeway.viewer.graphql.viewer.source.GraphQlSourceForCauseway;
-import org.apache.causeway.viewer.graphql.viewer.test.source.gqltestdomain.E1;
-import org.apache.causeway.viewer.graphql.viewer.test.source.gqltestdomain.E2;
-import 
org.apache.causeway.viewer.graphql.viewer.test.source.gqltestdomain.GQLTestDomainMenu;
+import 
org.apache.causeway.viewer.graphql.viewer.test.CausewayViewerGraphqlTestModuleIntegTestAbstract;
+import org.apache.causeway.viewer.graphql.viewer.test.domain.Department;
+import org.apache.causeway.viewer.graphql.viewer.test.domain.TopLevelMenu;
 
 import static 
org.apache.causeway.commons.internal.assertions._Assert.assertEquals;
 import static 
org.apache.causeway.commons.internal.assertions._Assert.assertNotNull;
@@ -62,10 +57,9 @@ import graphql.schema.GraphQLSchema;
 import graphql.schema.GraphQLSchemaElement;
 import graphql.schema.GraphQLType;
 import graphql.schema.GraphQLTypeReference;
-import graphql.schema.idl.SchemaPrinter;
 
 @Transactional
-public class GQLSchema_IntegTest extends 
CausewayViewerGraphqlTestModuleIntegTestAbstract {
+public class GqlSchema_detail_IntegTest extends 
CausewayViewerGraphqlTestModuleIntegTestAbstract {
 
     @Inject private CausewaySystemEnvironment causewaySystemEnvironment;
     @Inject private SpecificationLoader specificationLoader;
@@ -78,38 +72,10 @@ public class GQLSchema_IntegTest extends 
CausewayViewerGraphqlTestModuleIntegTes
         assertNotNull(graphQlSourceForCauseway);
     }
 
-    @Test
-    @UseReporter(DiffReporter.class)
-    void schema() {
-
-        GraphQLSchema x;
-
-        GraphQL graphQL = graphQlSourceForCauseway.graphQl();
-        GraphQLSchema graphQLSchema = graphQL.getGraphQLSchema();
-
-        SchemaPrinter printer = new SchemaPrinter();
-
-        // Print schema
-        String schemaDefinition = printer.print(graphQLSchema);
-
-        Approvals.verify(schemaDefinition, gqlSchemaOptions());
-    }
-
-    private Options gqlSchemaOptions() {
-        return new Options()
-                .withScrubber(this::unixLineEndings)
-                .forFile().withExtension(".gql");
-    }
-
-    private String unixLineEndings(final String input) {
-        return TextUtils.streamLines(input)
-                .collect(Collectors.joining("\n"));
-    }
-
 
     @Test
     @Disabled
-    void assert_stuff_works() {
+    void detail() {
 
         GraphQLSchema x;
 
@@ -120,13 +86,13 @@ public class GQLSchema_IntegTest extends 
CausewayViewerGraphqlTestModuleIntegTes
 
         System.out.println(port);
 
-        ObjectSpecification objectSpecification1 = 
specificationLoader.specForType(E1.class).get();
+        ObjectSpecification objectSpecification1 = 
specificationLoader.specForType(Department.class).get();
         assertNotNull(objectSpecification1);
 
-        ObjectSpecification objectSpecification2 = 
specificationLoader.specForType(E2.class).get();
+        ObjectSpecification objectSpecification2 = 
specificationLoader.specForType(DeptHead.class).get();
         assertNotNull(objectSpecification2);
 
-        ObjectSpecification objectSpecification3 = 
specificationLoader.specForType(GQLTestDomainMenu.class).get();
+        ObjectSpecification objectSpecification3 = 
specificationLoader.specForType(TopLevelMenu.class).get();
         assertNotNull(objectSpecification3);
 
         GraphQL graphQL = graphQlSourceForCauseway.graphQl();
@@ -146,7 +112,7 @@ public class GQLSchema_IntegTest extends 
CausewayViewerGraphqlTestModuleIntegTes
 
         GraphQLType gqltestdomain_e1 = 
graphQLSchema.getType("gqltestdomain_E1");
         List<GraphQLSchemaElement> children = gqltestdomain_e1.getChildren();
-        assertEquals(5, children.size());
+        assertEquals(3, children.size());
 
         GraphQLObjectType gqltestdomain_e2 = (GraphQLObjectType) 
graphQLSchema.getType("gqltestdomain_E2");
         List<GraphQLFieldDefinition> fields = gqltestdomain_e2.getFields();
@@ -190,7 +156,7 @@ public class GQLSchema_IntegTest extends 
CausewayViewerGraphqlTestModuleIntegTes
         assertEquals("gqltestdomain_E2__DomainObject_mutators", 
mutationType.getName());
         assertEquals(1, mutationType.getFields().size());
         GraphQLFieldDefinition graphQLFieldDefinition = 
mutationType.getFields().get(0);
-        assertEquals("changeE1",graphQLFieldDefinition.getName());
+        assertEquals("changeDeptHead",graphQLFieldDefinition.getName());
         GraphQLArgument mutatorArgument = 
graphQLFieldDefinition.getArgument("e1");
 
         GraphQLType gqltestdomain_e1__domainObject_meta = 
graphQLSchema.getType("gqltestdomain_E1__DomainObject_meta");
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/schema/GqlSchema_print_IntegTest.java
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/schema/GqlSchema_print_IntegTest.java
new file mode 100644
index 0000000000..b12cd83ef3
--- /dev/null
+++ 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/schema/GqlSchema_print_IntegTest.java
@@ -0,0 +1,87 @@
+/*
+ *  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.schema;
+
+import java.util.stream.Collectors;
+
+import javax.inject.Inject;
+
+import org.apache.causeway.commons.io.TextUtils;
+
+import 
org.apache.causeway.viewer.graphql.viewer.test.CausewayViewerGraphqlTestModuleIntegTestAbstract;
+
+import org.approvaltests.Approvals;
+import org.approvaltests.core.Options;
+import org.approvaltests.reporters.DiffReporter;
+import org.approvaltests.reporters.UseReporter;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.springframework.transaction.annotation.Transactional;
+
+import org.apache.causeway.core.config.environment.CausewaySystemEnvironment;
+import org.apache.causeway.core.metamodel.specloader.SpecificationLoader;
+import 
org.apache.causeway.viewer.graphql.viewer.source.GraphQlSourceForCauseway;
+
+import static 
org.apache.causeway.commons.internal.assertions._Assert.assertEquals;
+import static 
org.apache.causeway.commons.internal.assertions._Assert.assertNotNull;
+import static 
org.apache.causeway.commons.internal.assertions._Assert.assertTrue;
+
+import graphql.schema.idl.SchemaPrinter;
+
+import lombok.val;
+
+@Transactional
+public class GqlSchema_print_IntegTest extends 
CausewayViewerGraphqlTestModuleIntegTestAbstract {
+
+    @Inject private CausewaySystemEnvironment causewaySystemEnvironment;
+    @Inject private SpecificationLoader specificationLoader;
+    @Inject private GraphQlSourceForCauseway graphQlSourceForCauseway;
+
+    @BeforeEach
+    void beforeEach() {
+        assertNotNull(causewaySystemEnvironment);
+        assertNotNull(specificationLoader);
+        assertNotNull(graphQlSourceForCauseway);
+    }
+
+    @UseReporter({MyWinMergeDiffReporter.class, DiffReporter.class})
+    @Test
+    void schema() {
+        val graphQL = graphQlSourceForCauseway.graphQl();
+        val graphQLSchema = graphQL.getGraphQLSchema();
+
+        val printer = new SchemaPrinter();
+
+        val schemaDefinition = printer.print(graphQLSchema);
+
+        Approvals.verify(schemaDefinition, gqlSchemaOptions());
+    }
+
+    private Options gqlSchemaOptions() {
+        return new Options()
+                .withScrubber(this::unixLineEndings)
+                .forFile().withExtension(".gql");
+    }
+
+    private String unixLineEndings(final String input) {
+        return TextUtils.streamLines(input)
+                .collect(Collectors.joining("\n"));
+    }
+
+}
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/GQLSchema_IntegTest.schema.approved.gql
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/schema/GqlSchema_print_IntegTest.schema.approved.gql
similarity index 93%
rename from 
incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/GQLSchema_IntegTest.schema.approved.gql
rename to 
incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/schema/GqlSchema_print_IntegTest.schema.approved.gql
index 5b095b0170..128cc4ba23 100644
--- 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/GQLSchema_IntegTest.schema.approved.gql
+++ 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/schema/GqlSchema_print_IntegTest.schema.approved.gql
@@ -26,7 +26,7 @@ type Query {
   causeway_applib_UserMenu: causeway_applib_UserMenu
   causeway_conf_ConfigurationMenu: causeway_conf_ConfigurationMenu
   causeway_security_LogoutMenu: causeway_security_LogoutMenu
-  gqltestdomain_GQLTestDomainMenu: gqltestdomain_GQLTestDomainMenu
+  gql_test_domain_TopLevelMenu: gql_test_domain_TopLevelMenu
   numServices: Int
 }
 
@@ -348,46 +348,42 @@ type 
causeway_testing_fixtures_FixtureResult__DomainObject_meta {
   logicalTypeName: String!
 }
 
-type gqltestdomain_E1 {
-  _gql_meta: gqltestdomain_E1__DomainObject_meta
-  e2: gqltestdomain_E2
+type gql_test_domain_Department {
+  _gql_meta: gql_test_domain_Department__DomainObject_meta
+  deptHead: gql_test_domain_DeptHead
   name: String!
 }
 
-type gqltestdomain_E1__DomainObject_meta {
+type gql_test_domain_Department__DomainObject_meta {
   id: String!
   logicalTypeName: String!
   version: String
 }
 
-type gqltestdomain_E2 {
-  _gql_meta: gqltestdomain_E2__DomainObject_meta
-  _gql_mutations: gqltestdomain_E2__DomainObject_mutators
-  e1: gqltestdomain_E1
+type gql_test_domain_DeptHead {
+  _gql_meta: gql_test_domain_DeptHead__DomainObject_meta
+  _gql_mutations: gql_test_domain_DeptHead__DomainObject_mutators
+  department: gql_test_domain_Department
   name: String
-  otherE2List: [gqltestdomain_E2]
-  otherEntities: 
[org_apache_causeway_viewer_graphql_viewer_test_source_gqltestdomain_TestEntity]
-  stringList: [String]
-  zintList: [Int]
 }
 
-type gqltestdomain_E2__DomainObject_meta {
+type gql_test_domain_DeptHead__DomainObject_meta {
   id: String!
   logicalTypeName: String!
   version: String
 }
 
-type gqltestdomain_E2__DomainObject_mutators {
-  changeE1(e1: _gql_input__gqltestdomain_E1!): gqltestdomain_E2
-  changeName(newName: String!): gqltestdomain_E2
+type gql_test_domain_DeptHead__DomainObject_mutators {
+  changeDeptHead(department: _gql_input__gql_test_domain_Department!): 
gql_test_domain_DeptHead
+  changeName(newName: String!): gql_test_domain_DeptHead
 }
 
-type gqltestdomain_GQLTestDomainMenu {
-  createE1(e2: _gql_input__gqltestdomain_E2, name: String): gqltestdomain_E1
-  findAllE1: [gqltestdomain_E1]
-  findAllE2: [gqltestdomain_E2]
-  findAllTestEntities: 
[org_apache_causeway_viewer_graphql_viewer_test_source_gqltestdomain_TestEntity]
-  findE2(name: String): gqltestdomain_E2
+type gql_test_domain_TopLevelMenu {
+  createDepartment(deptHead: _gql_input__gql_test_domain_DeptHead, name: 
String): gql_test_domain_Department
+  findAllDepartments: [gql_test_domain_Department]
+  findAllDeptHeads: [gql_test_domain_DeptHead]
+  findAllEntitiesWithName: 
[org_apache_causeway_viewer_graphql_viewer_test_domain_WithName]
+  findDeptHeadByName(name: String): gql_test_domain_DeptHead
 }
 
 type java_lang_Runnable {
@@ -623,12 +619,12 @@ type 
org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript__D
   logicalTypeName: String!
 }
 
-type 
org_apache_causeway_viewer_graphql_viewer_test_source_gqltestdomain_TestEntity {
-  _gql_meta: 
org_apache_causeway_viewer_graphql_viewer_test_source_gqltestdomain_TestEntity__DomainObject_meta
+type org_apache_causeway_viewer_graphql_viewer_test_domain_WithName {
+  _gql_meta: 
org_apache_causeway_viewer_graphql_viewer_test_domain_WithName__DomainObject_meta
   name: String!
 }
 
-type 
org_apache_causeway_viewer_graphql_viewer_test_source_gqltestdomain_TestEntity__DomainObject_meta
 {
+type 
org_apache_causeway_viewer_graphql_viewer_test_domain_WithName__DomainObject_meta
 {
   id: String!
   logicalTypeName: String!
 }
@@ -725,11 +721,11 @@ input _gql_input__causeway_testing_fixtures_FixtureResult 
{
   id: ID!
 }
 
-input _gql_input__gqltestdomain_E1 {
+input _gql_input__gql_test_domain_Department {
   id: ID!
 }
 
-input _gql_input__gqltestdomain_E2 {
+input _gql_input__gql_test_domain_DeptHead {
   id: ID!
 }
 
@@ -801,6 +797,6 @@ input 
_gql_input__org_apache_causeway_testing_fixtures_applib_fixturescripts_Fix
   id: ID!
 }
 
-input 
_gql_input__org_apache_causeway_viewer_graphql_viewer_test_source_gqltestdomain_TestEntity
 {
+input 
_gql_input__org_apache_causeway_viewer_graphql_viewer_test_domain_WithName {
   id: ID!
 }
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/schema/MyWinMergeDiffReporter.java
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/schema/MyWinMergeDiffReporter.java
new file mode 100644
index 0000000000..0816357034
--- /dev/null
+++ 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/schema/MyWinMergeDiffReporter.java
@@ -0,0 +1,28 @@
+package org.apache.causeway.viewer.graphql.viewer.test.schema;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.approvaltests.reporters.DiffInfo;
+import org.approvaltests.reporters.DiffPrograms;
+import org.approvaltests.reporters.GenericDiffReporter;
+
+import com.spun.util.ArrayUtils;
+
+public class MyWinMergeDiffReporter extends GenericDiffReporter {
+
+    private static DiffInfo WIN_MERGE_REPORTER =
+            new DiffInfo(DiffPrograms.Windows.WIN_MERGE_REPORTER.diffProgram,
+                    ArrayUtils.combine(
+                            List.of(".gql"),
+                            ArrayUtils.combine(
+                                    GenericDiffReporter.TEXT_FILE_EXTENSIONS,
+                                    GenericDiffReporter.IMAGE_FILE_EXTENSIONS)
+                            )
+                    );
+
+    public MyWinMergeDiffReporter() {
+        super(WIN_MERGE_REPORTER);
+    }
+
+}
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/.gitignore
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/.gitignore
deleted file mode 100644
index 1718626ba0..0000000000
--- 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-*.received.gql
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/CausewayViewerGraphqlTestModuleIntegTestAbstract.java
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/CausewayViewerGraphqlTestModuleIntegTestAbstract.java
deleted file mode 100644
index 60c29aa2fb..0000000000
--- 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/CausewayViewerGraphqlTestModuleIntegTestAbstract.java
+++ /dev/null
@@ -1,97 +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.source;
-
-import org.junit.jupiter.api.MethodOrderer;
-import org.junit.jupiter.api.TestInstance;
-import org.junit.jupiter.api.TestMethodOrder;
-
-import org.springframework.boot.SpringBootConfiguration;
-import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
-import 
org.springframework.boot.test.autoconfigure.graphql.tester.AutoConfigureHttpGraphQlTester;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.boot.test.web.server.LocalServerPort;
-import org.springframework.context.annotation.Import;
-import org.springframework.context.annotation.PropertySource;
-import org.springframework.context.annotation.PropertySources;
-import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
-import org.springframework.graphql.test.tester.HttpGraphQlTester;
-import org.springframework.test.context.ActiveProfiles;
-import org.springframework.test.web.reactive.server.WebTestClient;
-
-import org.apache.causeway.core.config.presets.CausewayPresets;
-import 
org.apache.causeway.core.runtimeservices.CausewayModuleCoreRuntimeServices;
-import 
org.apache.causeway.persistence.jpa.eclipselink.CausewayModulePersistenceJpaEclipselink;
-import org.apache.causeway.security.bypass.CausewayModuleSecurityBypass;
-import 
org.apache.causeway.testing.fixtures.applib.CausewayModuleTestingFixturesApplib;
-import 
org.apache.causeway.viewer.graphql.viewer.CausewayModuleIncViewerGraphqlViewer;
-import 
org.apache.causeway.viewer.graphql.viewer.test.source.gqltestdomain.TestDomainModule;
-
-@SpringBootTest(
-        classes = {
-                CausewayViewerGraphqlTestModuleIntegTestAbstract.TestApp.class
-        },
-        webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT
-)
-@AutoConfigureHttpGraphQlTester
-@TestInstance(TestInstance.Lifecycle.PER_CLASS)
-@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
-@ActiveProfiles("test")
-public class CausewayViewerGraphqlTestModuleIntegTestAbstract {
-
-    /**
-     * Compared to the production app manifest 
<code>domainapp.webapp.AppManifest</code>,
-     * here we in effect disable security checks, and we exclude any web/UI 
modules.
-     */
-    @SpringBootConfiguration
-    @EnableAutoConfiguration
-    @EnableJpaRepositories
-    @Import({
-
-            CausewayModuleCoreRuntimeServices.class,
-            CausewayModuleSecurityBypass.class,
-            CausewayModulePersistenceJpaEclipselink.class,
-            CausewayModuleTestingFixturesApplib.class,
-            CausewayModuleIncViewerGraphqlViewer.class,
-
-            TestDomainModule.class
-    })
-    @PropertySources({
-            @PropertySource(CausewayPresets.H2InMemory_withUniqueSchema),
-            @PropertySource(CausewayPresets.UseLog4j2Test),
-            @PropertySource(CausewayPresets.SilenceMetaModel),
-            @PropertySource(CausewayPresets.SilenceProgrammingModel),
-    })
-    public static class TestApp {
-
-    }
-
-    @LocalServerPort
-    protected int port;
-
-    protected HttpGraphQlTester graphQlTester() {
-        WebTestClient client =
-                WebTestClient.bindToServer()
-                        .baseUrl("http://0.0.0.0:"; + port + "/graphql")
-                        .build();
-        return HttpGraphQlTester.create(client);
-    }
-
-
-}
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/EndToEnd_IntegTest.findAllE1.approved.json
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/EndToEnd_IntegTest.findAllE1.approved.json
deleted file mode 100644
index cb50540424..0000000000
--- 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/EndToEnd_IntegTest.findAllE1.approved.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
-  "data" : {
-    "gqltestdomain_GQLTestDomainMenu" : {
-      "findAllE1" : [ {
-        "name" : "foo",
-        "_gql_meta" : {
-          "id" : "2",
-          "logicalTypeName" : "gqltestdomain.E1",
-          "version" : null
-        }
-      } ]
-    }
-  }
-}
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/EndToEnd_IntegTest.java
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/EndToEnd_IntegTest.java
deleted file mode 100644
index 26bef80b25..0000000000
--- 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/EndToEnd_IntegTest.java
+++ /dev/null
@@ -1,284 +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.source;
-
-import java.io.File;
-import java.io.IOException;
-import java.lang.reflect.Method;
-import java.net.URI;
-import java.net.http.HttpClient;
-import java.net.http.HttpRequest;
-import java.net.http.HttpResponse;
-import java.nio.charset.StandardCharsets;
-import java.nio.file.Path;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.inject.Inject;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-import 
org.apache.causeway.viewer.graphql.viewer.source.GraphQlServiceForCauseway;
-
-import org.approvaltests.Approvals;
-import org.approvaltests.core.Options;
-import org.approvaltests.core.Scrubber;
-import org.approvaltests.reporters.TextWebReporter;
-import org.approvaltests.reporters.UseReporter;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Disabled;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.TestInfo;
-import org.junit.jupiter.api.condition.DisabledIfSystemProperty;
-
-import org.springframework.test.context.ActiveProfiles;
-import org.springframework.transaction.annotation.Propagation;
-
-import org.apache.causeway.applib.services.xactn.TransactionService;
-import org.apache.causeway.commons.internal.resources._Resources;
-import org.apache.causeway.core.config.environment.CausewaySystemEnvironment;
-import org.apache.causeway.core.metamodel.specloader.SpecificationLoader;
-import 
org.apache.causeway.viewer.graphql.viewer.source.GraphQlSourceForCauseway;
-import org.apache.causeway.viewer.graphql.viewer.test.source.gqltestdomain.E1;
-import org.apache.causeway.viewer.graphql.viewer.test.source.gqltestdomain.E2;
-import 
org.apache.causeway.viewer.graphql.viewer.test.source.gqltestdomain.GQLTestDomainMenu;
-import 
org.apache.causeway.viewer.graphql.viewer.test.source.gqltestdomain.TestEntityRepository;
-
-import static 
org.apache.causeway.commons.internal.assertions._Assert.assertEquals;
-import static 
org.apache.causeway.commons.internal.assertions._Assert.assertNotNull;
-import static 
org.apache.causeway.commons.internal.assertions._Assert.assertTrue;
-
-import lombok.Data;
-import lombok.SneakyThrows;
-import lombok.val;
-
-
-//@Transactional NOT USING @Transactional since we are running server within 
same transaction otherwise
-@ActiveProfiles("test")
-public class EndToEnd_IntegTest extends 
CausewayViewerGraphqlTestModuleIntegTestAbstract {
-
-    @Inject TransactionService transactionService;
-    @Inject CausewaySystemEnvironment causewaySystemEnvironment;
-    @Inject SpecificationLoader specificationLoader;
-    @Inject GraphQlSourceForCauseway graphQlSourceForCauseway;
-    @Inject GraphQlServiceForCauseway graphQlServiceForCauseway;
-
-    @Inject TestEntityRepository testEntityRepository;
-    @Inject GQLTestDomainMenu gqlTestDomainMenu;
-
-    private TestInfo testInfo;
-    private ObjectMapper objectMapper = new ObjectMapper();
-
-    @BeforeEach
-    void beforeEach(final TestInfo testInfo) {
-        this.testInfo = testInfo;
-        assertNotNull(causewaySystemEnvironment);
-        assertNotNull(specificationLoader);
-        assertNotNull(graphQlSourceForCauseway);
-    }
-
-    @AfterEach
-    void afterEach(){
-        transactionService.runTransactional(Propagation.REQUIRED, () -> {
-            testEntityRepository.removeAll();
-        });
-    }
-
-    @Test
-    @Disabled("Creates schema.gql file for convenience")
-    void print_schema_works() throws Exception {
-
-        HttpClient client = HttpClient.newBuilder().build();
-        URI uri = URI.create("http://0.0.0.0:"; + port + "/graphql/schema");
-
-        HttpRequest request = HttpRequest.newBuilder().uri(uri).GET().build();
-        File targetFile1 = new File("src/test/resources/testfiles/schema.gql");
-        HttpResponse<Path> response = client.send(request, 
HttpResponse.BodyHandlers.ofFile(targetFile1.toPath()));
-
-    }
-
-    @Test
-    void introspectionQuery() throws Exception {
-
-        HttpClient client = HttpClient.newBuilder().build();
-
-        URI uri = URI.create(String.format("http://0.0.0.0:%d/graphql";, port));
-
-        String s = readResource("introspection-query-request.gql");
-//        HttpRequest request = 
HttpRequest.newBuilder().uri(uri).POST(HttpRequest.BodyPublishers.ofString(s)).build();
-//
-//        HttpResponse<String> response = client.send(request, 
HttpResponse.BodyHandlers.ofString());
-//        String body = response.body();
-
-        //graphQlTester().documentName()
-
-
-    }
-
-    //TODO started to fail on 2022-04-22, with missing
-    //"name" : 
"_gql_input__org_apache_causeway_applib_services_inject_ServiceInjector"
-    //disabled to rescue CI build
-    @Test @DisabledIfSystemProperty(named = "isRunningWithSurefire", matches = 
"true")
-    @UseReporter(TextWebReporter.class)
-    void simple_post_request() throws Exception {
-
-        Approvals.verify(submit(), gqlOptions());
-
-    }
-
-
-    @Test @DisabledIfSystemProperty(named = "isRunningWithSurefire", matches = 
"true")
-    @UseReporter(TextWebReporter.class)
-    void findAllE1() throws Exception {
-
-        // given
-        transactionService.runTransactional(Propagation.REQUIRED, () -> {
-            E1 foo = testEntityRepository.createE1("foo", null);
-            testEntityRepository.createE2("bar", null);
-            transactionService.flushTransaction();
-            List<E1> allE1 = testEntityRepository.findAllE1();
-            assertTrue(allE1.size()==1);
-            List<E2> allE2 = testEntityRepository.findAllE2();
-            assertTrue(allE2.size()==1);
-        });
-
-        // when, then
-        Approvals.verify(submit(), gqlOptions());
-
-    }
-
-    //TODO started to fail on 2022-09-04, with testEntityRepository findAllE1 
being empty
-    @Test @DisabledIfSystemProperty(named = "isRunningWithSurefire", matches = 
"true")
-    @UseReporter(TextWebReporter.class)
-    void createE1() throws Exception {
-
-        //File targetFile3 = new 
File("src/test/resources/testfiles/targetFile3.gql");
-
-        String response1 = 
transactionService.callTransactional(Propagation.REQUIRED, () -> {
-
-            String submit = submit();
-            // just to show we need to query in separate tranasction
-            List<E2> list = testEntityRepository.findAllE2();
-            assertTrue(list.isEmpty());
-            return submit;
-
-        }).ifFailureFail().getValue().get();
-
-        final List<E1> allE1 = new ArrayList<>();
-        transactionService.runTransactional(Propagation.REQUIRED, () -> {
-
-            List<E1> all = testEntityRepository.findAllE1();
-            allE1.addAll(all);
-
-        });
-
-        assertEquals(1, allE1.size());
-        assertEquals("newbee", allE1.get(0).getName());
-
-        Approvals.verify(response1, gqlOptions());
-
-    }
-
-    //TODO started to fail on 2023-07-25
-    //disabled to rescue CI build
-    @Test @DisabledIfSystemProperty(named = "isRunningWithSurefire", matches = 
"true")
-    @UseReporter(TextWebReporter.class)
-    void changeName() throws Exception {
-
-        List<E2> e2List = new ArrayList<>();
-
-        transactionService.runTransactional(Propagation.REQUIRED, () -> {
-
-            e2List.add(testEntityRepository.createE2("foo", null));
-
-        });
-
-        E2 e2 = e2List.get(0);
-        assertEquals("foo", e2.getName());
-        assertEquals(e2.getName(), gqlTestDomainMenu.findE2("foo").getName());
-
-        String response = 
transactionService.callTransactional(Propagation.REQUIRED, () -> {
-
-            return submit();
-
-        }).ifFailureFail().getValue().get();
-
-        e2List.clear();
-        transactionService.runTransactional(Propagation.REQUIRED, () -> {
-
-            List<E2> all = testEntityRepository.findAllE2();
-            e2List.addAll(all);
-
-        });
-
-        E2 e2Modified = e2List.get(0);
-
-        //TODO: implement ...
-//        assertEquals("bar", e2Modified.getName());
-//
-//        Approvals.verify(response, new Options());
-
-    }
-
-
-    private String submit() throws Exception{
-        val httpRequest = buildRequestWithResource();
-        return submitRequest(httpRequest);
-    }
-
-    @Data
-    static class GqlBody {
-        String query;
-    }
-
-    private HttpRequest buildRequestWithResource() throws IOException {
-        val testMethodName = 
testInfo.getTestMethod().map(Method::getName).get();
-        val resourceName = getClass().getSimpleName() + "." + testMethodName + 
".submit.gql";
-        val resourceContents = readResource(resourceName);
-        val gqlBody = new GqlBody();
-        gqlBody.setQuery(resourceContents);
-        String gqlBodyStr = objectMapper.writeValueAsString(gqlBody);
-        val bodyPublisher = HttpRequest.BodyPublishers.ofString(gqlBodyStr);
-        val uri = URI.create("http://0.0.0.0:"; + port + "/graphql");
-        return 
HttpRequest.newBuilder().uri(uri).POST(bodyPublisher).setHeader("Content-Type", 
"application/json").build();
-    }
-
-    private String submitRequest(final HttpRequest request) throws 
IOException, InterruptedException {
-        val responseBodyHandler = HttpResponse.BodyHandlers.ofString();
-        val httpClient = HttpClient.newBuilder().build();
-        val httpResponse = httpClient.send(request, responseBodyHandler);
-        return httpResponse.body();
-    }
-
-    private String readResource(final String resourceName) throws IOException {
-        return _Resources.loadAsString(getClass(), resourceName, 
StandardCharsets.UTF_8);
-    }
-
-    private Options gqlOptions() {
-        return new Options().withScrubber(new Scrubber() {
-            @SneakyThrows
-            @Override
-            public String scrub(final String s) {
-                return 
objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(objectMapper.readTree(s));
-            }
-        }).forFile().withExtension(".gql");
-    }
-
-}
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/gqltestdomain/TestEntityRepository.java
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/gqltestdomain/TestEntityRepository.java
deleted file mode 100644
index 86f3bcb3e8..0000000000
--- 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/source/gqltestdomain/TestEntityRepository.java
+++ /dev/null
@@ -1,77 +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.source.gqltestdomain;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.inject.Inject;
-
-import org.springframework.lang.Nullable;
-import org.springframework.stereotype.Repository;
-
-import org.apache.causeway.applib.services.repository.RepositoryService;
-
-@Repository
-public class TestEntityRepository {
-
-    @Inject
-    private RepositoryService repositoryService;
-
-    public E1 createE1(final String name, @Nullable final E2 e2) {
-        E1 e1 = new E1();
-        e1.setName(name);
-        e1.setE2(e2);
-        repositoryService.persistAndFlush(e1);
-        return e1;
-    }
-
-    public E2 createE2(final String name, @Nullable final E1 e1) {
-        E2 e2 = new E2();
-        e2.setName(name);
-        e2.setE1(e1);
-        repositoryService.persistAndFlush(e2);
-        return e2;
-    }
-
-    public List<E1> findAllE1() {
-        return repositoryService.allInstances(E1.class);
-    }
-
-    public List<E2> findAllE2() {
-        return repositoryService.allInstances(E2.class);
-    }
-
-    public List<TestEntity> findAllTestEntities() {
-        final List<TestEntity> result = new ArrayList<>();
-        result.addAll(findAllE1());
-        result.addAll(findAllE2());
-        return result;
-    }
-
-    public void removeAll(){
-        repositoryService.removeAll(E1.class);
-        repositoryService.removeAll(E2.class);
-    }
-
-    public E2 findE2ByName(final String name){
-        return 
findAllE2().stream().filter(e2->e2.getName().equals(name)).findFirst().orElse(null);
-    }
-
-}
diff --git 
a/incubator/viewers/graphql/viewer/src/test/resources/testfiles/schema.gql 
b/incubator/viewers/graphql/viewer/src/test/resources/testfiles/schema.gql
index 0c51d5ca83..f10e5556b8 100644
--- a/incubator/viewers/graphql/viewer/src/test/resources/testfiles/schema.gql
+++ b/incubator/viewers/graphql/viewer/src/test/resources/testfiles/schema.gql
@@ -1,645 +1,802 @@
+"Marks the field, argument, input field or enum value as deprecated"
+directive @deprecated(
+    "The reason for the deprecation"
+    reason: String = "No longer supported"
+) on FIELD_DEFINITION | ARGUMENT_DEFINITION | ENUM_VALUE | 
INPUT_FIELD_DEFINITION
+
 "Directs the executor to include this field or fragment only when the `if` 
argument is true"
 directive @include(
     "Included when true."
     if: Boolean!
-  ) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT
+) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT
 
-"Directs the executor to skip this field or fragment when the `if`'argument is 
true."
+"Directs the executor to skip this field or fragment when the `if` argument is 
true."
 directive @skip(
     "Skipped when true."
     if: Boolean!
-  ) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT
-
-"Marks the field, argument, input field or enum value as deprecated"
-directive @deprecated(
-    "The reason for the deprecation"
-    reason: String = "No longer supported"
-  ) on FIELD_DEFINITION | ARGUMENT_DEFINITION | ENUM_VALUE | 
INPUT_FIELD_DEFINITION
+) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT
 
 "Exposes a URL that specifies the behaviour of this scalar."
 directive @specifiedBy(
     "The URL that specifies the behaviour of this scalar."
     url: String!
-  ) on SCALAR
+) on SCALAR
 
 type Query {
-  gqltestdomain_GQLTestDomainMenu: gqltestdomain_GQLTestDomainMenu
-  causeway_applib_UserMenu: causeway_applib_UserMenu
-  causeway_conf_ConfigurationMenu: causeway_conf_ConfigurationMenu
-  causeway_security_LogoutMenu: causeway_security_LogoutMenu
-  numServices: Int
-}
-
-type gqltestdomain_E1 {
-  _gql_meta: gqltestdomain_E1__DomainObject_meta
-  e2: gqltestdomain_E2
-  logicalTypeName: String
-  name: String!
-  objectIdentifier: String
-}
-
-type gqltestdomain_E1__DomainObject_meta {
-  id: String!
-  logicalTypeName: String!
-  version: String
-}
-
-type gqltestdomain_E2 {
-  _gql_meta: gqltestdomain_E2__DomainObject_meta
-  _gql_mutations: gqltestdomain_E2__DomainObject_mutators
-  e1: gqltestdomain_E1
-  logicalTypeName: String
-  name: String!
-  objectIdentifier: String
-  otherE2List: [gqltestdomain_E2]
-  otherEntities: 
[org_apache_causeway_viewer_graphql_viewer_source_gqltestdomain_TestEntity]
-  stringList: [String]
-  zintList: [Int]
-}
-
-type gqltestdomain_E2__DomainObject_meta {
-  id: String!
-  logicalTypeName: String!
-  version: String
-}
-
-type gqltestdomain_E2__DomainObject_mutators {
-  changeE1(e1: _gql_input__gqltestdomain_E1!): gqltestdomain_E2
-  changeName(newName: String!): gqltestdomain_E2
-}
-
-type gqltestdomain_GQLTestDomainMenu {
-  createE1(e2: _gql_input__gqltestdomain_E2, name: String): gqltestdomain_E1
-  findAllE1: [gqltestdomain_E1]
-  findAllE2: [gqltestdomain_E2]
-  findAllTestEntities: 
[org_apache_causeway_viewer_graphql_viewer_source_gqltestdomain_TestEntity]
-}
-
-type causeway_applib_ActionNode {
-  _gql_meta: causeway_applib_ActionNode__DomainObject_meta
-  _gql_mutations: causeway_applib_ActionNode__DomainObject_mutators
-  action: String!
-  logicalTypeName: String
-  objectIdentifier: String
-}
-
-type causeway_applib_ActionNode__DomainObject_meta {
-  id: String!
-  logicalTypeName: String!
-}
-
-type causeway_applib_ActionNode__DomainObject_mutators {
-  createTitle: String
-  streamChildNodes: java_util_stream_Stream
-}
-
-type causeway_applib_CollectionNode {
-  _gql_meta: causeway_applib_CollectionNode__DomainObject_meta
-  _gql_mutations: causeway_applib_CollectionNode__DomainObject_mutators
-  collection: String!
-  logicalTypeName: String
-  objectIdentifier: String
-  parentNode: causeway_applib_TypeNode!
-}
-
-type causeway_applib_CollectionNode__DomainObject_meta {
-  id: String!
-  logicalTypeName: String!
-}
-
-type causeway_applib_CollectionNode__DomainObject_mutators {
-  createTitle: String
-  streamChildNodes: java_util_stream_Stream
+    causeway_applib_UserMenu: causeway_applib_UserMenu
+    causeway_conf_ConfigurationMenu: causeway_conf_ConfigurationMenu
+    causeway_security_LogoutMenu: causeway_security_LogoutMenu
+    gql_test_domain_TopLevelMenu: gql_test_domain_TopLevelMenu
+    numServices: Int
 }
 
 type causeway_applib_DomainObjectList {
-  _gql_meta: causeway_applib_DomainObjectList__DomainObject_meta
-  actionArguments: String
-  actionId: String
-  actionOwningFqcn: String
-  elementTypeFqcn: String!
-  logicalTypeName: String
-  objectIdentifier: String
+    _gql_meta: causeway_applib_DomainObjectList__DomainObject_meta
+    actionArguments: String
+    actionId: String
+    actionOwningFqcn: String
+    elementTypeFqcn: String!
+    title: String!
 }
 
 type causeway_applib_DomainObjectList__DomainObject_meta {
-  id: String!
-  logicalTypeName: String!
+    id: String!
+    logicalTypeName: String!
 }
 
-type causeway_applib_FacetAttrNode {
-  _gql_meta: causeway_applib_FacetAttrNode__DomainObject_meta
-  _gql_mutations: causeway_applib_FacetAttrNode__DomainObject_mutators
-  facetAttr: String!
-  logicalTypeName: String
-  objectIdentifier: String
-  parentNode: causeway_applib_FacetNode!
+type causeway_applib_FacetGroupNode {
+    _gql_meta: causeway_applib_FacetGroupNode__DomainObject_meta
+    facets: String!
 }
 
-type causeway_applib_FacetAttrNode__DomainObject_meta {
-  id: String!
-  logicalTypeName: String!
+type causeway_applib_FacetGroupNode__DomainObject_meta {
+    id: String!
+    logicalTypeName: String!
 }
 
-type causeway_applib_FacetAttrNode__DomainObject_mutators {
-  createTitle: String
-  streamChildNodes: java_util_stream_Stream
+type causeway_applib_ParameterNode {
+    _gql_meta: causeway_applib_ParameterNode__DomainObject_meta
+    parameter: String!
+    parentNode: causeway_applib_node_ActionNode!
 }
 
-type causeway_applib_FacetGroupNode {
-  _gql_meta: causeway_applib_FacetGroupNode__DomainObject_meta
-  _gql_mutations: causeway_applib_FacetGroupNode__DomainObject_mutators
-  facets: String!
-  logicalTypeName: String
-  objectIdentifier: String
+type causeway_applib_ParameterNode__DomainObject_meta {
+    id: String!
+    logicalTypeName: String!
 }
 
-type causeway_applib_FacetGroupNode__DomainObject_meta {
-  id: String!
-  logicalTypeName: String!
+type causeway_applib_PropertyNode {
+    _gql_meta: causeway_applib_PropertyNode__DomainObject_meta
+    _gql_mutations: causeway_applib_PropertyNode__DomainObject_mutators
+    mixedIn: String!
+    parentNode: causeway_applib_TypeNode!
+    property: String!
 }
 
-type causeway_applib_FacetGroupNode__DomainObject_mutators {
-  createTitle: String
-  streamChildNodes: java_util_stream_Stream
+type causeway_applib_PropertyNode__DomainObject_meta {
+    id: String!
+    logicalTypeName: String!
 }
 
-type causeway_applib_FacetNode {
-  _gql_meta: causeway_applib_FacetNode__DomainObject_meta
-  _gql_mutations: causeway_applib_FacetNode__DomainObject_mutators
-  facet: String!
-  logicalTypeName: String
-  objectIdentifier: String
+type causeway_applib_PropertyNode__DomainObject_mutators {
+    streamChildNodes: java_util_stream_Stream
 }
 
-type causeway_applib_FacetNode__DomainObject_meta {
-  id: String!
-  logicalTypeName: String!
+type causeway_applib_RoleMemento {
+    _gql_meta: causeway_applib_RoleMemento__DomainObject_meta
+    description: String!
+    name: String!
 }
 
-type causeway_applib_FacetNode__DomainObject_mutators {
-  createTitle: String
-  streamChildNodes: java_util_stream_Stream
+type causeway_applib_RoleMemento__DomainObject_meta {
+    id: String!
+    logicalTypeName: String!
 }
 
-type causeway_applib_ParameterNode {
-  _gql_meta: causeway_applib_ParameterNode__DomainObject_meta
-  _gql_mutations: causeway_applib_ParameterNode__DomainObject_mutators
-  logicalTypeName: String
-  objectIdentifier: String
-  parameter: String!
-  parentNode: causeway_applib_ActionNode!
+type causeway_applib_TypeNode {
+    _gql_meta: causeway_applib_TypeNode__DomainObject_meta
+    domainClassDto: causeway_schema_metamodel_v2_DomainClassDto!
 }
 
-type causeway_applib_ParameterNode__DomainObject_meta {
-  id: String!
-  logicalTypeName: String!
+type causeway_applib_TypeNode__DomainObject_meta {
+    id: String!
+    logicalTypeName: String!
 }
 
-type causeway_applib_ParameterNode__DomainObject_mutators {
-  createTitle: String
-  streamChildNodes: java_util_stream_Stream
+type causeway_applib_UserMemento {
+    _gql_meta: causeway_applib_UserMemento__DomainObject_meta
+    authenticationCode: String!
+    authenticationSource: String!
+    avatarUrl: String
+    impersonating: String!
+    languageLocale: String
+    multiTenancyToken: String
+    name: String!
+    numberFormatLocale: String
+    realName: String
+    roles: [causeway_applib_RoleMemento]
+    timeFormatLocale: String
 }
 
-type causeway_applib_PropertyNode {
-  _gql_meta: causeway_applib_PropertyNode__DomainObject_meta
-  _gql_mutations: causeway_applib_PropertyNode__DomainObject_mutators
-  logicalTypeName: String
-  objectIdentifier: String
-  parentNode: causeway_applib_TypeNode!
-  property: String!
+type causeway_applib_UserMemento__DomainObject_meta {
+    id: String!
+    logicalTypeName: String!
 }
 
-type causeway_applib_PropertyNode__DomainObject_meta {
-  id: String!
-  logicalTypeName: String!
+type causeway_applib_UserMenu {
+    me: causeway_applib_UserMemento
 }
 
-type causeway_applib_PropertyNode__DomainObject_mutators {
-  createTitle: String
-  streamChildNodes: java_util_stream_Stream
+type causeway_applib_node_ActionNode {
+    _gql_meta: causeway_applib_node_ActionNode__DomainObject_meta
+    _gql_mutations: causeway_applib_node_ActionNode__DomainObject_mutators
+    action: String!
+    mixedIn: String!
+    parentNode: causeway_applib_TypeNode!
 }
 
-type causeway_applib_RoleMemento {
-  _gql_meta: causeway_applib_RoleMemento__DomainObject_meta
-  description: String!
-  logicalTypeName: String
-  name: String!
-  objectIdentifier: String
+type causeway_applib_node_ActionNode__DomainObject_meta {
+    id: String!
+    logicalTypeName: String!
 }
 
-type causeway_applib_RoleMemento__DomainObject_meta {
-  id: String!
-  logicalTypeName: String!
+type causeway_applib_node_ActionNode__DomainObject_mutators {
+    streamChildNodes: java_util_stream_Stream
 }
 
-type causeway_applib_TypeNode {
-  _gql_meta: causeway_applib_TypeNode__DomainObject_meta
-  _gql_mutations: causeway_applib_TypeNode__DomainObject_mutators
-  domainClassDto: String!
-  logicalTypeName: String
-  objectIdentifier: String
+type causeway_applib_node_CollectionNode {
+    _gql_meta: causeway_applib_node_CollectionNode__DomainObject_meta
+    _gql_mutations: causeway_applib_node_CollectionNode__DomainObject_mutators
+    collection: String!
+    mixedIn: String!
+    parentNode: causeway_applib_TypeNode!
 }
 
-type causeway_applib_TypeNode__DomainObject_meta {
-  id: String!
-  logicalTypeName: String!
+type causeway_applib_node_CollectionNode__DomainObject_meta {
+    id: String!
+    logicalTypeName: String!
 }
 
-type causeway_applib_TypeNode__DomainObject_mutators {
-  createTitle: String
-  streamChildNodes: java_util_stream_Stream
+type causeway_applib_node_CollectionNode__DomainObject_mutators {
+    streamChildNodes: java_util_stream_Stream
 }
 
-type causeway_applib_UserMemento {
-  _gql_meta: causeway_applib_UserMemento__DomainObject_meta
-  _gql_mutations: causeway_applib_UserMemento__DomainObject_mutators
-  authenticationCode: String!
-  authenticationSource: String!
-  avatarUrl: String
-  impersonating: String!
-  languageLocale: String
-  logicalTypeName: String
-  multiTenancyToken: String
-  name: String!
-  numberFormatLocale: String
-  objectIdentifier: String
-  realName: String
-  roles: [causeway_applib_RoleMemento]
-  timeFormatLocale: String
+type causeway_applib_node_FacetAttrNode {
+    _gql_meta: causeway_applib_node_FacetAttrNode__DomainObject_meta
+    facetAttr: String!
+    parentNode: causeway_applib_node_FacetNode!
 }
 
-type causeway_applib_UserMemento__DomainObject_meta {
-  id: String!
-  logicalTypeName: String!
+type causeway_applib_node_FacetAttrNode__DomainObject_meta {
+    id: String!
+    logicalTypeName: String!
 }
 
-type causeway_applib_UserMemento__DomainObject_mutators {
-  isCurrentUser(userName: String): Boolean
+type causeway_applib_node_FacetNode {
+    _gql_meta: causeway_applib_node_FacetNode__DomainObject_meta
+    facet: String!
+    shadowed: String!
 }
 
-type causeway_applib_UserMenu {
-  me: causeway_applib_UserMemento
+type causeway_applib_node_FacetNode__DomainObject_meta {
+    id: String!
+    logicalTypeName: String!
 }
 
 type causeway_conf_ConfigurationMenu {
-  configuration: causeway_conf_ConfigurationViewmodel
+    configuration: causeway_conf_ConfigurationViewmodel
 }
 
 type causeway_conf_ConfigurationProperty {
-  _gql_meta: causeway_conf_ConfigurationProperty__DomainObject_meta
-  key: String!
-  logicalTypeName: String
-  objectIdentifier: String
-  value: String!
+    _gql_meta: causeway_conf_ConfigurationProperty__DomainObject_meta
+    key: String!
+    value: String!
 }
 
 type causeway_conf_ConfigurationProperty__DomainObject_meta {
-  id: String!
-  logicalTypeName: String!
+    id: String!
+    logicalTypeName: String!
 }
 
 type causeway_conf_ConfigurationViewmodel {
-  _gql_meta: causeway_conf_ConfigurationViewmodel__DomainObject_meta
-  configuration: [causeway_conf_ConfigurationProperty]
-  environment: [causeway_conf_ConfigurationProperty]
-  logicalTypeName: String
-  objectIdentifier: String
+    _gql_meta: causeway_conf_ConfigurationViewmodel__DomainObject_meta
+    environment: [causeway_conf_ConfigurationProperty]
+    primary: [causeway_conf_ConfigurationProperty]
+    secondary: [causeway_conf_ConfigurationProperty]
 }
 
 type causeway_conf_ConfigurationViewmodel__DomainObject_meta {
-  id: String!
-  logicalTypeName: String!
+    id: String!
+    logicalTypeName: String!
 }
 
 type causeway_feat_ApplicationFeatureViewModel {
-  _gql_meta: causeway_feat_ApplicationFeatureViewModel__DomainObject_meta
-  logicalTypeName: String
-  memberName: String!
-  namespaceName: String!
-  objectIdentifier: String
-  typeSimpleName: String!
+    _gql_meta: causeway_feat_ApplicationFeatureViewModel__DomainObject_meta
+    memberName: String!
+    namespaceName: String!
+    typeSimpleName: String!
 }
 
 type causeway_feat_ApplicationFeatureViewModel__DomainObject_meta {
-  id: String!
-  logicalTypeName: String!
+    id: String!
+    logicalTypeName: String!
 }
 
 type causeway_feat_ApplicationNamespace {
-  _gql_meta: causeway_feat_ApplicationNamespace__DomainObject_meta
-  logicalTypeName: String
-  memberName: String!
-  namespaceName: String!
-  objectIdentifier: String
-  typeSimpleName: String!
+    _gql_meta: causeway_feat_ApplicationNamespace__DomainObject_meta
+    memberName: String!
+    namespaceName: String!
+    typeSimpleName: String!
 }
 
 type causeway_feat_ApplicationNamespace__DomainObject_meta {
-  id: String!
-  logicalTypeName: String!
+    id: String!
+    logicalTypeName: String!
 }
 
 type causeway_feat_ApplicationType {
-  _gql_meta: causeway_feat_ApplicationType__DomainObject_meta
-  actions: [causeway_feat_ApplicationTypeAction]
-  collections: [causeway_feat_ApplicationTypeCollection]
-  logicalTypeName: String
-  memberName: String!
-  namespaceName: String!
-  objectIdentifier: String
-  properties: [causeway_feat_ApplicationTypeProperty]
-  typeSimpleName: String!
+    _gql_meta: causeway_feat_ApplicationType__DomainObject_meta
+    actions: [causeway_feat_ApplicationTypeAction]
+    collections: [causeway_feat_ApplicationTypeCollection]
+    memberName: String!
+    namespaceName: String!
+    properties: [causeway_feat_ApplicationTypeProperty]
+    typeSimpleName: String!
 }
 
 type causeway_feat_ApplicationTypeAction {
-  _gql_meta: causeway_feat_ApplicationTypeAction__DomainObject_meta
-  actionSemantics: String!
-  logicalTypeName: String
-  memberName: String!
-  namespaceName: String!
-  objectIdentifier: String
-  returnType: String!
-  typeSimpleName: String!
+    _gql_meta: causeway_feat_ApplicationTypeAction__DomainObject_meta
+    actionSemantics: String!
+    memberName: String!
+    namespaceName: String!
+    returnType: String!
+    typeSimpleName: String!
 }
 
 type causeway_feat_ApplicationTypeAction__DomainObject_meta {
-  id: String!
-  logicalTypeName: String!
+    id: String!
+    logicalTypeName: String!
 }
 
 type causeway_feat_ApplicationTypeCollection {
-  _gql_meta: causeway_feat_ApplicationTypeCollection__DomainObject_meta
-  derived: String!
-  elementType: String!
-  logicalTypeName: String
-  memberName: String!
-  namespaceName: String!
-  objectIdentifier: String
-  typeSimpleName: String!
+    _gql_meta: causeway_feat_ApplicationTypeCollection__DomainObject_meta
+    derived: String!
+    elementType: String!
+    memberName: String!
+    namespaceName: String!
+    typeSimpleName: String!
 }
 
 type causeway_feat_ApplicationTypeCollection__DomainObject_meta {
-  id: String!
-  logicalTypeName: String!
+    id: String!
+    logicalTypeName: String!
 }
 
 type causeway_feat_ApplicationTypeMember {
-  _gql_meta: causeway_feat_ApplicationTypeMember__DomainObject_meta
-  logicalTypeName: String
-  memberName: String!
-  namespaceName: String!
-  objectIdentifier: String
-  typeSimpleName: String!
+    _gql_meta: causeway_feat_ApplicationTypeMember__DomainObject_meta
+    memberName: String!
+    namespaceName: String!
+    typeSimpleName: String!
 }
 
 type causeway_feat_ApplicationTypeMember__DomainObject_meta {
-  id: String!
-  logicalTypeName: String!
+    id: String!
+    logicalTypeName: String!
 }
 
 type causeway_feat_ApplicationTypeProperty {
-  _gql_meta: causeway_feat_ApplicationTypeProperty__DomainObject_meta
-  derived: String!
-  logicalTypeName: String
-  maxLength: String
-  memberName: String!
-  namespaceName: String!
-  objectIdentifier: String
-  returnType: String!
-  typeSimpleName: String!
-  typicalLength: String
+    _gql_meta: causeway_feat_ApplicationTypeProperty__DomainObject_meta
+    derived: String!
+    maxLength: String
+    memberName: String!
+    namespaceName: String!
+    returnType: String!
+    typeSimpleName: String!
+    typicalLength: String
 }
 
 type causeway_feat_ApplicationTypeProperty__DomainObject_meta {
-  id: String!
-  logicalTypeName: String!
+    id: String!
+    logicalTypeName: String!
 }
 
 type causeway_feat_ApplicationType__DomainObject_meta {
-  id: String!
-  logicalTypeName: String!
+    id: String!
+    logicalTypeName: String!
+}
+
+type causeway_schema_metamodel_v2_DomainClassDto {
+    _gql_meta: causeway_schema_metamodel_v2_DomainClassDto__DomainObject_meta
+    actions: String!
+    annotations: String!
+    collections: String!
+    facets: String!
+    id: String!
+    majorVersion: String
+    minorVersion: String
+    properties: String!
+    service: String!
+}
+
+type causeway_schema_metamodel_v2_DomainClassDto__DomainObject_meta {
+    id: String!
+    logicalTypeName: String!
 }
 
 type causeway_security_LoginRedirect {
-  _gql_meta: causeway_security_LoginRedirect__DomainObject_meta
-  logicalTypeName: String
-  objectIdentifier: String
+    _gql_meta: causeway_security_LoginRedirect__DomainObject_meta
 }
 
 type causeway_security_LoginRedirect__DomainObject_meta {
-  id: String!
-  logicalTypeName: String!
+    id: String!
+    logicalTypeName: String!
 }
 
 type causeway_security_LogoutMenu {
-  logout: String
+    logout: String
 }
 
 type causeway_testing_fixtures_FixtureResult {
-  _gql_meta: causeway_testing_fixtures_FixtureResult__DomainObject_meta
-  className: String!
-  fixtureScriptClassName: String
-  key: String!
-  logicalTypeName: String
-  objectIdentifier: String
+    _gql_meta: causeway_testing_fixtures_FixtureResult__DomainObject_meta
+    className: String!
+    fixtureScriptClassName: String
+    key: String!
 }
 
 type causeway_testing_fixtures_FixtureResult__DomainObject_meta {
-  id: String!
-  logicalTypeName: String!
+    id: String!
+    logicalTypeName: String!
+}
+
+type gql_test_domain_Department {
+    _gql_meta: gql_test_domain_Department__DomainObject_meta
+    deptHead: gql_test_domain_DeptHead
+    name: String!
+}
+
+type gql_test_domain_Department__DomainObject_meta {
+    id: String!
+    logicalTypeName: String!
+    version: String
+}
+
+type gql_test_domain_DeptHead {
+    _gql_meta: gql_test_domain_DeptHead__DomainObject_meta
+    _gql_mutations: gql_test_domain_DeptHead__DomainObject_mutators
+    department: gql_test_domain_Department
+    name: String
+}
+
+type gql_test_domain_DeptHead__DomainObject_meta {
+    id: String!
+    logicalTypeName: String!
+    version: String
+}
+
+type gql_test_domain_DeptHead__DomainObject_mutators {
+    changeDeptHead(department: _gql_input__gql_test_domain_Department!): 
gql_test_domain_DeptHead
+    changeName(newName: String!): gql_test_domain_DeptHead
+}
+
+type gql_test_domain_TopLevelMenu {
+    createDepartment(deptHead: _gql_input__gql_test_domain_DeptHead, name: 
String): gql_test_domain_Department
+    findAllDepartments: [gql_test_domain_Department]
+    findAllDeptHeads: [gql_test_domain_DeptHead]
+    findAllEntitiesWithName: 
[org_apache_causeway_viewer_graphql_viewer_test_domain_WithName]
+    findDeptHeadByName(name: String): gql_test_domain_DeptHead
+}
+
+type java_lang_Runnable {
+    _gql_meta: java_lang_Runnable__DomainObject_meta
+}
+
+type java_lang_Runnable__DomainObject_meta {
+    id: String!
+    logicalTypeName: String!
+}
+
+type java_util_Map {
+    _gql_meta: java_util_Map__DomainObject_meta
+}
+
+type java_util_Map__DomainObject_meta {
+    id: String!
+    logicalTypeName: String!
 }
 
 type java_util_SortedMap {
-  _gql_meta: java_util_SortedMap__DomainObject_meta
-  logicalTypeName: String
-  objectIdentifier: String
+    _gql_meta: java_util_SortedMap__DomainObject_meta
 }
 
 type java_util_SortedMap__DomainObject_meta {
-  id: String!
-  logicalTypeName: String!
+    id: String!
+    logicalTypeName: String!
+}
+
+type java_util_concurrent_Callable {
+    _gql_meta: java_util_concurrent_Callable__DomainObject_meta
+}
+
+type java_util_concurrent_Callable__DomainObject_meta {
+    id: String!
+    logicalTypeName: String!
+}
+
+type java_util_function_BiFunction {
+    _gql_meta: java_util_function_BiFunction__DomainObject_meta
+}
+
+type java_util_function_BiFunction__DomainObject_meta {
+    id: String!
+    logicalTypeName: String!
+}
+
+type java_util_function_Consumer {
+    _gql_meta: java_util_function_Consumer__DomainObject_meta
+}
+
+type java_util_function_Consumer__DomainObject_meta {
+    id: String!
+    logicalTypeName: String!
+}
+
+type java_util_function_Function {
+    _gql_meta: java_util_function_Function__DomainObject_meta
+}
+
+type java_util_function_Function__DomainObject_meta {
+    id: String!
+    logicalTypeName: String!
 }
 
 type java_util_stream_Stream {
-  _gql_meta: java_util_stream_Stream__DomainObject_meta
-  logicalTypeName: String
-  objectIdentifier: String
+    _gql_meta: java_util_stream_Stream__DomainObject_meta
 }
 
 type java_util_stream_Stream__DomainObject_meta {
-  id: String!
-  logicalTypeName: String!
+    id: String!
+    logicalTypeName: String!
 }
 
-type org_apache_causeway_applib_services_inject_ServiceInjector {
-  _gql_meta: 
org_apache_causeway_applib_services_inject_ServiceInjector__DomainObject_meta
-  _gql_mutations: 
org_apache_causeway_applib_services_inject_ServiceInjector__DomainObject_mutators
-  logicalTypeName: String
-  objectIdentifier: String
+type org_apache_causeway_commons_functional_Either {
+    _gql_meta: org_apache_causeway_commons_functional_Either__DomainObject_meta
+    _gql_mutations: 
org_apache_causeway_commons_functional_Either__DomainObject_mutators
+    left: String!
+    right: String!
 }
 
-type 
org_apache_causeway_applib_services_inject_ServiceInjector__DomainObject_meta {
-  id: String!
-  logicalTypeName: String!
+type org_apache_causeway_commons_functional_Either__DomainObject_meta {
+    id: String!
+    logicalTypeName: String!
 }
 
-type 
org_apache_causeway_applib_services_inject_ServiceInjector__DomainObject_mutators
 {
-  injectServicesInto(domainObject: String): String
+type org_apache_causeway_commons_functional_Either__DomainObject_mutators {
+    accept(leftConsumer: _gql_input__java_util_function_Consumer!, 
rightConsumer: _gql_input__java_util_function_Consumer!): String
+    left: String
+    map(leftMapper: _gql_input__java_util_function_Function!, rightMapper: 
_gql_input__java_util_function_Function!): 
org_apache_causeway_commons_functional_Either
+    mapLeft(leftMapper: _gql_input__java_util_function_Function!): 
org_apache_causeway_commons_functional_Either
+    mapRight(rightMapper: _gql_input__java_util_function_Function!): 
org_apache_causeway_commons_functional_Either
+    right: String
 }
 
-type org_apache_causeway_core_metamodel_inspect_model_MMNode {
-  _gql_meta: 
org_apache_causeway_core_metamodel_inspect_model_MMNode__DomainObject_meta
-  logicalTypeName: String
-  objectIdentifier: String
+type org_apache_causeway_commons_functional_Railway {
+    _gql_meta: 
org_apache_causeway_commons_functional_Railway__DomainObject_meta
+    _gql_mutations: 
org_apache_causeway_commons_functional_Railway__DomainObject_mutators
+    failure: String!
+    success: String!
 }
 
-type 
org_apache_causeway_core_metamodel_inspect_model_MMNode__DomainObject_meta {
-  id: String!
-  logicalTypeName: String!
+type org_apache_causeway_commons_functional_Railway__DomainObject_meta {
+    id: String!
+    logicalTypeName: String!
 }
 
-type org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript {
-  _gql_meta: 
org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript__DomainObject_meta
-  friendlyName: String!
-  logicalTypeName: String
-  objectIdentifier: String
-  qualifiedName: String!
+type org_apache_causeway_commons_functional_Railway__DomainObject_mutators {
+    chain(chainingFunction: 
_gql_input__org_apache_causeway_commons_functional_ThrowingFunction!): 
org_apache_causeway_commons_functional_Railway
+    ifFailure(failureConsumer: 
_gql_input__org_apache_causeway_commons_functional_ThrowingConsumer!): 
org_apache_causeway_commons_functional_Railway
+    ifSuccess(successConsumer: 
_gql_input__org_apache_causeway_commons_functional_ThrowingConsumer!): 
org_apache_causeway_commons_functional_Railway
+    mapFailure(failureMapper: 
_gql_input__org_apache_causeway_commons_functional_ThrowingFunction!): 
org_apache_causeway_commons_functional_Railway
+    mapSuccess(successMapper: 
_gql_input__org_apache_causeway_commons_functional_ThrowingFunction!): 
org_apache_causeway_commons_functional_Railway
 }
 
-type 
org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript__DomainObject_meta
 {
-  id: String!
-  logicalTypeName: String!
+type org_apache_causeway_commons_functional_ThrowingConsumer {
+    _gql_meta: 
org_apache_causeway_commons_functional_ThrowingConsumer__DomainObject_meta
+    _gql_mutations: 
org_apache_causeway_commons_functional_ThrowingConsumer__DomainObject_mutators
 }
 
-type org_apache_causeway_viewer_graphql_viewer_source_gqltestdomain_TestEntity 
{
-  _gql_meta: 
org_apache_causeway_viewer_graphql_viewer_source_gqltestdomain_TestEntity__DomainObject_meta
-  logicalTypeName: String
-  name: String!
-  objectIdentifier: String
+type 
org_apache_causeway_commons_functional_ThrowingConsumer__DomainObject_meta {
+    id: String!
+    logicalTypeName: String!
 }
 
-type 
org_apache_causeway_viewer_graphql_viewer_source_gqltestdomain_TestEntity__DomainObject_meta
 {
-  id: String!
-  logicalTypeName: String!
+type 
org_apache_causeway_commons_functional_ThrowingConsumer__DomainObject_mutators {
+    andThen(arg0: _gql_input__java_util_function_Consumer!): 
java_util_function_Consumer
+    throwing(exceptionWrapper: _gql_input__java_util_function_BiFunction!): 
org_apache_causeway_commons_functional_ThrowingConsumer
 }
 
-input _gql_input__gqltestdomain_E1 {
-  id: ID!
+type org_apache_causeway_commons_functional_ThrowingFunction {
+    _gql_meta: 
org_apache_causeway_commons_functional_ThrowingFunction__DomainObject_meta
+    _gql_mutations: 
org_apache_causeway_commons_functional_ThrowingFunction__DomainObject_mutators
 }
 
-input _gql_input__gqltestdomain_E2 {
-  id: ID!
+type 
org_apache_causeway_commons_functional_ThrowingFunction__DomainObject_meta {
+    id: String!
+    logicalTypeName: String!
 }
 
-input _gql_input__causeway_applib_ActionNode {
-  id: ID!
+type 
org_apache_causeway_commons_functional_ThrowingFunction__DomainObject_mutators {
+    andThen(arg0: _gql_input__java_util_function_Function!): 
java_util_function_Function
+    compose(arg0: _gql_input__java_util_function_Function!): 
java_util_function_Function
+    throwing(exceptionWrapper: _gql_input__java_util_function_BiFunction!): 
org_apache_causeway_commons_functional_ThrowingFunction
 }
 
-input _gql_input__causeway_applib_CollectionNode {
-  id: ID!
+type org_apache_causeway_commons_functional_ThrowingRunnable {
+    _gql_meta: 
org_apache_causeway_commons_functional_ThrowingRunnable__DomainObject_meta
+    _gql_mutations: 
org_apache_causeway_commons_functional_ThrowingRunnable__DomainObject_mutators
 }
 
-input _gql_input__causeway_applib_DomainObjectList {
-  id: ID!
+type 
org_apache_causeway_commons_functional_ThrowingRunnable__DomainObject_meta {
+    id: String!
+    logicalTypeName: String!
 }
 
-input _gql_input__causeway_applib_FacetAttrNode {
-  id: ID!
+type 
org_apache_causeway_commons_functional_ThrowingRunnable__DomainObject_mutators {
+    callUncatched: String
+    run: String
+    runUncatched: String
+    toCallable: java_util_concurrent_Callable
+    toRunnable: java_lang_Runnable
 }
 
-input _gql_input__causeway_applib_FacetGroupNode {
-  id: ID!
+type org_apache_causeway_commons_functional_Try {
+    _gql_meta: org_apache_causeway_commons_functional_Try__DomainObject_meta
+    _gql_mutations: 
org_apache_causeway_commons_functional_Try__DomainObject_mutators
+    failure: String!
+    success: String!
+}
+
+type org_apache_causeway_commons_functional_Try__DomainObject_meta {
+    id: String!
+    logicalTypeName: String!
+}
+
+type org_apache_causeway_commons_functional_Try__DomainObject_mutators {
+    accept(failureConsumer: 
_gql_input__org_apache_causeway_commons_functional_ThrowingConsumer!, 
successConsumer: 
_gql_input__org_apache_causeway_commons_functional_ThrowingConsumer!): 
org_apache_causeway_commons_functional_Try
+    flatMapSuccess(successMapper: 
_gql_input__org_apache_causeway_commons_functional_ThrowingFunction!): 
org_apache_causeway_commons_functional_Try
+    flatMapSuccessAsNullable(successMapper: 
_gql_input__org_apache_causeway_commons_functional_ThrowingFunction!): 
org_apache_causeway_commons_functional_Try
+    flatMapSuccessWhenPresent(successMapper: 
_gql_input__org_apache_causeway_commons_functional_ThrowingFunction!): 
org_apache_causeway_commons_functional_Try
+    ifAbsentFail: org_apache_causeway_commons_functional_Try
+    ifFailure(exceptionConsumer: 
_gql_input__org_apache_causeway_commons_functional_ThrowingConsumer!): 
org_apache_causeway_commons_functional_Try
+    ifFailureFail: org_apache_causeway_commons_functional_Try
+    ifSuccess(valueConsumer: 
_gql_input__org_apache_causeway_commons_functional_ThrowingConsumer!): 
org_apache_causeway_commons_functional_Try
+    ifSuccessAsNullable(valueConsumer: 
_gql_input__org_apache_causeway_commons_functional_ThrowingConsumer!): 
org_apache_causeway_commons_functional_Try
+    mapEmptyToFailure: org_apache_causeway_commons_functional_Try
+    mapFailure(failureMapper: 
_gql_input__org_apache_causeway_commons_functional_ThrowingFunction!): 
org_apache_causeway_commons_functional_Try
+    mapFailureToSuccess(recoveryMapper: 
_gql_input__org_apache_causeway_commons_functional_ThrowingFunction!): 
org_apache_causeway_commons_functional_Try
+    mapSuccess(successMapper: 
_gql_input__org_apache_causeway_commons_functional_ThrowingFunction!): 
org_apache_causeway_commons_functional_Try
+    mapSuccessAsNullable(successMapper: 
_gql_input__org_apache_causeway_commons_functional_ThrowingFunction!): 
org_apache_causeway_commons_functional_Try
+    mapSuccessWhenPresent(successMapper: 
_gql_input__org_apache_causeway_commons_functional_ThrowingFunction!): 
org_apache_causeway_commons_functional_Try
+    mapToEither(failureMapper: 
_gql_input__org_apache_causeway_commons_functional_ThrowingFunction!, 
successMapper: 
_gql_input__org_apache_causeway_commons_functional_ThrowingFunction!): 
org_apache_causeway_commons_functional_Either
+    orCall(fallback: _gql_input__java_util_concurrent_Callable!): 
org_apache_causeway_commons_functional_Try
+    then(next: _gql_input__java_util_concurrent_Callable!): 
org_apache_causeway_commons_functional_Try
+    thenCall(callable: _gql_input__java_util_concurrent_Callable!): 
org_apache_causeway_commons_functional_Try
+    thenRun(runnable: 
_gql_input__org_apache_causeway_commons_functional_ThrowingRunnable!): 
org_apache_causeway_commons_functional_Try
+}
+
+type org_apache_causeway_core_metamodel_inspect_model_MMNode {
+    _gql_meta: 
org_apache_causeway_core_metamodel_inspect_model_MMNode__DomainObject_meta
+}
+
+type 
org_apache_causeway_core_metamodel_inspect_model_MMNode__DomainObject_meta {
+    id: String!
+    logicalTypeName: String!
+}
+
+type org_apache_causeway_core_metamodel_inspect_model_MemberNode {
+    _gql_meta: 
org_apache_causeway_core_metamodel_inspect_model_MemberNode__DomainObject_meta
+    _gql_mutations: 
org_apache_causeway_core_metamodel_inspect_model_MemberNode__DomainObject_mutators
+    mixedIn: String!
+    parentNode: causeway_applib_TypeNode!
+}
+
+type 
org_apache_causeway_core_metamodel_inspect_model_MemberNode__DomainObject_meta {
+    id: String!
+    logicalTypeName: String!
+}
+
+type 
org_apache_causeway_core_metamodel_inspect_model_MemberNode__DomainObject_mutators
 {
+    streamChildNodes: java_util_stream_Stream
+}
+
+type org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript {
+    _gql_meta: 
org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript__DomainObject_meta
+    friendlyName: String!
+    qualifiedName: String!
+}
+
+type 
org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript__DomainObject_meta
 {
+    id: String!
+    logicalTypeName: String!
+}
+
+type org_apache_causeway_viewer_graphql_viewer_test_domain_WithName {
+    _gql_meta: 
org_apache_causeway_viewer_graphql_viewer_test_domain_WithName__DomainObject_meta
+    name: String!
 }
 
-input _gql_input__causeway_applib_FacetNode {
-  id: ID!
+type 
org_apache_causeway_viewer_graphql_viewer_test_domain_WithName__DomainObject_meta
 {
+    id: String!
+    logicalTypeName: String!
+}
+
+input _gql_input__causeway_applib_DomainObjectList {
+    id: ID!
+}
+
+input _gql_input__causeway_applib_FacetGroupNode {
+    id: ID!
 }
 
 input _gql_input__causeway_applib_ParameterNode {
-  id: ID!
+    id: ID!
 }
 
 input _gql_input__causeway_applib_PropertyNode {
-  id: ID!
+    id: ID!
 }
 
 input _gql_input__causeway_applib_RoleMemento {
-  id: ID!
+    id: ID!
 }
 
 input _gql_input__causeway_applib_TypeNode {
-  id: ID!
+    id: ID!
 }
 
 input _gql_input__causeway_applib_UserMemento {
-  id: ID!
+    id: ID!
+}
+
+input _gql_input__causeway_applib_node_ActionNode {
+    id: ID!
+}
+
+input _gql_input__causeway_applib_node_CollectionNode {
+    id: ID!
+}
+
+input _gql_input__causeway_applib_node_FacetAttrNode {
+    id: ID!
+}
+
+input _gql_input__causeway_applib_node_FacetNode {
+    id: ID!
 }
 
 input _gql_input__causeway_conf_ConfigurationProperty {
-  id: ID!
+    id: ID!
 }
 
 input _gql_input__causeway_conf_ConfigurationViewmodel {
-  id: ID!
+    id: ID!
 }
 
 input _gql_input__causeway_feat_ApplicationFeatureViewModel {
-  id: ID!
+    id: ID!
 }
 
 input _gql_input__causeway_feat_ApplicationNamespace {
-  id: ID!
+    id: ID!
 }
 
 input _gql_input__causeway_feat_ApplicationType {
-  id: ID!
+    id: ID!
 }
 
 input _gql_input__causeway_feat_ApplicationTypeAction {
-  id: ID!
+    id: ID!
 }
 
 input _gql_input__causeway_feat_ApplicationTypeCollection {
-  id: ID!
+    id: ID!
 }
 
 input _gql_input__causeway_feat_ApplicationTypeMember {
-  id: ID!
+    id: ID!
 }
 
 input _gql_input__causeway_feat_ApplicationTypeProperty {
-  id: ID!
+    id: ID!
+}
+
+input _gql_input__causeway_schema_metamodel_v2_DomainClassDto {
+    id: ID!
 }
 
 input _gql_input__causeway_security_LoginRedirect {
-  id: ID!
+    id: ID!
 }
 
 input _gql_input__causeway_testing_fixtures_FixtureResult {
-  id: ID!
+    id: ID!
+}
+
+input _gql_input__gql_test_domain_Department {
+    id: ID!
+}
+
+input _gql_input__gql_test_domain_DeptHead {
+    id: ID!
+}
+
+input _gql_input__java_lang_Runnable {
+    id: ID!
+}
+
+input _gql_input__java_util_Map {
+    id: ID!
 }
 
 input _gql_input__java_util_SortedMap {
-  id: ID!
+    id: ID!
+}
+
+input _gql_input__java_util_concurrent_Callable {
+    id: ID!
+}
+
+input _gql_input__java_util_function_BiFunction {
+    id: ID!
+}
+
+input _gql_input__java_util_function_Consumer {
+    id: ID!
+}
+
+input _gql_input__java_util_function_Function {
+    id: ID!
 }
 
 input _gql_input__java_util_stream_Stream {
-  id: ID!
+    id: ID!
+}
+
+input _gql_input__org_apache_causeway_commons_functional_Either {
+    id: ID!
+}
+
+input _gql_input__org_apache_causeway_commons_functional_Railway {
+    id: ID!
 }
 
-input _gql_input__org_apache_causeway_applib_services_inject_ServiceInjector {
-  id: ID!
+input _gql_input__org_apache_causeway_commons_functional_ThrowingConsumer {
+    id: ID!
+}
+
+input _gql_input__org_apache_causeway_commons_functional_ThrowingFunction {
+    id: ID!
+}
+
+input _gql_input__org_apache_causeway_commons_functional_ThrowingRunnable {
+    id: ID!
+}
+
+input _gql_input__org_apache_causeway_commons_functional_Try {
+    id: ID!
 }
 
 input _gql_input__org_apache_causeway_core_metamodel_inspect_model_MMNode {
-  id: ID!
+    id: ID!
+}
+
+input _gql_input__org_apache_causeway_core_metamodel_inspect_model_MemberNode {
+    id: ID!
 }
 
 input 
_gql_input__org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript
 {
-  id: ID!
+    id: ID!
 }
 
-input 
_gql_input__org_apache_causeway_viewer_graphql_viewer_source_gqltestdomain_TestEntity
 {
-  id: ID!
+input 
_gql_input__org_apache_causeway_viewer_graphql_viewer_test_domain_WithName {
+    id: ID!
 }

Reply via email to