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;
+    }
+
+
+}