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) {