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/08/24 10:15:12 UTC
[isis] branch master updated: ISIS-2774: stubs for testing
non-public domain-object members and support methods
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 62f89c0 ISIS-2774: stubs for testing non-public domain-object members and support methods
62f89c0 is described below
commit 62f89c08f4414e98e69a41a76074e283c42a173d
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Aug 24 12:15:00 2021 +0200
ISIS-2774: stubs for testing non-public domain-object members and
support methods
---
.../DomainModelTest_usingGoodDomain.java | 72 ++++++++++++++++++++--
.../isis/testdomain/model/good/Encapsulated.java | 47 ++++++++++++++
2 files changed, 113 insertions(+), 6 deletions(-)
diff --git a/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingGoodDomain.java b/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingGoodDomain.java
index ca1a842..ae674c9 100644
--- a/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingGoodDomain.java
+++ b/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingGoodDomain.java
@@ -18,6 +18,7 @@
*/
package org.apache.isis.testdomain.domainmodel;
+import java.util.List;
import java.util.stream.Stream;
import javax.inject.Inject;
@@ -29,6 +30,14 @@ import org.junit.jupiter.params.provider.MethodSource;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.TestPropertySource;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.applib.services.iactnlayer.InteractionService;
import org.apache.isis.applib.services.jaxb.JaxbService;
import org.apache.isis.applib.services.metamodel.BeanSort;
import org.apache.isis.applib.services.metamodel.Config;
@@ -43,6 +52,8 @@ import org.apache.isis.core.metamodel.facets.object.icon.IconFacet;
import org.apache.isis.core.metamodel.facets.object.title.TitleFacet;
import org.apache.isis.core.metamodel.facets.param.choices.ActionParameterChoicesFacet;
import org.apache.isis.core.metamodel.facets.param.defaults.ActionParameterDefaultsFacet;
+import org.apache.isis.core.metamodel.interactions.managed.ActionInteraction;
+import org.apache.isis.core.metamodel.interactions.managed.PropertyInteraction;
import org.apache.isis.core.metamodel.postprocessors.collparam.ActionParameterChoicesFacetFromParentedCollection;
import org.apache.isis.core.metamodel.postprocessors.collparam.ActionParameterDefaultsFacetFromAssociatedCollection;
import org.apache.isis.core.metamodel.spec.ManagedObject;
@@ -56,6 +67,7 @@ import org.apache.isis.testdomain.model.good.Configuration_usingValidDomain;
import org.apache.isis.testdomain.model.good.ElementTypeAbstract;
import org.apache.isis.testdomain.model.good.ElementTypeConcrete;
import org.apache.isis.testdomain.model.good.ElementTypeInterface;
+import org.apache.isis.testdomain.model.good.Encapsulated;
import org.apache.isis.testdomain.model.good.ProperChoicesWhenChoicesFrom;
import org.apache.isis.testdomain.model.good.ProperElementTypeVm;
import org.apache.isis.testdomain.model.good.ProperInterface2;
@@ -66,12 +78,6 @@ import org.apache.isis.testdomain.model.good.ProperMemberSupport;
import org.apache.isis.testdomain.model.good.ProperServiceWithMixin;
import org.apache.isis.testing.integtestsupport.applib.validate.DomainModelValidator;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertThrows;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
import lombok.val;
@SpringBootTest(
@@ -100,6 +106,7 @@ class DomainModelTest_usingGoodDomain {
// @Inject private FactoryService factoryService;
@Inject private SpecificationLoader specificationLoader;
@Inject private TitleService titleService;
+ @Inject private InteractionService interactionService;
void debug() {
val config = new Config()
@@ -424,6 +431,59 @@ class DomainModelTest_usingGoodDomain {
}
+ @Test
+ void nonPublicMembersAndSupport_shouldBeAllowed() {
+
+ val objectSpec = specificationLoader.specForTypeElseFail(Encapsulated.class);
+ val vm = ManagedObject.of(objectSpec, new Encapsulated());
+
+ val actionIx = ActionInteraction.start(vm, "myAction", Where.NOT_SPECIFIED);
+ val managedAction = actionIx
+ .getManagedAction().get(); // should not throw
+
+ val propIx = PropertyInteraction.start(vm, "myProperty", Where.NOT_SPECIFIED);
+ val managedProperty = propIx
+ .getManagedProperty().get(); // should not throw
+
+ interactionService.runAnonymous(()->{
+
+ // ACTION
+
+ assertFalse(managedAction.checkVisibility().isPresent()); // is visible
+ assertTrue(managedAction.checkUsability().isPresent()); // cannot invoke when checking rules
+ assertEquals("disabled for testing purposes", managedAction.checkUsability().get().getReason());
+
+ val args = managedAction.getInteractionHead()
+ .getPopulatedParameterValues(List.of());
+
+ // spawns its own transactional boundary, or reuses an existing one if available
+ val either = managedAction.invoke(args);
+
+ assertTrue(either.isLeft()); // assert action did not throw
+
+ val actionResultAsPojo = either.leftIfAny().getPojo();
+
+ assertEquals("Hallo World!", actionResultAsPojo);
+
+ // PROPERTY
+
+ assertFalse(managedProperty.checkVisibility().isPresent()); // is visible
+ assertFalse(managedProperty.checkUsability().isPresent()); // can invoke
+
+ assertEquals("Foo", managedProperty.getPropertyValue().getPojo());
+
+ val newPropertyValue = managedProperty.getMetaModel().getMetaModelContext()
+ .getObjectManager().adapt("Bar");
+
+ managedProperty.modifyProperty(newPropertyValue);
+
+ assertEquals("Bar", managedProperty.getPropertyValue().getPojo());
+
+ });
+
+ }
+
+
// -- HELPER
private void assertHasProperty(final ObjectSpecification spec, final String propertyId) {
diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/Encapsulated.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/Encapsulated.java
new file mode 100644
index 0000000..2e21658
--- /dev/null
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/Encapsulated.java
@@ -0,0 +1,47 @@
+package org.apache.isis.testdomain.model.good;
+
+import java.io.Serializable;
+
+import org.apache.isis.applib.ViewModel;
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.MemberSupport;
+import org.apache.isis.applib.annotation.Nature;
+import org.apache.isis.applib.annotation.Property;
+
+@DomainObject(nature = Nature.VIEW_MODEL)
+public class Encapsulated
+implements
+ Serializable,
+ ViewModel.CloneableViaSerialization {
+
+ private static final long serialVersionUID = 1L;
+
+ // TODO should be allowed to be private since 2.0.0-M7
+ @Action
+ public String myAction() {
+ return "Hallo World!";
+ }
+
+ // TODO should be allowed to be private since 2.0.0-M7
+ @MemberSupport
+ public String disableMyAction() {
+ return "disabled for testing purposes";
+ }
+
+ // TODO should also work if there are no getter/setter since 2.0.0-M7
+ @Property
+ private String myProperty = "Foo";
+
+ // TODO should be allowed to be private since 2.0.0-M7
+ public String getMyProperty() {
+ return myProperty;
+ }
+
+ // TODO should be allowed to be private since 2.0.0-M7
+ public void setMyProperty(final String myProperty) {
+ this.myProperty = myProperty;
+ }
+
+
+}