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/21 09:55:25 UTC
[isis] branch master updated: ISIS-2944: adds more member discovery tests (props and colls)
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 4e07e1b ISIS-2944: adds more member discovery tests (props and colls)
4e07e1b is described below
commit 4e07e1ba781178e3c93215f2fb256fe514f5545f
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Jan 21 10:55:14 2022 +0100
ISIS-2944: adds more member discovery tests (props and colls)
---
.../managed/PropertyNegotiationModel.java | 10 ++-
.../DomainModelTest_usingGoodDomain.java | 74 +++++++++++++++++++--
.../model/good/ProperMemberSupportDiscovery.java | 76 +++++++++++++++++++++-
.../interaction/DomainObjectTesterFactory.java | 25 ++++++-
4 files changed, 175 insertions(+), 10 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/PropertyNegotiationModel.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/PropertyNegotiationModel.java
index 8e775f6..e42d0ea 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/PropertyNegotiationModel.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/PropertyNegotiationModel.java
@@ -47,7 +47,8 @@ public class PropertyNegotiationModel implements ManagedValue {
private final @NonNull ManagedProperty managedProperty;
private Bindable<String> proposedValueAsText;
- PropertyNegotiationModel(final ManagedProperty managedProperty) {
+ PropertyNegotiationModel(
+ final ManagedProperty managedProperty) {
this.managedProperty = managedProperty;
val propMeta = managedProperty.getMetaModel();
@@ -152,6 +153,13 @@ public class PropertyNegotiationModel implements ManagedValue {
return validationFeedbackActive.getValue();
}
+ /**
+ * exposed for testing
+ */
+ public void activateValidationFeedback() {
+ validationFeedbackActive.setValue(true);
+ }
+
public void invalidateChoicesAndValidation() {
choices.invalidate();
validation.invalidate();
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 135f8a0..430d7e6 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
@@ -27,6 +27,7 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
+import org.junit.jupiter.params.provider.ValueSource;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.TestPropertySource;
@@ -458,8 +459,6 @@ class DomainModelTest_usingGoodDomain {
}
-
-
@Test
void viewmodelWithEncapsulatedMembers() {
@@ -564,11 +563,21 @@ class DomainModelTest_usingGoodDomain {
}
@SuppressWarnings("unchecked")
- @Test
- void properMemberSupportDiscovery() {
+ @ParameterizedTest
+ @ValueSource(classes = {
+ //FIXME ProperMemberSupportDiscovery.WhenEncapsulationEnabled.class,
+ ProperMemberSupportDiscovery.WhenAnnotationRequired.class,
+ //FIXME ProperMemberSupportDiscovery.WhenAnnotationOptional.class
+ })
+ void properMemberSupportDiscovery(final Class<?> classUnderTest) {
val act = testerFactory
- .actionTester(ProperMemberSupportDiscovery.WhenAnnotationRequired.class, "placeOrder");
+ .actionTester(classUnderTest, "placeOrder");
+ val prop = testerFactory
+ .propertyTester(classUnderTest, "email");
+ val coll = testerFactory
+ .collectionTester(classUnderTest, "orders");
+
act.assertExists(true);
// namedPlaceOrder(): String = "my name"
@@ -665,6 +674,61 @@ class DomainModelTest_usingGoodDomain {
"my validation");
});
+ // namedEmail(): String = "my email"
+ prop.assertFriendlyName("my email");
+
+ // describedEmail: String = "my email described"
+ prop.assertDescription("my email described");
+
+ // hideEmail(): boolean = true
+ prop.assertVisibilityIsVetoed();
+
+ // disableEmail(): String = "my email disable"
+ prop.assertUsabilityIsVetoedWith("my email disable");
+
+ // defaultEmail(): String = "my default email"
+ prop.assertValueNegotiation(
+ propNeg->{
+ assertEquals(
+ "my default email",
+ propNeg.getValue().getValue().getPojo());
+ },
+ propNegPostCommit->{});
+
+
+ // choicesEmail(): Collection<String> = List.of("my email choice")
+ prop.assertValueNegotiation(
+ propNeg->{
+ assertEquals(
+ Can.of("my email choice"),
+ propNeg.getChoices().getValue().map(ManagedObject::getPojo));
+ },
+ propNegPostCommit->{});
+
+
+ // validateEmail(final String email): String = "my email validate"
+ prop.assertValueNegotiation(
+ propNeg->{},
+ propNegPostCommit->{
+ assertEquals(
+ "my email validate",
+ propNegPostCommit.getValidationMessage().getValue());
+ });
+
+ // -- COLLECTION
+
+ // namedOrders(): String = "my orders"
+ coll.assertFriendlyName("my orders");
+
+ // describedOrders: String = "my orders described"
+ coll.assertDescription("my orders described");
+
+ // hideOrders(): boolean = true
+ coll.assertVisibilityIsVetoed();
+
+ // disableOrders(): String = "my orders disabled"
+ coll.assertUsabilityIsVetoedWith("my orders disabled");
+
}
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 fadd0d5..0bc149f 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
@@ -21,16 +21,24 @@ package org.apache.isis.testdomain.model.good;
import java.util.List;
import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.Collection;
import org.apache.isis.applib.annotation.DomainObject;
import org.apache.isis.applib.annotation.Introspection;
import org.apache.isis.applib.annotation.MemberSupport;
import org.apache.isis.applib.annotation.MinLength;
import org.apache.isis.applib.annotation.Nature;
+import org.apache.isis.applib.annotation.Property;
+
+import lombok.AccessLevel;
+import lombok.Getter;
+import lombok.Setter;
public class ProperMemberSupportDiscovery {
public static abstract class PublicBase {
+ // -- ACTION
+
public String namedPlaceOrder() { return "my name"; }
public String describedPlaceOrder() { return "my description"; }
public boolean hidePlaceOrder() { return false; }
@@ -55,13 +63,35 @@ public class ProperMemberSupportDiscovery {
public String validate1PlaceOrder(final String y) { return "my validation-1";}
public String validatePlaceOrder(final String x, final String y) { return "my validation";}
+ // -- PROPERTY
+
+ public String namedEmail() { return "my email";}
+ public String describedEmail() { return "my email described";}
+ public boolean hideEmail() { return true;}
+ public String disableEmail() { return "my email disable";}
+ public String defaultEmail() { return "my default email";}
+ public java.util.Collection<String> choicesEmail() {
+ return List.of("my email choice");
+ }
+ public String validateEmail(final String email) { return "my email validate";}
+
+ // -- COLLECTION
+
+ public String namedOrders() { return "my orders"; }
+ public String describedOrders() { return "my orders described"; }
+ public boolean hideOrders() { return true;}
+ public String disableOrders() { return "my orders disabled"; }
+
}
+ /**
+ * annotations required, otherwise not picked up
+ */
static abstract class ProtectedBase {
- protected abstract void placeOrder(String x, String y);
+ // -- ACTION
- // annotations required, otherwise not picked up as action
+ protected abstract void placeOrder(String x, String y);
@MemberSupport protected String namedPlaceOrder() { return "my name"; }
@MemberSupport protected String describedPlaceOrder() { return "my description"; }
@@ -83,6 +113,24 @@ public class ProperMemberSupportDiscovery {
return List.of("my search");
}
+ // -- PROPERTY
+
+ @MemberSupport protected String namedEmail() { return "my email";}
+ @MemberSupport protected String describedEmail() { return "my email described";}
+ @MemberSupport protected boolean hideEmail() { return true;}
+ @MemberSupport protected String disableEmail() { return "my email disable";}
+ @MemberSupport protected String defaultEmail() { return "my default email";}
+ @MemberSupport protected java.util.Collection<String> choicesEmail() {
+ return List.of("my email choice");
+ }
+ @MemberSupport protected String validateEmail(final String email) { return "my email validate";}
+
+ // -- COLLECTION
+
+ @MemberSupport protected String namedOrders() { return "my oders"; }
+ @MemberSupport protected String describedOrders() { return "my orders described"; }
+ @MemberSupport protected boolean hideOrders() { return true;}
+ @MemberSupport protected String disableOrders() { return "my orders disabled"; }
}
@DomainObject(
@@ -94,6 +142,12 @@ public class ProperMemberSupportDiscovery {
public void placeOrder(final String x, final String y) {
}
+ @Getter @Setter
+ private String email;
+
+ @Getter @Setter
+ private java.util.Collection<String> orders;
+
}
@DomainObject(
@@ -107,6 +161,14 @@ public class ProperMemberSupportDiscovery {
public void placeOrder(final String x, final String y) {
}
+ @Property
+ @Getter @Setter
+ private String email;
+
+ @Collection
+ @Getter @Setter
+ private java.util.Collection<String> orders;
+
}
@DomainObject(
@@ -118,9 +180,17 @@ public class ProperMemberSupportDiscovery {
// annotation required, otherwise not picked up as action
@Action
@Override
- public void placeOrder(final String x, final String y) {
+ protected void placeOrder(final String x, final String y) {
}
+ @Property
+ @Getter(AccessLevel.PROTECTED) @Setter(AccessLevel.PROTECTED)
+ private String email;
+
+ @Collection
+ @Getter(AccessLevel.PROTECTED) @Setter(AccessLevel.PROTECTED)
+ private java.util.Collection<String> orders;
+
}
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 d1ec9ce..4d0e82a 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
@@ -66,6 +66,7 @@ import org.apache.isis.core.metamodel.interactions.managed.ManagedProperty;
import org.apache.isis.core.metamodel.interactions.managed.ManagedValue;
import org.apache.isis.core.metamodel.interactions.managed.ParameterNegotiationModel;
import org.apache.isis.core.metamodel.interactions.managed.PropertyInteraction;
+import org.apache.isis.core.metamodel.interactions.managed.PropertyNegotiationModel;
import org.apache.isis.core.metamodel.interactions.managed.nonscalar.DataTableModel;
import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.ManagedObjects;
@@ -722,6 +723,24 @@ public class DomainObjectTesterFactory {
}
+ public void assertValueNegotiation(
+ final Consumer<PropertyNegotiationModel> when,
+ final Consumer<PropertyNegotiationModel> then) {
+
+ assertExists(true);
+
+ managedPropertyIfAny
+ .ifPresent(managedProperty->{
+ interactionService.runAnonymous(()->{
+ val propNeg = managedProperty.startNegotiation();
+ when.accept(propNeg);
+ propNeg.activateValidationFeedback();
+ propNeg.submit();
+ then.accept(propNeg);
+ });
+ });
+ }
+
/**
* Supported by all properties that reflect a value type.
* Uses value-semantics under the hood to do the conversion.
@@ -941,10 +960,14 @@ public class DomainObjectTesterFactory {
.getDescription().orElse(""));
}
- public final void assertVisibility(final boolean isExpectedVisible) {
+ private final void assertVisibility(final boolean isExpectedVisible) {
assertVisibilityIsVetoedWith(isExpectedVisible ? null : "Hidden");
}
+ public final void assertVisibilityIsVetoed() {
+ assertVisibility(false);
+ }
+
public final void assertVisibilityIsNotVetoed() {
assertVisibility(true);
}