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 09b78e6487cd2c2324e358d6657a0dc423a491e9
Author: danhaywood <[email protected]>
AuthorDate: Sat Jan 27 07:03:14 2024 +0000

    CAUSEWAY-3676: verifies support for blobs
---
 .../viewer/test/domain/dept/StaffMember.java       |  25 +++++++++
 .../test/domain/dept/StaffMemberRepository.java    |   6 +++
 .../viewer/test/e2e/Abstract_IntegTest.java        |  36 +++++++++++--
 .../graphql/viewer/test/e2e/Staff_IntegTest.java   |   8 +++
 .../Staff_IntegTest.list_all_staff_members._.gql   |  17 ++++++
 ..._IntegTest.list_all_staff_members.approved.json |  59 +++++++++++++++++++++
 .../viewer/graphql/viewer/test/e2e/Bar.pdf         | Bin 0 -> 47488 bytes
 .../viewer/graphql/viewer/test/e2e/Fizz.pdf        | Bin 0 -> 46833 bytes
 .../viewer/graphql/viewer/test/e2e/Foo.pdf         | Bin 0 -> 47185 bytes
 .../graphql/test/src/test/resources/schema.gql     |   9 ++++
 10 files changed, 157 insertions(+), 3 deletions(-)

diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/dept/StaffMember.java
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/dept/StaffMember.java
index dc1f67a719..3a7aad7593 100644
--- 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/dept/StaffMember.java
+++ 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/dept/StaffMember.java
@@ -29,7 +29,11 @@ import javax.persistence.*;
 import org.apache.causeway.applib.annotation.DomainObject;
 import org.apache.causeway.applib.annotation.Editing;
 import org.apache.causeway.applib.annotation.Nature;
+import org.apache.causeway.applib.annotation.Optionality;
 import org.apache.causeway.applib.annotation.Property;
