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/01/20 12:12:59 UTC

[isis] branch master updated: ISIS-2944: adds more action support method discovery tests

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 bcccf8b  ISIS-2944: adds more action support method discovery tests
bcccf8b is described below

commit bcccf8b0fa4ce057d92bfdef158c54300ee05ff7
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Jan 20 13:09:27 2022 +0100

    ISIS-2944: adds more action support method discovery tests
---
 .../metamodel/facets/FacetedMethodParameter.java   |  12 ---
 .../core/metamodel/facets/ParameterSupport.java    |   2 +-
 .../DomainModelTest_usingGoodDomain.java           |  53 +++++++++-
 .../interact/CollectionInteractionTest.java        |   7 +-
 .../model/good/ProperMemberSupportDiscovery.java   |  38 ++++---
 .../interaction/DomainObjectTesterFactory.java     | 109 ++++++++++++++++++++-
 .../common/model/action/ActionFormUiModel.java     |   3 +-
 7 files changed, 185 insertions(+), 39 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetedMethodParameter.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetedMethodParameter.java
index 82057fd..5c1c748 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetedMethodParameter.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/FacetedMethodParameter.java
@@ -20,7 +20,6 @@ package org.apache.isis.core.metamodel.facets;
 
 import java.lang.reflect.Method;
 
-import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.id.LogicalType;
 import org.apache.isis.core.metamodel.context.MetaModelContext;
 import org.apache.isis.core.metamodel.facetapi.FeatureType;
@@ -52,17 +51,6 @@ extends TypedHolderAbstract {
         this.paramIndex = paramIndex;
     }
 
