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"));
}
-
}