You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by da...@apache.org on 2024/02/12 22:28:13 UTC
(causeway) 07/11: CAUSEWAY-3676: scenario given and name now works
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 04c95da2a51ebc1f91c95e058d79f68590bc3de7
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Mon Feb 12 21:27:28 2024 +0000
CAUSEWAY-3676: scenario given and name now works
---
.../viewer/graphql/model/domain/GqlvScenario.java | 19 ++++----
.../graphql/model/domain/GqlvScenarioGiven.java | 9 +++-
.../graphql/model/domain/GqlvScenarioName.java | 13 +++---
.../viewer/graphql/model/domain/Scenario.java | 51 ----------------------
.../graphql/model/toplevel/GqlvTopLevelQuery.java | 9 ++--
.../Calculator_IntegTest.concat.approved.json | 14 ++++++
.../test/e2e/scenario/Calculator_IntegTest.java | 1 -
7 files changed, 41 insertions(+), 75 deletions(-)
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenario.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenario.java
index 1082112f15..e6191eb27a 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenario.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenario.java
@@ -20,6 +20,7 @@ package org.apache.causeway.viewer.graphql.model.domain;
import graphql.Scalars;
import graphql.schema.DataFetcher;
+import graphql.schema.DataFetchingEnvironment;
import graphql.schema.GraphQLArgument;
import graphql.schema.GraphQLFieldDefinition;
@@ -35,7 +36,7 @@ import org.apache.causeway.viewer.graphql.model.context.Context;
public class GqlvScenario
extends GqlvAbstractCustom {
- private final Scenario scenarioPojo;
+ public static final String KEY_SCENARIO_NAME = String.format("%s#%s", GqlvScenario.class.getName(), "name");
private final GqlvScenarioName scenarioName;
private final GqlvScenarioGiven scenarioGiven;
@@ -44,8 +45,6 @@ public class GqlvScenario
final Context context) {
super("Scenario", context);
- this.scenarioPojo = context.serviceRegistry.lookupService(Scenario.class).orElseThrow();
-
this.scenarioName = new GqlvScenarioName(context);
addChildField(scenarioName.getField());
this.scenarioGiven = new GqlvScenarioGiven(context);
@@ -68,16 +67,14 @@ public class GqlvScenario
public void addDataFetchers(Parent parent) {
context.codeRegistryBuilder.dataFetcher(
parent.coordinatesFor(getField()),
- (DataFetcher<Object>) environment -> scenarioPojo);
+ (DataFetcher<Object>) environment -> {
+ String scenarioName = environment.getArgument("name");
+ environment.getGraphQlContext().put(KEY_SCENARIO_NAME, scenarioName);
+ return environment;
+ });
scenarioName.addDataFetchers(this);
- scenarioGiven.addDataFetchers();
- }
-
-
- @Override
- public String toString() {
- return scenarioPojo.toString();
+ scenarioGiven.addDataFetchers(this);
}
}
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioGiven.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioGiven.java
index 099d547ea8..9a3bb732b7 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioGiven.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioGiven.java
@@ -1,5 +1,8 @@
package org.apache.causeway.viewer.graphql.model.domain;
+import graphql.schema.DataFetcher;
+import graphql.schema.DataFetchingEnvironment;
+
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@@ -54,7 +57,11 @@ public class GqlvScenarioGiven
}
- public void addDataFetchers() {
+ public void addDataFetchers(Parent parent) {
+ context.codeRegistryBuilder.dataFetcher(
+ parent.coordinatesFor(getField()),
+ (DataFetcher<Object>) environment -> environment);
+
domainServices.forEach(domainService -> {
boolean actionsAdded = domainService.hasActions();
if (actionsAdded) {
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioName.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioName.java
index b571f7fe44..83a4e8c895 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioName.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioName.java
@@ -1,10 +1,10 @@
package org.apache.causeway.viewer.graphql.model.domain;
-import graphql.GraphQLContext;
import graphql.Scalars;
-import graphql.schema.DataFetcher;
import graphql.schema.DataFetchingEnvironment;
+import lombok.val;
+
import static graphql.schema.GraphQLFieldDefinition.*;
import static graphql.schema.GraphQLObjectType.newObject;
@@ -27,13 +27,12 @@ public class GqlvScenarioName extends GqlvAbstract {
public void addDataFetchers(Parent parent) {
context.codeRegistryBuilder.dataFetcher(
parent.coordinatesFor(getField()),
- (DataFetcher<Object>) environment -> name(environment));
+ this::scenarioName);
}
- private String name(DataFetchingEnvironment environment) {
- // TODO: use graphQlContext instead.
- GraphQLContext graphQlContext = environment.getGraphQlContext();
- return context.serviceRegistry.lookupService(Scenario.class).map(Scenario::getName).orElseThrow();
+ private String scenarioName(DataFetchingEnvironment environment) {
+ val graphQlContext = environment.getGraphQlContext();
+ return graphQlContext.get(GqlvScenario.KEY_SCENARIO_NAME);
}
}
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/Scenario.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/Scenario.java
deleted file mode 100644
index 1a868f1432..0000000000
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/Scenario.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package org.apache.causeway.viewer.graphql.model.domain;
-
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import lombok.Setter;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.inject.Inject;
-
-import org.apache.causeway.applib.annotation.Programmatic;
-import org.apache.causeway.applib.services.bookmark.Bookmark;
-
-import org.apache.causeway.applib.services.bookmark.BookmarkService;
-
-import org.springframework.stereotype.Service;
-
-/**
- * Holds the state of an executing scenario.
- *
- * <p>
- * Note that although this is a singleton, it is <i>not</i> thread-safe.
- * </p>
- */
-@Service
-@RequiredArgsConstructor(onConstructor_ = {@Inject})
-public class Scenario {
-
- private final BookmarkService bookmarkService;
-
- @Getter @Setter private String name;
-
- private final Map<String, Bookmark> references = new HashMap<>();
-
- @Programmatic
- public void putReference(String reference, final Object pojo) {
- Bookmark bookmark = bookmarkService.bookmarkFor(pojo).orElseThrow();
- references.put(reference, bookmark);
- }
-
- @Programmatic
- public Object getReference(String reference) {
- return bookmarkService.lookup(references.get(reference)).orElseThrow();
- }
-
- @Programmatic
- public void clearReferences() {
- references.clear();
- }
-}
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/GqlvTopLevelQuery.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/GqlvTopLevelQuery.java
index 1d5f7e7015..eff065063f 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/GqlvTopLevelQuery.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/GqlvTopLevelQuery.java
@@ -9,6 +9,7 @@ import org.apache.causeway.viewer.graphql.model.context.Context;
import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstractCustom;
import org.apache.causeway.viewer.graphql.model.domain.GqlvDomainObject;
import org.apache.causeway.viewer.graphql.model.domain.GqlvDomainService;
+import org.apache.causeway.viewer.graphql.model.domain.GqlvScenario;
import org.apache.causeway.viewer.graphql.model.domain.Parent;
public class GqlvTopLevelQuery
@@ -18,7 +19,7 @@ public class GqlvTopLevelQuery
private final List<GqlvDomainService> domainServices = new ArrayList<>();
private final List<GqlvDomainObject> domainObjects = new ArrayList<>();
-// private final GqlvScenario scenario;
+ private final GqlvScenario scenario;
public GqlvTopLevelQuery(final Context context) {
super("Query", context);
@@ -55,8 +56,8 @@ public class GqlvTopLevelQuery
addChildField(domainObject.getLookupField());
}
-// scenario = new GqlvScenario(context);
-// addChildField(scenario.getField());
+ scenario = new GqlvScenario(context);
+ addChildField(scenario.getField());
buildObjectType();
}
@@ -78,6 +79,6 @@ public class GqlvTopLevelQuery
domainObjects.forEach(domainObject -> domainObject.addDataFetchers(this));
-// scenario.addDataFetchers(this);
+ scenario.addDataFetchers(this);
}
}
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/scenario/Calculator_IntegTest.concat.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/scenario/Calculator_IntegTest.concat.approved.json
new file mode 100644
index 0000000000..6aadf438a5
--- /dev/null
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/scenario/Calculator_IntegTest.concat.approved.json
@@ -0,0 +1,14 @@
+{
+ "data" : {
+ "Scenario" : {
+ "Name" : "Fizz buzz",
+ "Given" : {
+ "university_calc_Calculator" : {
+ "concat" : {
+ "invoke" : "FizzBuzz"
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/scenario/Calculator_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/scenario/Calculator_IntegTest.java
index a9f7f27763..561b2e61f2 100644
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/scenario/Calculator_IntegTest.java
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/scenario/Calculator_IntegTest.java
@@ -39,7 +39,6 @@ public class Calculator_IntegTest extends Abstract_IntegTest {
@Test
- @Disabled
@UseReporter(DiffReporter.class)
void concat() throws Exception {