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/07/11 12:32:42 UTC

[isis] branch master updated: ISIS-3049: adds test, that reproduces choicesFrom issue

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 e29f92d51d ISIS-3049: adds test, that reproduces choicesFrom issue
e29f92d51d is described below

commit e29f92d51df853a0fdc36794bd106d6661bb1bb2
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon Jul 11 14:32:36 2022 +0200

    ISIS-3049: adds test, that reproduces choicesFrom issue
---
 .../DomainModelTest_usingGoodDomain.java           |  31 ++++++++++++++
 .../src/test/resources/metamodel.xml.zip           | Bin 90721 -> 91164 bytes
 .../model/good/ProperMemberSupport_action6.java    |  15 ++++++-
 .../interaction/DomainObjectTesterFactory.java     |  47 +++++++++++++++++++++
 4 files changed, 91 insertions(+), 2 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 6782078737..c7ac27dd33 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
@@ -25,6 +25,7 @@ import java.util.stream.Stream;
 import javax.inject.Inject;
 
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.condition.DisabledIfSystemProperty;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.Arguments;
 import org.junit.jupiter.params.provider.MethodSource;
@@ -485,6 +486,36 @@ class DomainModelTest_usingGoodDomain {
                     .orElse(null));
     }
 
+    //FIXME[ISIS-3049]
+    @DisabledIfSystemProperty(named = "isRunningWithSurefire", matches = "true")
+    /**
+     *  annotation provided 'choicesFrom' fallback, if no explicit choices member-support is given
+     *  (that are params #1 and #3)
+     */
+    @SuppressWarnings("unchecked")
+    @Test
+    void actionParamChoices_shouldBeAvailable_whenMixedInActionHasChoicesFromAnnotationAttribute() {
+
+        val actTester = testerFactory
+                .actionTester(ProperMemberSupport.class, "action6");
+        actTester.assertExists(true);
+
+        val mixee = actTester.getActionOwnerAs(ProperMemberSupport.class);
+        mixee.setMyColl(List.of(
+                "Hallo",
+                "World"));
+
+        val expectedParamChoices = Can.of(
+                "Hallo",
+                "World");
+
+        // verify param choices from 'choicesFrom' action annotation attribute
+        actTester.assertParameterChoices(true, String.class,
+                choices0->assertEquals(expectedParamChoices, Can.ofIterable(choices0), ()->"param 0 choices mismatch"),
+                choices1->assertEquals(expectedParamChoices, Can.ofIterable(choices1), ()->"param 1 choices mismatch"),
+                choices2->assertEquals(expectedParamChoices, Can.ofIterable(choices2), ()->"param 2 choices mismatch"),
+                choices3->assertEquals(expectedParamChoices, Can.ofIterable(choices3), ()->"param 3 choices mismatch"));
+    }
 
     @ParameterizedTest
     @MethodSource("provideImperativelyNamed")
diff --git a/regressiontests/stable-domainmodel/src/test/resources/metamodel.xml.zip b/regressiontests/stable-domainmodel/src/test/resources/metamodel.xml.zip
index 5044160038..86b57f154f 100644
Binary files a/regressiontests/stable-domainmodel/src/test/resources/metamodel.xml.zip and b/regressiontests/stable-domainmodel/src/test/resources/metamodel.xml.zip differ
diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberSupport_action6.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberSupport_action6.java
index b50a8a3a63..1705d8319b 100644
--- a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberSupport_action6.java
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/good/ProperMemberSupport_action6.java
@@ -18,6 +18,8 @@
  */
 package org.apache.isis.testdomain.model.good;
 
+import java.util.List;
+
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.MemberSupport;
 
@@ -25,7 +27,8 @@ import lombok.RequiredArgsConstructor;
 
 /**
  * Testing annotation provided 'choicesFrom' fallback,
- * if no explicit choices member-support is given.
+ * if no explicit choices member-support is given
+ * (that are params #1 and #3).
  * <p>
  * For (test) mixin descriptions see {@link ProperMemberSupport}.
  */
@@ -36,8 +39,16 @@ public class ProperMemberSupport_action6 {
     private final ProperMemberSupport mixee;
 
     @MemberSupport public ProperMemberSupport act(
-            final String p0, final String p1) {
+            final String p0, final String p1, final String p2, final String p3) {
         return mixee;
     }
 
+    @MemberSupport public List<String> choices0Act() {
+        return mixee.getMyColl();
+    }
+
+    @MemberSupport public List<String> choices2Act() {
+        return mixee.getMyColl();
+    }
+
 }
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 25bb19957d..1a0cb5763e 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
@@ -47,6 +47,7 @@ import org.apache.isis.applib.services.factory.FactoryService;
 import org.apache.isis.applib.services.iactnlayer.InteractionService;
 import org.apache.isis.applib.services.inject.ServiceInjector;
 import org.apache.isis.commons.collections.Can;
+import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.config.IsisConfiguration;
@@ -256,6 +257,19 @@ public class DomainObjectTesterFactory {
             this.parameterNegotiationStarter = null;
         }
 
+        @Nullable
+        public <X> X getActionOwnerAs(final Class<X> type) {
+            return _Casts.uncheckedCast(getActionOwner().map(ManagedObject::getPojo).orElse(null));
+        }
+
+        public ManagedObject getActionOwnerElseFail() {
+            return getActionOwner().orElseThrow();
+        }
+
+        public Optional<ManagedObject> getActionOwner() {
+            return getManagedAction().map(ManagedAction::getOwner);
+        }
+
         public Optional<ManagedAction> getManagedAction() {
             return actionInteraction().flatMap(ActionInteraction::getManagedAction);
         }
@@ -417,6 +431,39 @@ public class DomainObjectTesterFactory {
 
         }
 
+        @SuppressWarnings("unchecked")
+        public <X> void assertParameterChoices(
+                final boolean checkRules,
+                final Class<X> elementType,
+                final Consumer<Iterable<X>> ...pojoArgChoiceTests) {
+
+            assertExists(true);
+
+            val pojoTests = Can.ofArray(pojoArgChoiceTests);
+
+            interactionService.runAnonymous(()->{
+
+                startParameterNegotiation(checkRules).getParamModels()
+                .forEach(param->{
+                    pojoTests
+                        .get(param.getParamNr())
+                        .ifPresent(pojoTest->
+                            pojoTest.accept(
+                                    (List<X>) choicesFor(param)
+                                    ));
+                });
+
+                captureCommand();
+
+            });
+
+        }
+
+        private static List<Object> choicesFor(final ManagedValue param) {
+            return ManagedObjects.UnwrapUtil.multipleAsList(param.getChoices().getValue());
+        }
+
+        @SuppressWarnings("unchecked")
         public void assertParameterVisibility(
                 final boolean checkRules,
                 final Consumer<Boolean> ...argVisibleChecks) {