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