+import org.apache.causeway.applib.annotation.PropertyLayout;
+import org.apache.causeway.applib.value.Blob;
+import org.apache.causeway.persistence.jpa.applib.types.BlobJpaEmbeddable;
 
 @Entity
 @Table(
@@ -76,6 +80,27 @@ public class StaffMember implements Comparable<StaffMember> {
     private Grade grade;
 
 
+    @AttributeOverrides({
+            @AttributeOverride(name="name",    
column=@Column(name="photo_name")),
+            
@AttributeOverride(name="mimeType",column=@Column(name="photo_mimeType")),
+            @AttributeOverride(name="bytes",   
column=@Column(name="photo_bytes"))
+    })
+    @Embedded
+    private BlobJpaEmbeddable photo;
+
+    @Property(optionality = Optionality.OPTIONAL)
+    @PropertyLayout(fieldSetId = "content", sequence = "1")
+    public Blob getPhoto() {
+        return BlobJpaEmbeddable.toBlob(photo);
+    }
+    public void setPhoto(final Blob photo) {
+        this.photo = BlobJpaEmbeddable.fromBlob(photo);
+    }
+
+
+
+
+
     @Override
     public int compareTo(final StaffMember o) {
         return Comparator.comparing(StaffMember::getName).compare(this, o);
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/dept/StaffMemberRepository.java
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/dept/StaffMemberRepository.java
index 8f05545d49..f808d597c1 100644
--- 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/dept/StaffMemberRepository.java
+++ 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/domain/dept/StaffMemberRepository.java
@@ -23,6 +23,8 @@ import java.util.stream.Collectors;
 
 import javax.inject.Inject;
 
+import org.apache.causeway.applib.value.Blob;
+
 import org.springframework.stereotype.Repository;
 
 import org.apache.causeway.applib.services.repository.RepositoryService;
@@ -33,7 +35,11 @@ public class StaffMemberRepository {
     @Inject private RepositoryService repositoryService;
 
     public StaffMember create(final String name, final Department department) {
+        return create(name, department, null);
+    }
+    public StaffMember create(final String name, final Department department, 
final Blob photo) {
         StaffMember staffMember = new StaffMember(name, department, 
Grade.LECTURER);
+        staffMember.setPhoto(photo);
         department.new addStaffMember().act(staffMember);
         repositoryService.persistAndFlush(staffMember);
         return staffMember;
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Abstract_IntegTest.java
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Abstract_IntegTest.java
index f6cdae35a5..672ec23124 100644
--- 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Abstract_IntegTest.java
+++ 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Abstract_IntegTest.java
@@ -18,13 +18,22 @@
  */
 package org.apache.causeway.viewer.graphql.viewer.test.e2e;
 
+import lombok.SneakyThrows;
+import lombok.val;
+
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+
 import javax.inject.Inject;
 
+import org.apache.causeway.applib.value.Blob;
+
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 
 import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat;
 
+import org.springframework.core.io.ClassPathResource;
 import org.springframework.transaction.annotation.Propagation;
 
 import org.apache.causeway.applib.services.bookmark.BookmarkService;
@@ -62,14 +71,20 @@ public abstract class Abstract_IntegTest extends 
CausewayViewerGraphqlTestModule
             deptHeadRepository.create("Dr. George Harwood", civilEngineering);
 
             // staff
-            staffMemberRepository.create("Letitia Leadbetter", classics);
-            staffMemberRepository.create("Gerry Jones", classics);
-            staffMemberRepository.create("Mervin Hughes", physics);
+            staffMemberRepository.create("Letitia Leadbetter", classics, 
asBlob("Foo.pdf"));
+            staffMemberRepository.create("Gerry Jones", classics, 
asBlob("Bar.pdf"));
+            staffMemberRepository.create("Mervin Hughes", physics, 
asBlob("Fizz.pdf"));
             staffMemberRepository.create("John Gartner", physics);
             staffMemberRepository.create("Margaret Randall", physics);
 
         });
     }
+
+    private Blob asBlob(String fileName) {
+        val bytes = toBytes(fileName);
+        return new Blob(fileName, "application/pdf", bytes);
+    }
+
     @AfterEach
     void afterEach(){
         transactionService.runTransactional(Propagation.REQUIRED, () -> {
@@ -81,5 +96,20 @@ public abstract class Abstract_IntegTest extends 
CausewayViewerGraphqlTestModule
         });
     }
 
+    @SneakyThrows
+    private byte[] toBytes(String fileName){
+        InputStream inputStream = new ClassPathResource(fileName, 
getClass()).getInputStream();
+        ByteArrayOutputStream buffer = new ByteArrayOutputStream();
+
+        int nRead;
+        byte[] data = new byte[16384];
+
+        while ((nRead = inputStream.read(data, 0, data.length)) != -1) {
+            buffer.write(data, 0, nRead);
+        }
+
+        return buffer.toByteArray();
+    }
+
 
 }
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.java
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.java
index 661de30578..fd53eb0bf3 100644
--- 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.java
+++ 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.java
@@ -42,6 +42,14 @@ import lombok.val;
 @ActiveProfiles("test")
 public class Staff_IntegTest extends Abstract_IntegTest {
 
+    @Test
+    @UseReporter(DiffReporter.class)
+    void list_all_staff_members() throws Exception {
+
+        // when, then
+        Approvals.verify(submit(), jsonOptions());
+    }
+
     @Test
     @UseReporter(DiffReporter.class)
     void find_staff_member_by_name_and_edit_grade_choices() throws Exception {
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.list_all_staff_members._.gql
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.list_all_staff_members._.gql
new file mode 100644
index 0000000000..f4b574714d
--- /dev/null
+++ 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.list_all_staff_members._.gql
@@ -0,0 +1,17 @@
+{
+  university_dept_Staff {
+    findAllStaffMembers {
+      invoke {
+        name {
+          get
+        }
+        grade {
+          get
+        }
+        photo {
+          get
+        }
+      }
+    }
+  }
+}
diff --git 
a/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.list_all_staff_members.approved.json
 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.list_all_staff_members.approved.json
new file mode 100644
index 0000000000..7c8e2ea04a
--- /dev/null
+++ 
b/incubator/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.list_all_staff_members.approved.json
@@ -0,0 +1,59 @@
+{
+  "data" : {
+    "university_dept_Staff" : {
+      "findAllStaffMembers" : {
+        "invoke" : [ {
+          "name" : {
+            "get" : "Letitia Leadbetter"
+          },
+          "grade" : {
+            "get" : "LECTURER"
+          },
+          "photo" : {
+            "get" : "Foo.pdf [application/pdf]: 80261 bytes"
+          }
+        }, {
+          "name" : {
+            "get" : "Gerry Jones"
+          },
+          "grade" : {
+            "get" : "LECTURER"
+          },
+          "photo" : {
+            "get" : "Bar.pdf [application/pdf]: 80970 bytes"
+          }
+        }, {
+          "name" : {
+            "get" : "Mervin Hughes"
+          },
+          "grade" : {
+            "get" : "LECTURER"
+          },
+          "photo" : {
+            "get" : "Fizz.pdf [application/pdf]: 79681 bytes"
+          }
+        }, {
+          "name" : {
+            "get" : "John Gartner"
+          },
+          "grade" : {
+            "get" : "LECTURER"
+          },
+          "photo" : {
+            "get" : null
+          }
+        }, {
+          "name" : {
+            "get" : "Margaret Randall"
+          },
+          "grade" : {
+            "get" : "LECTURER"
+          },
+          "photo" : {
+            "get" : null
+          }
+        } ]
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git 
a/incubator/viewers/graphql/test/src/test/resources/org/apache/causeway/viewer/graphql/viewer/test/e2e/Bar.pdf
 
b/incubator/viewers/graphql/test/src/test/resources/org/apache/causeway/viewer/graphql/viewer/test/e2e/Bar.pdf
new file mode 100644
index 0000000000..a50b5c7ae8
Binary files /dev/null and 
b/incubator/viewers/graphql/test/src/test/resources/org/apache/causeway/viewer/graphql/viewer/test/e2e/Bar.pdf
 differ
diff --git 
a/incubator/viewers/graphql/test/src/test/resources/org/apache/causeway/viewer/graphql/viewer/test/e2e/Fizz.pdf
 
b/incubator/viewers/graphql/test/src/test/resources/org/apache/causeway/viewer/graphql/viewer/test/e2e/Fizz.pdf
new file mode 100644
index 0000000000..f95c8a74db
Binary files /dev/null and 
b/incubator/viewers/graphql/test/src/test/resources/org/apache/causeway/viewer/graphql/viewer/test/e2e/Fizz.pdf
 differ
diff --git 
a/incubator/viewers/graphql/test/src/test/resources/org/apache/causeway/viewer/graphql/viewer/test/e2e/Foo.pdf
 
b/incubator/viewers/graphql/test/src/test/resources/org/apache/causeway/viewer/graphql/viewer/test/e2e/Foo.pdf
new file mode 100644
index 0000000000..7451793fca
Binary files /dev/null and 
b/incubator/viewers/graphql/test/src/test/resources/org/apache/causeway/viewer/graphql/viewer/test/e2e/Foo.pdf
 differ
diff --git a/incubator/viewers/graphql/test/src/test/resources/schema.gql 
b/incubator/viewers/graphql/test/src/test/resources/schema.gql
index 3e597469ae..1bec5a6ca4 100644
--- a/incubator/viewers/graphql/test/src/test/resources/schema.gql
+++ b/incubator/viewers/graphql/test/src/test/resources/schema.gql
@@ -3014,6 +3014,7 @@ type university_dept_StaffMember {
   department: university_dept_StaffMember__department__gqlv_property
   grade: university_dept_StaffMember__grade__gqlv_property
   name: university_dept_StaffMember__name__gqlv_property
+  photo: university_dept_StaffMember__photo__gqlv_property
 }
 
 type university_dept_StaffMember__department__gqlv_property {
@@ -3048,6 +3049,14 @@ type university_dept_StaffMember__name__gqlv_property {
   validate(name: String): String
 }
 
+type university_dept_StaffMember__photo__gqlv_property {
+  disabled: String
+  get: String
+  hidden: Boolean
+  set(photo: String): university_dept_StaffMember
+  validate(photo: String): String
+}
+
 type 
university_dept_Staff__createStaffMember__department__gqlv_action_parameter {
   choices(name: String): [university_dept_Department]
   disabled(department: university_dept_Department__gqlv_input, name: String): 
String

Reply via email to