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! }
