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 <[email protected]>
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 {
 

Reply via email to