-    public FacetedMethodParameter(
-            final MetaModelContext mmc,
-            final FeatureType featureType,
-            final Class<?> type,
-            final Identifier identifier,
-            final int paramIndex) {
-
-        super(mmc, featureType, type, identifier);
-        this.paramIndex = paramIndex;
-    }
-
     /**
      * Returns an instance with {@code type} replaced by given {@code elementType}.
      * @param elementType
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/ParameterSupport.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/ParameterSupport.java
index 23abb45..c53629e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/ParameterSupport.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/ParameterSupport.java
@@ -226,7 +226,7 @@ public final class ParameterSupport {
 
     /**
      * @param paramTypes - all available
-     * @param paramsConsidered - limit
+     * @param limit - params considered count (without any additional)
      * @param additionalParamTypes - append regardless
      */
     private static Class<?>[] concat(
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 aac8833..a180baf 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
@@ -570,14 +570,61 @@ class DomainModelTest_usingGoodDomain {
                 .actionTester(ProperMemberSupportDiscovery.WhenAnnotationRequired.class, "placeOrder");
         act.assertExists(true);
 
-        //FIXME act.assertFriendlyName("my name");
-        //FIXME act.assertDescription("my description");
+        // namedPlaceOrder(): String = "my name"
+        act.assertFriendlyName("my name");
 
+        // describedPlaceOrder(): String = "my description"
+        act.assertDescription("my description");
+
+        // hidePlaceOrder(): boolean = false
         act.assertVisibilityIsNotVetoed();
-        act.assertUsabilityIsNotVetoed();
+
+        // disablePlaceOrder(): String = "my disable reason"
+        act.assertUsabilityIsVetoedWith("my disable reason");
+
+        // default0PlaceOrder(): String = "my default-0"
+        // default1PlaceOrder(): String = "my default-1"
+        act.assertParameterValues(
+                false, // skip rule checking
+                arg0->assertEquals(
+                        "my default-0",
+                        arg0),
+                arg1->assertEquals(
+                        "my default-1",
+                        arg1));
+
+        act.assertValidationMessage("my validation",
+                false, // skip rule checking
+                arg0->"",
+                arg1->"");
+
+        // hide0PlaceOrder(x): boolean = true
+        // hide1PlaceOrder(y): boolean = false
+        act.assertParameterVisibility(
+                false, // skip rule checking
+                arg0Visible->assertFalse(arg0Visible),
+                arg1Visible->assertTrue(arg1Visible));
+
+        // disable0PlaceOrder(x): String = "my disable reason-0"
+        // disable1PlaceOrder(z): String = "my disable reason-1"
+        act.assertParameterUsability(
+                false, // skip rule checking
+                arg0->assertEquals(
+                        "my disable reason-0",
+                        arg0),
+                arg1->assertEquals(
+                        "my disable reason-1",
+                        arg1));
 
         //TODO missing asserts
 
+        // choices0PlaceOrder(x): List.of("my choice")
+        // autoComplete1PlaceOrder(y, search): List.of("my search")
+
+        // validate0PlaceOrder(String x): String = "my validation-0"
+        // validate1PlaceOrder(String y): String = "my validation-1"
+        // validatePlaceOrder(String x, final String y): String = "my validation"
+
     }
 
 
diff --git a/regressiontests/stable-interact/src/test/java/org/apache/isis/testdomain/interact/CollectionInteractionTest.java b/regressiontests/stable-interact/src/test/java/org/apache/isis/testdomain/interact/CollectionInteractionTest.java
index cd75256..4ab3bb3 100644
--- a/regressiontests/stable-interact/src/test/java/org/apache/isis/testdomain/interact/CollectionInteractionTest.java
+++ b/regressiontests/stable-interact/src/test/java/org/apache/isis/testdomain/interact/CollectionInteractionTest.java
@@ -25,6 +25,8 @@ import org.junit.jupiter.api.Test;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.TestPropertySource;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.core.config.presets.IsisPresets;
 import org.apache.isis.core.metamodel.spec.ManagedObjects;
@@ -33,8 +35,6 @@ import org.apache.isis.testdomain.model.interaction.Configuration_usingInteracti
 import org.apache.isis.testdomain.model.interaction.InteractionDemo;
 import org.apache.isis.testdomain.util.interaction.InteractionTestAbstract;
 
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
 import lombok.val;
 
 @SpringBootTest(
@@ -135,7 +135,8 @@ class CollectionInteractionTest extends InteractionTestAbstract {
         actTester.assertUsabilityIsNotVetoed();
 
         // verify param defaults are seeded with choices from selection
-        actTester.assertParameterValues(arg0->assertEquals(
+        actTester.assertParameterValues(true,
+                arg0->assertEquals(
                 List.of(
                     choiceElements.get(1),
                     choiceElements.get(3)),
diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberSupportDiscovery.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberSupportDiscovery.java
index 4d6b12f..91a0828 100644
--- a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberSupportDiscovery.java
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberSupportDiscovery.java
@@ -33,29 +33,35 @@ public class ProperMemberSupportDiscovery {
 
         //public abstract void placeOrder(String x, String y);
 
-        public String namedPlaceOrder() { return "my name"; }
-        public String describedPlaceOrder() { return "my description"; }
-        public boolean hidePlaceOrder() { return false; }
-        public boolean hide0PlaceOrder(final String x) { return true; }
-        public boolean hide1PlaceOrder(final String y) { return false; }
-        public String disablePlaceOrder() { return "my disable reason"; }
-        public String disable0PlaceOrder(final String x) { return "my disable reason-0";}
-        public String disable1PlaceOrder(final String z) { return "my disable reason-1";}
-        public String default0PlaceOrder() { return "my default-0";}
-        public String default1PlaceOrder() { return "my default-1";}
-
-        public java.util.Collection<String> choices0PlaceOrder(final String x) {
+        //FIXME remove all annotations ...
+
+        @MemberSupport public String namedPlaceOrder() { return "my name"; }
+        @MemberSupport public String describedPlaceOrder() { return "my description"; }
+        @MemberSupport public boolean hidePlaceOrder() { return false; }
+        @MemberSupport public boolean hide0PlaceOrder(final String x) {
+            System.err.printf("hide0PlaceOrder %s%n", x);
+            return true; }
+        @MemberSupport public boolean hide1PlaceOrder(final String y) {
+            System.err.printf("hide1PlaceOrder %s%n", y);
+            return false; }
+        @MemberSupport public String disablePlaceOrder() { return "my disable reason"; }
+        @MemberSupport public String disable0PlaceOrder(final String x) { return "my disable reason-0";}
+        @MemberSupport public String disable1PlaceOrder(final String z) { return "my disable reason-1";}
+        @MemberSupport public String default0PlaceOrder() { return "my default-0";}
+        @MemberSupport public String default1PlaceOrder() { return "my default-1";}
+
+        @MemberSupport public java.util.Collection<String> choices0PlaceOrder(final String x) {
             return List.of("my choice");
         }
-        public java.util.Collection<String> autoComplete1PlaceOrder(
+        @MemberSupport public java.util.Collection<String> autoComplete1PlaceOrder(
                 final String y,
                 @MinLength(3) final String search) {
             return List.of("my search");
         }
 
-        public String validate0PlaceOrder(final String x) { return "my validation-0";}
-        public String validate1PlaceOrder(final String y) { return "my validation-1";}
-        public String validatePlaceOrder(final String x, final String y) { return "my validation";}
+        @MemberSupport public String validate0PlaceOrder(final String x) { return "my validation-0";}
+        @MemberSupport public String validate1PlaceOrder(final String y) { return "my validation-1";}
+        @MemberSupport public String validatePlaceOrder(final String x, final String y) { return "my validation";}
 
     }
 
diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/util/interaction/DomainObjectTesterFactory.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/util/interaction/DomainObjectTesterFactory.java
index 1935978..3e41400 100644
--- a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/util/interaction/DomainObjectTesterFactory.java
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/util/interaction/DomainObjectTesterFactory.java
@@ -389,6 +389,7 @@ public class DomainObjectTesterFactory {
         }
 
         public void assertParameterValues(
+                final boolean checkRules,
                 @SuppressWarnings("rawtypes") final Consumer ...pojoDefaultArgTests) {
 
             assertExists(true);
@@ -397,7 +398,7 @@ public class DomainObjectTesterFactory {
 
             interactionService.runAnonymous(()->{
 
-                val pendingArgs = startParameterNegotiation(true);
+                val pendingArgs = startParameterNegotiation(checkRules);
 
                 pendingArgs.getParamModels()
                 .forEach(param->{
@@ -415,6 +416,104 @@ public class DomainObjectTesterFactory {
 
         }
 
+        public void assertParameterVisibility(
+                final boolean checkRules,
+                final Consumer<Boolean> ...argVisibleChecks) {
+
+            assertExists(true);
+
+            val visibilityTests = Can.ofArray(argVisibleChecks);
+
+            interactionService.runAnonymous(()->{
+
+                val pendingArgs = startParameterNegotiation(checkRules);
+                pendingArgs.getParamModels()
+                .forEach(param->{
+
+                    val consent = pendingArgs.getVisibilityConsent(param.getParamNr());
+
+                    visibilityTests
+                        .get(param.getParamNr())
+                        .ifPresent(visibilityTest->
+                            visibilityTest.accept(consent.isAllowed()));
+                });
+
+                captureCommand();
+
+            });
+
+        }
+
+        public void assertParameterUsability(
+                final boolean checkRules,
+                final Consumer<String> ...argUsableChecks) {
+
+            assertExists(true);
+
+            val usabilityTests = Can.ofArray(argUsableChecks);
+
+            interactionService.runAnonymous(()->{
+
+                val pendingArgs = startParameterNegotiation(checkRules);
+                pendingArgs.getParamModels()
+                .forEach(param->{
+
+                    val consent = pendingArgs.getUsabilityConsent(param.getParamNr());
+
+                    usabilityTests
+                        .get(param.getParamNr())
+                        .ifPresent(usabilityTest->
+                        usabilityTest.accept(consent.getReason()));
+                });
+
+                captureCommand();
+
+            });
+
+
+
+        }
+
+        public void assertValidationMessage(
+                final String expectedMessage,
+                final boolean checkRules,
+                @SuppressWarnings("rawtypes") final UnaryOperator ...pojoDefaultArgMapper) {
+
+            assertExists(true);
+
+            val pojoArgMappers = Can.ofArray(pojoDefaultArgMapper);
+
+            interactionService.runAnonymous(()->{
+
+                val pendingArgs = startParameterNegotiation(checkRules);
+
+                pendingArgs.getParamModels()
+                .forEach(param->{
+
+                    val objManager = param.getMetaModel().getObjectManager();
+
+                    pojoArgMappers
+                        .get(param.getParamNr())
+                        .ifPresent(argMapper->
+                            param.getValue().setValue(
+                                    objManager
+                                    .adapt(
+                                        argMapper
+                                        .apply(ManagedObjects.UnwrapUtil.single(param.getValue().getValue())))));
+
+                });
+
+                captureCommand();
+
+                pendingArgs.activateValidationFeedback();
+
+                assertEquals(expectedMessage, pendingArgs.getObservableActionValidation().getValue());
+
+            });
+
+        }
+
+
         public Can<Command> getCapturedCommands() {
             return Can.ofCollection(capturedCommands);
         }
@@ -826,11 +925,15 @@ public class DomainObjectTesterFactory {
                     .getDescription().orElse(""));
         }
 
+        public final void assertVisibility(final boolean isExpectedVisible) {
+            assertVisibilityIsVetoedWith(isExpectedVisible ? null : "Hidden");
+        }
+
         public final void assertVisibilityIsNotVetoed() {
-            assertVisibilityIsVetoedWith(null);
+            assertVisibility(true);
         }
 
-        public final void assertVisibilityIsVetoedWith(final @Nullable String expectedVetoReason) {
+        private final void assertVisibilityIsVetoedWith(final @Nullable String expectedVetoReason) {
 
             final boolean isExpectedVisible = expectedVetoReason == null;
 
diff --git a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/ActionFormUiModel.java b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/ActionFormUiModel.java
index 803428f..6d165bd 100644
--- a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/ActionFormUiModel.java
+++ b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/action/ActionFormUiModel.java
@@ -82,7 +82,8 @@ extends HasTitle, HasActionInteraction {
         val buf = new StringBuilder();
 
         streamPendingParamUiModels()
-        .filter(paramModel->paramModel.getParameterNegotiationModel().getVisibilityConsent(paramModel.getParameterIndex()).isAllowed())
+        .filter(paramModel->paramModel.getParameterNegotiationModel()
+                .getVisibilityConsent(paramModel.getParameterIndex()).isAllowed())
         .map(ParameterUiModel::getValue)
         .forEach(paramValue->{
             if(buf.length() > 0) {