You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2022/06/01 11:24:31 UTC

[isis] branch master updated: ISIS-3063: RO: adds listBooks test via an aliased domain object (VM)

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/master by this push:
     new 16262c98b6 ISIS-3063: RO: adds listBooks test via an aliased domain object (VM)
16262c98b6 is described below

commit 16262c98b606e97619c0dd9ee3af550077c59337
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Jun 1 13:24:23 2022 +0200

    ISIS-3063: RO: adds listBooks test via an aliased domain object (VM)
---
 .../client/RepresentationTypeSimplifiedV2.java     | 10 +++++-
 .../isis/testdomain/rest/RestServiceTest.java      | 36 ++++++++++++++-----
 .../testdomain/viewers/jdo/wkt/TestAppJdoWkt.java  |  4 +++
 .../isis/testdomain/jdo/JdoInventoryJaxbVm.java    |  5 ++-
 .../isis/testdomain/jdo/JdoInventoryResource.java  |  4 +--
 .../isis/testdomain/jdo/JdoTestFixtures.java       |  5 +++
 .../testdomain/util/rest/RestEndpointService.java  | 41 ++++++++++++++--------
 7 files changed, 78 insertions(+), 27 deletions(-)

diff --git a/api/applib/src/main/java/org/apache/isis/applib/client/RepresentationTypeSimplifiedV2.java b/api/applib/src/main/java/org/apache/isis/applib/client/RepresentationTypeSimplifiedV2.java
index 29861a4028..169a705539 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/client/RepresentationTypeSimplifiedV2.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/client/RepresentationTypeSimplifiedV2.java
@@ -47,6 +47,11 @@ public enum RepresentationTypeSimplifiedV2 {
      */
     OBJECT_COLLECTION("object-collection"),
 
+    /**
+     * The media type used as content-Type header when an object property is rendered.
+     */
+    OBJECT_PROPERTY("object-property"),
+
     /**
      * The media type used as content-Type header when a standalone collection is rendered.
      */
@@ -76,6 +81,7 @@ public enum RepresentationTypeSimplifiedV2 {
 
     public boolean isObject()               { return this == OBJECT; }
     public boolean isObjectCollection()     { return this == OBJECT_COLLECTION; }
+    public boolean isObjectProperty()       { return this == OBJECT_PROPERTY; }
     public boolean isList()                 { return this == LIST; }
     public boolean isValue()                { return this == VALUE; }
     public boolean isValues()               { return this == VALUES; }
@@ -117,10 +123,12 @@ public enum RepresentationTypeSimplifiedV2 {
     }
 
     private static Optional<String> extractReprType(final @NonNull Stream<String> stringStream) {
+
         return stringStream
-                //.peek(System.out::println)//debug
+                //.peek(System.err::println)//debug
         .map(String::trim)
         .filter(_Strings::isNotEmpty)
+        //.map(s->s.replace("profile=\"urn:org.restfulobjects:repr-types/", "repr-type=\""))
         .filter(s->s.startsWith("repr-type"))
         .map(s->_Strings.parseKeyValuePair(s, '=').orElse(null))
         .filter(Objects::nonNull)
diff --git a/regressiontests/stable-rest/src/test/java/org/apache/isis/testdomain/rest/RestServiceTest.java b/regressiontests/stable-rest/src/test/java/org/apache/isis/testdomain/rest/RestServiceTest.java
index 64d355ac91..29dcbf5137 100644
--- a/regressiontests/stable-rest/src/test/java/org/apache/isis/testdomain/rest/RestServiceTest.java
+++ b/regressiontests/stable-rest/src/test/java/org/apache/isis/testdomain/rest/RestServiceTest.java
@@ -55,6 +55,23 @@ class RestServiceTest {
     @LocalServerPort int port; // just for reference (not used)
     @Inject RestEndpointService restService;
 
+    @Test
+    void httpSessionInfo() {
+
+        val useRequestDebugLogging = false;
+        val restfulClient = restService.newClient(useRequestDebugLogging);
+
+        val digest = restService.getHttpSessionInfo(restfulClient)
+                .ifFailure(Assertions::fail);
+
+        val httpSessionInfo = digest.getValue().orElseThrow();
+
+        assertNotNull(httpSessionInfo);
+
+        // NB: this works only because we excluded wicket viewer from the app.
+        assertEquals("no http-session", httpSessionInfo);
+
+    }
 
     @Test
     void bookOfTheWeek_viaRestEndpoint() {
@@ -169,26 +186,29 @@ class RestServiceTest {
         assertNotNull(inventoryAsJaxbVm);
         assertEquals("Bookstore", inventoryAsJaxbVm.getName());
 
-        //TODO test whether we can call an action eg. listBooks() on the VM via REST
-
     }
 
     @Test
-    void httpSessionInfo() {
+    void listBooks_fromInventoryAsJaxbVm_viaRestEndpoint() {
+
+        assertTrue(restService.getPort()>0);
 
         val useRequestDebugLogging = false;
         val restfulClient = restService.newClient(useRequestDebugLogging);
 
-        val digest = restService.getHttpSessionInfo(restfulClient)
+        val digest = restService.getBooksFromInventoryAsJaxbVm(restfulClient)
                 .ifFailure(Assertions::fail);
 
-        val httpSessionInfo = digest.getValue().orElseThrow();
+        val books = digest.getValue().orElseThrow();
 
-        assertNotNull(httpSessionInfo);
+        val expectedBookTitles = JdoTestFixtures.expectedBookTitles();
 
-        // NB: this works only because we excluded wicket viewer from the app.
-        assertEquals("no http-session", httpSessionInfo);
+        val multipleBooks = books
+                .filter(book->expectedBookTitles.contains(book.getName()));
+
+        assertEquals(3, multipleBooks.size());
 
     }
 
+
 }
diff --git a/regressiontests/stable-viewers-jdo/src/main/java/org/apache/isis/testdomain/viewers/jdo/wkt/TestAppJdoWkt.java b/regressiontests/stable-viewers-jdo/src/main/java/org/apache/isis/testdomain/viewers/jdo/wkt/TestAppJdoWkt.java
index 48b2d37328..a71504d43b 100644
--- a/regressiontests/stable-viewers-jdo/src/main/java/org/apache/isis/testdomain/viewers/jdo/wkt/TestAppJdoWkt.java
+++ b/regressiontests/stable-viewers-jdo/src/main/java/org/apache/isis/testdomain/viewers/jdo/wkt/TestAppJdoWkt.java
@@ -41,6 +41,7 @@ import org.apache.isis.testdomain.conf.Configuration_usingWicket;
 import org.apache.isis.testdomain.jdo.JdoInventoryJaxbVm;
 import org.apache.isis.testdomain.jdo.JdoTestFixtures;
 import org.apache.isis.testdomain.model.valuetypes.composite.CalendarEventJaxbVm;
+import org.apache.isis.viewer.restfulobjects.jaxrsresteasy4.IsisModuleViewerRestfulObjectsJaxrsResteasy4;
 import org.apache.isis.viewer.wicket.viewer.IsisModuleViewerWicketViewer;
 
 /**
@@ -54,6 +55,9 @@ import org.apache.isis.viewer.wicket.viewer.IsisModuleViewerWicketViewer;
     // UI (Wicket Viewer)
     IsisModuleViewerWicketViewer.class,
 
+    IsisModuleViewerRestfulObjectsJaxrsResteasy4.class,
+
+
     XrayEnable.class // for debugging only
 })
 public class TestAppJdoWkt extends SpringBootServletInitializer {
diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/jdo/JdoInventoryJaxbVm.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/jdo/JdoInventoryJaxbVm.java
index 23db6d71e1..05f118ac0c 100644
--- a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/jdo/JdoInventoryJaxbVm.java
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/jdo/JdoInventoryJaxbVm.java
@@ -59,7 +59,10 @@ import lombok.Setter;
 @XmlAccessorType(XmlAccessType.FIELD)
 @Named("testdomain.jdo.JdoInventoryJaxbVm")
 @DomainObject(
-        nature=Nature.VIEW_MODEL)
+        nature=Nature.VIEW_MODEL,
+        aliased={
+            "testdomain.jdo.JdoInventoryJaxbVmAlias"
+        })
 public class JdoInventoryJaxbVm {
 
     @XmlTransient @Inject
diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/jdo/JdoInventoryResource.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/jdo/JdoInventoryResource.java
index 9f35974d91..fe8b3d35c5 100644
--- a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/jdo/JdoInventoryResource.java
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/jdo/JdoInventoryResource.java
@@ -90,7 +90,7 @@ public class JdoInventoryResource {
     public List<JdoBook> multipleBooks(
             @ParameterLayout(named = "")
             final int nrOfBooks) {
-        return listBooks();//createMultipleBooks("MultipleBooksTest", nrOfBooks, repository::persist);
+        return listBooks();
     }
 
     @Action //TODO improve the REST client such that the param can be of type Book
@@ -139,7 +139,7 @@ public class JdoInventoryResource {
     @Action
     public JdoInventoryJaxbVm inventoryAsJaxbVm() {
         val inventoryJaxbVm = factoryService.viewModel(new JdoInventoryJaxbVm());
-        val books = listBooks();//createMultipleBooks("InventoryAsJaxbVmTest", 3, repository::persist);
+        val books = listBooks();
         if(_NullSafe.size(books)>0) {
             inventoryJaxbVm.setName("Bookstore");
             inventoryJaxbVm.setBooks(books);
diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/jdo/JdoTestFixtures.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/jdo/JdoTestFixtures.java
index 0a77828b0f..efc2a81455 100644
--- a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/jdo/JdoTestFixtures.java
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/jdo/JdoTestFixtures.java
@@ -35,6 +35,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import org.apache.isis.applib.events.metamodel.MetamodelListener;
+import org.apache.isis.applib.services.bookmark.Bookmark;
 import org.apache.isis.applib.services.bookmark.BookmarkService;
 import org.apache.isis.applib.services.factory.FactoryService;
 import org.apache.isis.applib.services.iactnlayer.InteractionService;
@@ -118,6 +119,10 @@ public class JdoTestFixtures implements MetamodelListener {
                 "Sample Publisher"));
     }
 
+    public Bookmark getJdoInventoryJaxbVmAsBookmark() {
+        return bookmarkService.bookmarkForElseFail(setUpViewmodelWith3Books());
+    }
+
     public JdoInventoryJaxbVm setUpViewmodelWith3Books() {
         val inventoryJaxbVm = factoryService.viewModel(new JdoInventoryJaxbVm());
         val books = inventoryJaxbVm.listBooks();
diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/util/rest/RestEndpointService.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/util/rest/RestEndpointService.java
index ec86fa5858..6982836332 100644
--- a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/util/rest/RestEndpointService.java
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/util/rest/RestEndpointService.java
@@ -29,11 +29,13 @@ import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Service;
 
 import org.apache.isis.applib.client.SuppressionType;
+import org.apache.isis.applib.services.iactnlayer.InteractionService;
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.commons.functional.Try;
 import org.apache.isis.core.config.RestEasyConfiguration;
 import org.apache.isis.core.config.viewer.web.WebAppContextPath;
 import org.apache.isis.testdomain.jdo.JdoInventoryJaxbVm;
+import org.apache.isis.testdomain.jdo.JdoTestFixtures;
 import org.apache.isis.testdomain.jdo.entities.JdoBook;
 import org.apache.isis.testdomain.ldap.LdapConstants;
 import org.apache.isis.testdomain.util.dto.BookDto;
@@ -42,26 +44,20 @@ import org.apache.isis.viewer.restfulobjects.client.RestfulClientConfig;
 import org.apache.isis.viewer.restfulobjects.client.log.ClientConversationFilter;
 
 import lombok.NonNull;
+import lombok.RequiredArgsConstructor;
 import lombok.val;
 import lombok.extern.log4j.Log4j2;
 
 @Service
 @Log4j2
+@RequiredArgsConstructor(onConstructor_ = {@Inject})
 public class RestEndpointService {
 
     private final Environment environment;
     private final RestEasyConfiguration restEasyConfiguration;
     private final WebAppContextPath webAppContextPath;
-
-    @Inject
-    public RestEndpointService(
-            final Environment environment,
-            final RestEasyConfiguration restEasyConfiguration,
-            final WebAppContextPath webAppContextPath) {
-        this.environment = environment;
-        this.restEasyConfiguration = restEasyConfiguration;
-        this.webAppContextPath = webAppContextPath;
-    }
+    private final JdoTestFixtures jdoTestFixtures;
+    private final InteractionService interactionService;
 
     public int getPort() {
         if(port==null) {
@@ -113,8 +109,8 @@ public class RestEndpointService {
 
     // -- NEW REQUEST BUILDER
 
-    public Invocation.Builder newInvocationBuilder(final RestfulClient client, final String actionPath) {
-        return client.request(actionPath, SuppressionType.ALL);
+    public Invocation.Builder newInvocationBuilder(final RestfulClient client, final String endpointPath) {
+        return client.request(endpointPath, SuppressionType.ALL);
     }
 
     // -- ENDPOINTS
@@ -210,10 +206,27 @@ public class RestEndpointService {
 
         val response = request.post(args);
         val digest = client.digest(response, JdoInventoryJaxbVm.class);
-
         return digest;
     }
 
+    public Try<Can<JdoBook>> getBooksFromInventoryAsJaxbVm(final RestfulClient client) {
+
+        val objectId = interactionService.callAnonymous(
+                ()->jdoTestFixtures.getJdoInventoryJaxbVmAsBookmark().getIdentifier());
+
+        // using domain object alias ...
+        val request = newInvocationBuilder(client,
+                "objects/testdomain.jdo.JdoInventoryJaxbVmAlias/"
+                        + objectId + "/actions/listBooks/invoke");
+
+        val args = client.arguments()
+                .build();
+
+        val response = request.post(args);
+        val digest = client.digestList(response, JdoBook.class, new GenericType<List<JdoBook>>() {});
+
+        return digest;
+    }
 
     public Try<String> getHttpSessionInfo(final RestfulClient client) {
 
@@ -228,7 +241,6 @@ public class RestEndpointService {
         return digest;
     }
 
-
     // -- HELPER
 
     private Integer port;
@@ -238,5 +250,4 @@ public class RestEndpointService {
         port = Integer.parseInt(environment.getProperty("local.server.port"));
     }
 
-
 }