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 2021/12/08 09:30:18 UTC
[isis] branch master updated: ISIS-2911: [Test] implement a property change scenario with WicketTester
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 3f33329 ISIS-2911: [Test] implement a property change scenario with WicketTester
3f33329 is described below
commit 3f33329d45c1b9bec4ba704a36500705c2306957
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Dec 8 10:30:08 2021 +0100
ISIS-2911: [Test] implement a property change scenario with WicketTester
---
.../viewers/common/wkt/InteractionTestWkt.java | 2 +-
.../viewers/jdo/wkt/InteractionTestJdoWkt.java | 75 ++++++++++++------
.../viewers/jpa/wkt/InteractionTestJpaWkt.java | 69 ++++++++++------
.../testdomain/conf/Configuration_usingWicket.java | 91 +++++++++++++++++++++-
4 files changed, 184 insertions(+), 53 deletions(-)
diff --git a/regressiontests/stable-viewers-common/src/test/java/org/apache/isis/testdomain/viewers/common/wkt/InteractionTestWkt.java b/regressiontests/stable-viewers-common/src/test/java/org/apache/isis/testdomain/viewers/common/wkt/InteractionTestWkt.java
index 3650bc8..0edd83f 100644
--- a/regressiontests/stable-viewers-common/src/test/java/org/apache/isis/testdomain/viewers/common/wkt/InteractionTestWkt.java
+++ b/regressiontests/stable-viewers-common/src/test/java/org/apache/isis/testdomain/viewers/common/wkt/InteractionTestWkt.java
@@ -84,7 +84,7 @@ class InteractionTestWkt extends InteractionTestAbstract {
@BeforeEach
void setUp() {
- wktTester = wicketTesterFactory.createTester();
+ wktTester = wicketTesterFactory.createTester(dto->null);
domainObject = newViewmodel(InteractionDemo.class);
pageParameters = PageParameterUtils.createPageParametersForObject(domainObject);
}
diff --git a/regressiontests/stable-viewers-jdo/src/test/java/org/apache/isis/testdomain/viewers/jdo/wkt/InteractionTestJdoWkt.java b/regressiontests/stable-viewers-jdo/src/test/java/org/apache/isis/testdomain/viewers/jdo/wkt/InteractionTestJdoWkt.java
index 3b1455d..3e9c7d2 100644
--- a/regressiontests/stable-viewers-jdo/src/test/java/org/apache/isis/testdomain/viewers/jdo/wkt/InteractionTestJdoWkt.java
+++ b/regressiontests/stable-viewers-jdo/src/test/java/org/apache/isis/testdomain/viewers/jdo/wkt/InteractionTestJdoWkt.java
@@ -20,13 +20,14 @@ package org.apache.isis.testdomain.viewers.jdo.wkt;
import javax.inject.Inject;
-import org.apache.wicket.markup.html.link.BookmarkablePageLink;
+import org.apache.wicket.ajax.AjaxEventBehavior;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.TestPropertySource;
+import org.apache.isis.commons.internal.debug.xray.XrayUi;
import org.apache.isis.core.config.presets.IsisPresets;
import org.apache.isis.testdomain.RegressionTestAbstract;
import org.apache.isis.testdomain.conf.Configuration_usingJdo;
@@ -36,10 +37,11 @@ import org.apache.isis.testdomain.conf.Configuration_usingWicket.WicketTesterFac
import org.apache.isis.testdomain.jdo.JdoTestFixtures;
import org.apache.isis.testdomain.jdo.entities.JdoBook;
import org.apache.isis.testdomain.util.dto.BookDto;
+import org.apache.isis.viewer.wicket.ui.panels.PromptFormAbstract;
-import static org.apache.isis.testdomain.conf.Configuration_usingWicket.EntityPageTester.FAVORITE_BOOK_ENTITY_LINK;
-import static org.apache.isis.testdomain.conf.Configuration_usingWicket.EntityPageTester.FAVORITE_BOOK_ENTITY_LINK_TITLE;
-import static org.apache.isis.testdomain.conf.Configuration_usingWicket.EntityPageTester.FAVORITE_BOOK_SCALAR_NAME;
+import static org.apache.isis.testdomain.conf.Configuration_usingWicket.EntityPageTester.INLINE_PROMPT_FORM_FIELD;
+import static org.apache.isis.testdomain.conf.Configuration_usingWicket.EntityPageTester.INVENTORY_NAME_PROPERTY_EDIT_INLINE_PROMPT_FORM;
+import static org.apache.isis.testdomain.conf.Configuration_usingWicket.EntityPageTester.INVENTORY_NAME_PROPERTY_EDIT_LINK;
import static org.apache.isis.testdomain.conf.Configuration_usingWicket.EntityPageTester.OPEN_SAMPLE_ACTION;
import static org.apache.isis.testdomain.conf.Configuration_usingWicket.EntityPageTester.OPEN_SAMPLE_ACTION_TITLE;
@@ -48,7 +50,9 @@ import lombok.val;
@SpringBootTest(
classes = {
Configuration_usingJdo.class,
- Configuration_usingWicket.class },
+ Configuration_usingWicket.class,
+ //XrayEnable.class
+ },
properties = {
})
@TestPropertySource({
@@ -65,7 +69,7 @@ class InteractionTestJdoWkt extends RegressionTestAbstract {
@BeforeEach
void setUp() throws InterruptedException {
- wktTester = wicketTesterFactory.createTester();
+ wktTester = wicketTesterFactory.createTester(JdoBook::fromDto);
run(()->{
testFixtures.setUp3Books();
@@ -75,6 +79,7 @@ class InteractionTestJdoWkt extends RegressionTestAbstract {
@AfterEach
void cleanUp() {
wktTester.destroy();
+ XrayUi.waitForShutdown();
}
@Test
@@ -95,7 +100,7 @@ class InteractionTestJdoWkt extends RegressionTestAbstract {
//wktTester.dumpComponentTree(comp->true);
- assertFavoriteBookIsPopulated();
+ wktTester.assertFavoriteBookIs(BookDto.sample());
});
@@ -110,38 +115,58 @@ class InteractionTestJdoWkt extends RegressionTestAbstract {
//System.err.printf("pageParameters %s%n", pageParameters);
+ // open homepage for TestHomePage
run(()->{
wktTester.startEntityPage(pageParameters);
wktTester.assertHeaderBrandText("Smoke Tests");
wktTester.assertPageTitle("Hello, __system");
-
wktTester.assertLabel(OPEN_SAMPLE_ACTION_TITLE, "Open Sample Page");
+ });
- // click action "Open Sample Page" and render resulting Viewmodel
- if(false){ //XXX broken
- wktTester.clickLink(OPEN_SAMPLE_ACTION);
- wktTester.assertHeaderBrandText("Smoke Tests");
- wktTester.assertPageTitle("JdoInventoryJaxbVm; Bookstore; 3 products");
-
- assertFavoriteBookIsPopulated();
- }
+ // click action "Open Sample Page" and render resulting JdoInventoryJaxbVm
+ run(()->{
+ wktTester.clickLink(OPEN_SAMPLE_ACTION);
+ wktTester.assertHeaderBrandText("Smoke Tests");
+ wktTester.assertPageTitle("JdoInventoryJaxbVm; Bookstore; 3 products");
+ wktTester.assertFavoriteBookIs(BookDto.sample());
+ wktTester.assertInventoryNameIs("Bookstore");
});
- }
+ // simulate click on editable property -> should bring up the corresponding inline edit dialog
+ run(()->{
+ wktTester.assertBehavior(INVENTORY_NAME_PROPERTY_EDIT_LINK, AjaxEventBehavior.class);
+ wktTester.executeAjaxEvent(INVENTORY_NAME_PROPERTY_EDIT_LINK, "click");
+ wktTester.assertComponent(INVENTORY_NAME_PROPERTY_EDIT_INLINE_PROMPT_FORM, PromptFormAbstract.class);
+
+ wktTester.assertHeaderBrandText("Smoke Tests");
+ wktTester.assertPageTitle("JdoInventoryJaxbVm; Bookstore; 3 products");
+ wktTester.assertFavoriteBookIs(BookDto.sample());
+ wktTester.assertInventoryNameIs("Bookstore");
+ });
- //TODO simulate change of a String property -> should yield a new Title and serialized URL link
- //TODO simulate interaction with choice provider, where entries are entities -> should be attached, eg. test whether we can generate a title for these
+ // simulate change of a String property and form submit
+ run(()->{
+ val form = wktTester.newFormTester(INVENTORY_NAME_PROPERTY_EDIT_INLINE_PROMPT_FORM);
+ form.setValue(INLINE_PROMPT_FORM_FIELD, "Bookstore2");
+ form.submit();
+ });
- // -- HELPER
+ // ... should yield a new Title containing 'Bookstore2'
+ run(()->{
+ wktTester.assertHeaderBrandText("Smoke Tests");
+ //FIXME
+ //wktTester.assertPageTitle("JdoInventoryJaxbVm; Bookstore2; 3 products");
+ wktTester.assertFavoriteBookIs(BookDto.sample());
+ //FIXME
+ //wktTester.assertInventoryNameIs("Bookstore2");
+ });
- private void assertFavoriteBookIsPopulated() {
- wktTester.assertLabel(FAVORITE_BOOK_SCALAR_NAME, "Favorite Book");
- wktTester.assertComponent(FAVORITE_BOOK_ENTITY_LINK, BookmarkablePageLink.class);
+ //TODO simulate interaction with choice provider, where entries are entities -> should be attached, eg. test whether we can generate a title for these
- val expectedLinkTitle = JdoBook.fromDto(BookDto.sample()).title();
- wktTester.assertLabel(FAVORITE_BOOK_ENTITY_LINK_TITLE, expectedLinkTitle);
}
+ // -- HELPER
+
}
\ No newline at end of file
diff --git a/regressiontests/stable-viewers-jpa/src/test/java/org/apache/isis/testdomain/viewers/jpa/wkt/InteractionTestJpaWkt.java b/regressiontests/stable-viewers-jpa/src/test/java/org/apache/isis/testdomain/viewers/jpa/wkt/InteractionTestJpaWkt.java
index ce20754..c0826ce 100644
--- a/regressiontests/stable-viewers-jpa/src/test/java/org/apache/isis/testdomain/viewers/jpa/wkt/InteractionTestJpaWkt.java
+++ b/regressiontests/stable-viewers-jpa/src/test/java/org/apache/isis/testdomain/viewers/jpa/wkt/InteractionTestJpaWkt.java
@@ -20,13 +20,14 @@ package org.apache.isis.testdomain.viewers.jpa.wkt;
import javax.inject.Inject;
-import org.apache.wicket.markup.html.link.BookmarkablePageLink;
+import org.apache.wicket.ajax.AjaxEventBehavior;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.TestPropertySource;
+import org.apache.isis.commons.internal.debug.xray.XrayUi;
import org.apache.isis.core.config.presets.IsisPresets;
import org.apache.isis.testdomain.RegressionTestAbstract;
import org.apache.isis.testdomain.conf.Configuration_usingJpa;
@@ -37,10 +38,11 @@ import org.apache.isis.testdomain.jpa.JpaTestFixtures;
import org.apache.isis.testdomain.jpa.entities.JpaBook;
import org.apache.isis.testdomain.util.dto.BookDto;
import org.apache.isis.testdomain.viewers.jdo.wkt.TestAppJpaWkt;
+import org.apache.isis.viewer.wicket.ui.panels.PromptFormAbstract;
-import static org.apache.isis.testdomain.conf.Configuration_usingWicket.EntityPageTester.FAVORITE_BOOK_ENTITY_LINK;
-import static org.apache.isis.testdomain.conf.Configuration_usingWicket.EntityPageTester.FAVORITE_BOOK_ENTITY_LINK_TITLE;
-import static org.apache.isis.testdomain.conf.Configuration_usingWicket.EntityPageTester.FAVORITE_BOOK_SCALAR_NAME;
+import static org.apache.isis.testdomain.conf.Configuration_usingWicket.EntityPageTester.INLINE_PROMPT_FORM_FIELD;
+import static org.apache.isis.testdomain.conf.Configuration_usingWicket.EntityPageTester.INVENTORY_NAME_PROPERTY_EDIT_INLINE_PROMPT_FORM;
+import static org.apache.isis.testdomain.conf.Configuration_usingWicket.EntityPageTester.INVENTORY_NAME_PROPERTY_EDIT_LINK;
import static org.apache.isis.testdomain.conf.Configuration_usingWicket.EntityPageTester.OPEN_SAMPLE_ACTION;
import static org.apache.isis.testdomain.conf.Configuration_usingWicket.EntityPageTester.OPEN_SAMPLE_ACTION_TITLE;
@@ -67,7 +69,7 @@ class InteractionTestJpaWkt extends RegressionTestAbstract {
@BeforeEach
void setUp() throws InterruptedException {
- wktTester = wicketTesterFactory.createTester();
+ wktTester = wicketTesterFactory.createTester(JpaBook::fromDto);
run(()->{
testFixtures.setUp3Books();
@@ -77,6 +79,7 @@ class InteractionTestJpaWkt extends RegressionTestAbstract {
@AfterEach
void cleanUp() {
wktTester.destroy();
+ XrayUi.waitForShutdown();
}
@Test
@@ -97,7 +100,7 @@ class InteractionTestJpaWkt extends RegressionTestAbstract {
//wktTester.dumpComponentTree(comp->true);
- assertFavoriteBookIsPopulated();
+ wktTester.assertFavoriteBookIs(BookDto.sample());
});
@@ -112,37 +115,57 @@ class InteractionTestJpaWkt extends RegressionTestAbstract {
//System.err.printf("pageParameters %s%n", pageParameters);
+ // open homepage for TestHomePage
run(()->{
wktTester.startEntityPage(pageParameters);
wktTester.assertHeaderBrandText("Smoke Tests");
wktTester.assertPageTitle("Hello, __system");
-
wktTester.assertLabel(OPEN_SAMPLE_ACTION_TITLE, "Open Sample Page");
+ });
- // click action "Open Sample Page" and render resulting Viewmodel
- if(false){ //XXX broken
- wktTester.clickLink(OPEN_SAMPLE_ACTION);
- wktTester.assertHeaderBrandText("Smoke Tests");
- wktTester.assertPageTitle("JpaInventoryJaxbVm; Bookstore; 3 products");
- assertFavoriteBookIsPopulated();
- }
+ // click action "Open Sample Page" and render resulting JpaInventoryJaxbVm
+ run(()->{
+ wktTester.clickLink(OPEN_SAMPLE_ACTION);
+ wktTester.assertHeaderBrandText("Smoke Tests");
+ wktTester.assertPageTitle("JpaInventoryJaxbVm; Bookstore; 3 products");
+ wktTester.assertFavoriteBookIs(BookDto.sample());
+ wktTester.assertInventoryNameIs("Bookstore");
});
- }
+ // simulate click on editable property -> should bring up the corresponding inline edit dialog
+ run(()->{
+ wktTester.assertBehavior(INVENTORY_NAME_PROPERTY_EDIT_LINK, AjaxEventBehavior.class);
+ wktTester.executeAjaxEvent(INVENTORY_NAME_PROPERTY_EDIT_LINK, "click");
+ wktTester.assertComponent(INVENTORY_NAME_PROPERTY_EDIT_INLINE_PROMPT_FORM, PromptFormAbstract.class);
- //TODO simulate change of a String property -> should yield a new Title and serialized URL link
- //TODO simulate interaction with choice provider, where entries are entities -> should be attached, eg. test whether we can generate a title for these
+ wktTester.assertHeaderBrandText("Smoke Tests");
+ wktTester.assertPageTitle("JpaInventoryJaxbVm; Bookstore; 3 products");
+ wktTester.assertFavoriteBookIs(BookDto.sample());
+ wktTester.assertInventoryNameIs("Bookstore");
+ });
- // -- HELPER
+ // simulate change of a String property and form submit
+ run(()->{
+ val form = wktTester.newFormTester(INVENTORY_NAME_PROPERTY_EDIT_INLINE_PROMPT_FORM);
+ form.setValue(INLINE_PROMPT_FORM_FIELD, "Bookstore2");
+ form.submit();
+ });
- private void assertFavoriteBookIsPopulated() {
- wktTester.assertLabel(FAVORITE_BOOK_SCALAR_NAME, "Favorite Book");
- wktTester.assertComponent(FAVORITE_BOOK_ENTITY_LINK, BookmarkablePageLink.class);
+ // ... should yield a new Title containing 'Bookstore2'
+ run(()->{
+ wktTester.assertHeaderBrandText("Smoke Tests");
+ //FIXME
+ //wktTester.assertPageTitle("JpaInventoryJaxbVm; Bookstore2; 3 products");
+ wktTester.assertFavoriteBookIs(BookDto.sample());
+ wktTester.assertInventoryNameIs("Bookstore2");
+ });
+
+ //TODO simulate interaction with choice provider, where entries are entities -> should be attached, eg. test whether we can generate a title for these
- val expectedLinkTitle = JpaBook.fromDto(BookDto.sample()).title();
- wktTester.assertLabel(FAVORITE_BOOK_ENTITY_LINK_TITLE, expectedLinkTitle);
}
+ // -- HELPER
+
}
\ No newline at end of file
diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_usingWicket.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_usingWicket.java
index 2a9c0a8..218686b 100644
--- a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_usingWicket.java
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_usingWicket.java
@@ -19,6 +19,7 @@
package org.apache.isis.testdomain.conf;
import java.util.ArrayList;
+import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
@@ -32,16 +33,20 @@ import org.apache.wicket.ThreadContext;
import org.apache.wicket.core.request.handler.IPageProvider;
import org.apache.wicket.markup.head.ResourceAggregator;
import org.apache.wicket.markup.head.filter.JavaScriptFilteredIntoFooterHeaderResponse;
+import org.apache.wicket.markup.html.link.BookmarkablePageLink;
import org.apache.wicket.protocol.http.WebApplication;
import org.apache.wicket.request.component.IRequestablePage;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.util.tester.WicketTester;
import org.apache.wicket.util.visit.IVisit;
import org.apache.wicket.util.visit.IVisitor;
+import org.junit.jupiter.api.function.ThrowingConsumer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
+import static org.junit.Assert.assertEquals;
+
import org.apache.isis.commons.collections.Can;
import org.apache.isis.commons.internal.base._Casts;
import org.apache.isis.commons.internal.exceptions._Exceptions;
@@ -50,6 +55,8 @@ import org.apache.isis.core.metamodel.objectmanager.ObjectManager;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.runtime.context.IsisAppCommonContext;
import org.apache.isis.core.runtime.context.IsisAppCommonContext.HasCommonContext;
+import org.apache.isis.testdomain.util.dto.BookDto;
+import org.apache.isis.testdomain.util.dto.IBook;
import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettings;
import org.apache.isis.viewer.wicket.model.isis.WicketViewerSettingsAccessor;
import org.apache.isis.viewer.wicket.model.models.PageType;
@@ -63,6 +70,7 @@ import org.apache.isis.viewer.wicket.viewer.IsisModuleViewerWicketViewer;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
+import lombok.SneakyThrows;
import lombok.val;
import de.agilecoders.wicket.core.Bootstrap;
@@ -110,16 +118,68 @@ public class Configuration_usingWicket {
public static final String FAVORITE_BOOK_ENTITY_LINK_TITLE = FAVORITE_BOOK_ENTITY_LINK
+ ":entityTitle";
+ //property:scalarTypeContainer:scalarIfRegular:scalarValueContainer]: [Fragment [Component id = scalarValueContainer]] ->
+ //property:scalarTypeContainer:scalarIfRegular:scalarValueContainer:scalarValue]: [TextField [Component id = scalarValue]] -> Bookstore
+ //property:scalarTypeContainer:scalarIfRegular:scalarName]: [Component id = scalarName] -> Name
+ //property:scalarTypeContainer:scalarIfRegular:scalarValueInlinePromptLink]: [WebMarkupContainer [Component id = scalarValueInlinePromptLink]] ->
+ //property:scalarTypeContainer:scalarIfRegular:scalarValueInlinePromptLink:scalarValueInlinePromptLabel]: [Fragment [Component id = scalarValueInlinePromptLabel]] ->
+ //property:scalarTypeContainer:scalarIfRegular:scalarValueInlinePromptLink:scalarValueInlinePromptLabel:scalarValue]: [Component id = scalarValue] -> Bookstore
+ //property:scalarNameAndValue:scalarTypeContainer:scalarIfRegular:scalarValueContainer:scalarValue
+
+ public static final String INVENTORY_NAME_PROPERTY = "theme:entityPageContainer:entity:rows:2"
+ + ":rowContents:1"
+ + ":col:fieldSets:1"
+ + ":memberGroup:properties:2"
+ + ":property";
+
+ public static final String INVENTORY_NAME_PROPERTY_EDIT_LINK = INVENTORY_NAME_PROPERTY
+ + ":scalarTypeContainer:scalarIfRegular:scalarValueInlinePromptLink";
+
+ public static final String INVENTORY_NAME_PROPERTY_EDIT_INLINE_FORM = INVENTORY_NAME_PROPERTY
+ + ":scalarTypeContainer:scalarIfRegularInlinePromptForm:inputForm";
+
+ public static final String INVENTORY_NAME_PROPERTY_EDIT_INLINE_FORM_TEXTFIELD = INVENTORY_NAME_PROPERTY
+ + ":property:scalarNameAndValue:scalarTypeContainer:scalarIfRegular:scalarValueContainer:scalarValue";
+
+ public static final String INVENTORY_NAME_PROPERTY_EDIT_INLINE_PROMPT_FORM = INVENTORY_NAME_PROPERTY
+ + ":scalarTypeContainer:scalarIfRegularInlinePromptForm:inputForm";
+
+ public static final String INLINE_PROMPT_FORM_FIELD = ""
+ + "property:scalarNameAndValue:scalarTypeContainer:scalarIfRegular:scalarValueContainer:scalarValue";
+
+
+ //inputForm:property:scalarNameAndValue]: [StringPanel [Component id = scalarNameAndValue]] -> StringPanel: ManagedObject.SimpleManagedObject(specification=ObjectSpecificationDefault@44e816ad[class=java.lang.String,type=VALUE,superclass=Object], pojo=Bookstore)
+ //inputForm:property:scalarNameAndValue:scalarTypeContainer]: [WebMarkupContainer [Component id = scalarTypeContainer]] -> WebMarkupContainer:
+ //inputForm:property:scalarNameAndValue:scalarTypeContainer:scalarIfCompact]: [Component id = scalarIfCompact] -> Label: Bookstore
+ //inputForm:property:scalarNameAndValue:scalarTypeContainer:scalarIfRegular]: [FormGroup [Component id = scalarIfRegular]] -> FormGroup:
+ //inputForm:property:scalarNameAndValue:scalarTypeContainer:scalarIfRegular:scalarValueContainer]: [Fragment [Component id = scalarValueContainer]] -> Fragment:
+ //inputForm:property:scalarNameAndValue:scalarTypeContainer:scalarIfRegular:scalarValueContainer:scalarValue]: [TextField [Component id = scalarValue]] -> TextField: Bookstore
+ //inputForm:property:scalarNameAndValue:scalarTypeContainer:scalarIfRegular:scalarName]: [Component id = scalarName] -> Label: Name
+ //inputForm:property:scalarNameAndValue:scalarTypeContainer:scalarIfRegular:scalarValueInlinePromptLink]: [WebMarkupContainer [Component id = scalarValueInlinePromptLink]] -> WebMarkupContainer:
+ //inputForm:property:scalarNameAndValue:scalarTypeContainer:scalarIfRegular:scalarValueInlinePromptLink:scalarValueInlinePromptLabel]: [Fragment [Component id = scalarValueInlinePromptLabel]] -> :
+ //inputForm:property:scalarNameAndValue:scalarTypeContainer:scalarIfRegular:scalarValueInlinePromptLink:scalarValueInlinePromptLabel:scalarValue]: [Component id = scalarValue] -> Label: Bookstore
+ //inputForm:property:scalarNameAndValue:scalarTypeContainer:scalarIfRegular:associatedActionLinksBelow]: [WebMarkupContainer [Component id = associatedActionLinksBelow]] -> WebMarkupContainer:
+ //inputForm:property:scalarNameAndValue:scalarTypeContainer:scalarIfRegular:associatedActionLinksRight]: [WebMarkupContainer [Component id = associatedActionLinksRight]] -> WebMarkupContainer:
+ //inputForm:property:scalarNameAndValue:scalarTypeContainer:scalarIfRegular:editProperty]: [WebMarkupContainer [Component id = editProperty]] -> WebMarkupContainer:
+ //inputForm:property:scalarNameAndValue:scalarTypeContainer:scalarIfRegular:feedback]: [NotificationPanel [Component id = feedback]] -> NotificationPanel:
+ //inputForm:property:scalarNameAndValue:scalarTypeContainer:scalarIfRegular:feedback:feedbackul]: [WebMarkupContainer [Component id = feedbackul]] -> :
+ //inputForm:property:scalarNameAndValue:scalarTypeContainer:scalarIfRegular:feedback:feedbackul:messages]: [MessageListView [Component id = messages]] -> MessageListView: []
+ //inputForm:property:scalarNameAndValue:scalarTypeContainer:scalarIfRegularInlinePromptForm]: [WebMarkupContainer [Component id = scalarIfRegularInlinePromptForm]] -> WebMarkupContainer:
+
// --
@Inject private ObjectManager objectManager;
private final IsisAppCommonContext commonContext;
+ private final Function<BookDto, IBook> bookFactory;
- public EntityPageTester(final IsisAppCommonContext commonContext) {
+ public EntityPageTester(
+ final IsisAppCommonContext commonContext,
+ final Function<BookDto, IBook> bookFactory) {
super(newWicketApplication(commonContext));
commonContext.injectServicesInto(this);
this.commonContext = commonContext;
+ this.bookFactory = bookFactory;
}
public PageParameters createPageParameters(final Object entityOrVm) {
@@ -135,6 +195,27 @@ public class Configuration_usingWicket {
assertLabel("header:applicationName:brandText", expectedLabel);
}
+ @SneakyThrows
+ public void assertPropertyValue(final String path, final ThrowingConsumer<ManagedObject> checker) {
+ Component component = getComponentFromLastRenderedPage(path);
+ ManagedObject adapter = (ManagedObject)component.getDefaultModelObject();
+ checker.accept(adapter);
+ }
+
+ public void assertFavoriteBookIs(final BookDto bookDto) {
+ assertLabel(FAVORITE_BOOK_SCALAR_NAME, "Favorite Book");
+ assertComponent(FAVORITE_BOOK_ENTITY_LINK, BookmarkablePageLink.class);
+
+ val expectedLinkTitle = bookFactory.apply(bookDto).title();
+ assertLabel(FAVORITE_BOOK_ENTITY_LINK_TITLE, expectedLinkTitle);
+ }
+
+ public void assertInventoryNameIs(final String expectedName) {
+ assertPropertyValue(INVENTORY_NAME_PROPERTY, adapter->{
+ assertEquals(expectedName, adapter.getPojo());
+ });
+ }
+
public void dumpComponentTree(final Predicate<Component> filter) {
getLastRenderedPage().visitChildren(new IVisitor<Component, Object>() {
@Override
@@ -155,7 +236,9 @@ public class Configuration_usingWicket {
.skip(1L)
.collect(Collectors.joining(":"));
- System.err.printf("comp[%s]: %s%n", path, component);
+ System.err.printf("comp[%s]: %s -> %s: %s%n",
+ path, component, component.getClass().getSimpleName(),
+ component.getDefaultModelObjectAsString());
}
}
});
@@ -179,8 +262,8 @@ public class Configuration_usingWicket {
private final IsisAppCommonContext commonContext;
- public EntityPageTester createTester() {
- return new EntityPageTester(commonContext);
+ public EntityPageTester createTester(final Function<BookDto, IBook> bookFactory) {
+ return new EntityPageTester(commonContext, bookFactory);
}
}