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/01/27 07:04:50 UTC
(causeway) 02/02: CAUSEWAY-3676: verifies support for blobs
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 <da...@haywood-associates.co.uk>
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