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 260b623a5607b77a7c56ae6fa6af932011dba9a9
Author: danhaywood <[email protected]>
AuthorDate: Sat Feb 17 12:36:17 2024 +0000

    CAUSEWAY-3676: reworks grid to return a URL
---
 .../viewer/graphql/model/domain/GqlvMeta.java      | 11 +++----
 ...d_staff_member_by_name_and_download_photo._.gql |  3 ++
 ...member_by_name_and_download_photo.approved.json |  3 ++
 .../e2e/queryandmutations/Staff_IntegTest.java     | 37 +++++++++++++++-------
 4 files changed, 36 insertions(+), 18 deletions(-)

diff --git 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMeta.java
 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMeta.java
index 832055e349..cdec355cc8 100644
--- 
a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMeta.java
+++ 
b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMeta.java
@@ -31,6 +31,7 @@ import 
org.apache.causeway.core.metamodel.facets.members.cssclass.CssClassFacet;
 import org.apache.causeway.core.metamodel.facets.object.entity.EntityFacet;
 import org.apache.causeway.core.metamodel.facets.object.grid.GridFacet;
 import org.apache.causeway.core.metamodel.facets.object.layout.LayoutFacet;
+import org.apache.causeway.core.metamodel.object.Bookmarkable;
 import org.apache.causeway.core.metamodel.object.ManagedObject;
 import org.apache.causeway.core.metamodel.objectmanager.ObjectManager;
 import org.apache.causeway.viewer.graphql.model.context.Context;
@@ -191,13 +192,9 @@ public class GqlvMeta extends GqlvAbstractCustom {
 
         public String grid() {
             return managedObject()
-                    .map(managedObject -> {
-                        val facet = 
managedObject.getSpecification().getFacet(GridFacet.class);
-                        return facet != null ? facet.getGrid(managedObject) : 
null;
-                    })
-                    .filter(obj -> Objects.nonNull(obj))
-                    .map(JaxbUtils::toStringUtf8)
-                    .map(x -> x.replaceAll("(\r\n)", "\n"))
+                    .flatMap(Bookmarkable::getBookmark
+                    ).map(x -> String.format(
+                    "///%s/object/%s:%s/grid", "graphql", 
x.getLogicalTypeName(), x.getIdentifier()))
                     .orElse(null);
         }
 
diff --git 
a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.find_staff_member_by_name_and_download_photo._.gql
 
b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.find_staff_member_by_name_and_download_photo._.gql
index 51ac1345c4..7bcd1390a7 100644
--- 
a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.find_staff_member_by_name_and_download_photo._.gql
+++ 
b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.find_staff_member_by_name_and_download_photo._.gql
@@ -5,6 +5,9 @@
         name {
           get
         }
+        _meta {
+          grid
+        }
         photo {
           get {
             bytes
diff --git 
a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.find_staff_member_by_name_and_download_photo.approved.json
 
b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.find_staff_member_by_name_and_download_photo.approved.json
index 376620cb6a..4f69d1a11a 100644
--- 
a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.find_staff_member_by_name_and_download_photo.approved.json
+++ 
b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.find_staff_member_by_name_and_download_photo.approved.json
@@ -6,6 +6,9 @@
           "name" : {
             "get" : "Gerry Jones"
           },
+          "_meta" : {
+            "grid" : "///graphql/object/university.dept.StaffMember:NNN/grid"
+          },
           "photo" : {
             "get" : {
               "bytes" : 
"///graphql/object/university.dept.StaffMember:NNN/photo/blobBytes"
diff --git 
a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.java
 
b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.java
index f5568939cc..a67b433248 100644
--- 
a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.java
+++ 
b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/queryandmutations/Staff_IntegTest.java
@@ -51,7 +51,6 @@ import lombok.val;
 //NOT USING @Transactional since we are running server within same transaction 
otherwise
 @Order(60)
 @ActiveProfiles("test")
-@DisabledIfEnvironmentVariable(named = "PROJECT_ROOT_PATH", matches = 
".*isis") // disable for isis build
 public class Staff_IntegTest extends Abstract_IntegTest {
 
     @Test
@@ -131,25 +130,41 @@ public class Staff_IntegTest extends Abstract_IntegTest {
         String response = submit();
         Approvals.verify(response, jsonOptions());
 
-        ObjectMapper mapper = new ObjectMapper();
-        JsonNode root = mapper.readTree(response);
+        val objectMapper = new ObjectMapper();
+        val jsonNodeRoot = objectMapper.readTree(response);
 
-        String url = root
-                
.at("/data/university_dept_Staff/findStaffMemberByName/invoke/photo/get/bytes")
+        val gridUrl = jsonNodeRoot
+                
.at("/data/university_dept_Staff/findStaffMemberByName/invoke/_meta/grid")
                 .asText();
 
-        
assertThat(url).matches("///graphql/object/university.dept.StaffMember:(\\d+)/photo/blobBytes");
+        
assertThat(gridUrl).matches("///graphql/object/university.dept.StaffMember:(\\d+)/grid");
+        val gridHttpResponse = submitReturningString(gridUrl);
+
+        assertThat(gridHttpResponse.statusCode()).isEqualTo(200);
+        val gridChars = gridHttpResponse.body();
+        assertThat(gridChars).isNotEmpty();
 
-        val httpResponse = submitReturningBytes(url);
 
-        assertThat(httpResponse.statusCode()).isEqualTo(200);
-        byte[] bytes = httpResponse.body();
-        assertThat(bytes).isNotEmpty();
+        val photoBytesUrl = jsonNodeRoot
+                
.at("/data/university_dept_Staff/findStaffMemberByName/invoke/photo/get/bytes")
+                .asText();
 
+        
assertThat(photoBytesUrl).matches("///graphql/object/university.dept.StaffMember:(\\d+)/photo/blobBytes");
+        val photoBytesResponse = submitReturningBytes(photoBytesUrl);
+        assertThat(photoBytesResponse.statusCode()).isEqualTo(200);
+        val photoBytes = photoBytesResponse.body();
+        assertThat(photoBytes).isNotEmpty();
     }
 
     private HttpResponse<byte[]> submitReturningBytes(String url) throws 
IOException, InterruptedException {
+        return submitReturningResponseHandledBy(url, 
HttpResponse.BodyHandlers.ofByteArray());
+    }
+
+    private HttpResponse<String> submitReturningString(String url) throws 
IOException, InterruptedException {
+        return submitReturningResponseHandledBy(url, 
HttpResponse.BodyHandlers.ofString());
+    }
 
+    private <T> HttpResponse<T> submitReturningResponseHandledBy(String url, 
HttpResponse.BodyHandler<T> responseBodyHandler) throws IOException, 
InterruptedException {
         val urlSuffix = url.substring(3); // strip off the '///' prefix
         val uri = URI.create(String.format("http://0.0.0.0:%d/%s";, port, 
urlSuffix));
 
@@ -159,7 +174,7 @@ public class Staff_IntegTest extends Abstract_IntegTest {
                 build();
 
         HttpClient httpClient = HttpClient.newHttpClient();
-        return httpClient.send(httpRequest, 
HttpResponse.BodyHandlers.ofByteArray());
+        return httpClient.send(httpRequest, responseBodyHandler);
     }
 
 }

Reply via email to