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
