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/causeway.git
The following commit(s) were added to refs/heads/master by this push:
new db31fd7023 CAUSEWAY-2968: adding test cases
db31fd7023 is described below
commit db31fd7023b56e64927623558b7e939b305856fc
Author: Andi Huber <[email protected]>
AuthorDate: Tue May 2 09:45:27 2023 +0200
CAUSEWAY-2968: adding test cases
---
.../DomainModelTest_usingBadDomain.java | 17 ++++
.../bad/Configuration_usingInvalidDomain.java | 2 +-
.../testdomain/model/bad/InvalidElementTypes.java | 93 ++++++++++++++++++++++
.../applib/validate/DomainModelValidator.java | 26 ++++++
4 files changed, 137 insertions(+), 1 deletion(-)
diff --git
a/regressiontests/stable-domainmodel/src/test/java/org/apache/causeway/testdomain/domainmodel/DomainModelTest_usingBadDomain.java
b/regressiontests/stable-domainmodel/src/test/java/org/apache/causeway/testdomain/domainmodel/DomainModelTest_usingBadDomain.java
index 6952cef3f0..35fdf35293 100644
---
a/regressiontests/stable-domainmodel/src/test/java/org/apache/causeway/testdomain/domainmodel/DomainModelTest_usingBadDomain.java
+++
b/regressiontests/stable-domainmodel/src/test/java/org/apache/causeway/testdomain/domainmodel/DomainModelTest_usingBadDomain.java
@@ -60,6 +60,7 @@ import
org.apache.causeway.testdomain.model.bad.Configuration_usingInvalidDomain
import org.apache.causeway.testdomain.model.bad.InvalidActionOverloading;
import
org.apache.causeway.testdomain.model.bad.InvalidContradictingTypeSemantics;
import org.apache.causeway.testdomain.model.bad.InvalidDomainObjectOnInterface;
+import org.apache.causeway.testdomain.model.bad.InvalidElementTypes;
import
org.apache.causeway.testdomain.model.bad.InvalidMemberOverloadingWhenInherited;
import org.apache.causeway.testdomain.model.bad.InvalidObjectWithAlias;
import org.apache.causeway.testdomain.model.bad.InvalidOrphanedActionSupport;
@@ -362,6 +363,22 @@ class DomainModelTest_usingBadDomain {
}
+ // -- ELEMENT-TYPE
+
+ @ParameterizedTest
+ @ValueSource(classes = {
+ InvalidElementTypes.Returning.class,
+ InvalidElementTypes.Taking.class,
+ InvalidElementTypes.InvalidProperty.class,
+ InvalidElementTypes.InvalidCollection.class
+ })
+ void invalidElementType(final Class<?> classUnderTest) {
+
+ validator.assertAnyFailuresContaining(
+ classUnderTest,
+ "has a member with either vetoed or managed element-type");
+ }
+
// -- INCUBATING
@Test @Disabled("this case has no vaildation refiner yet")
diff --git
a/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/model/bad/Configuration_usingInvalidDomain.java
b/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/model/bad/Configuration_usingInvalidDomain.java
index 8b0f9a060f..6eb232ba78 100644
---
a/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/model/bad/Configuration_usingInvalidDomain.java
+++
b/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/model/bad/Configuration_usingInvalidDomain.java
@@ -24,7 +24,7 @@ import org.springframework.context.annotation.Import;
@Configuration
@Import({
- InvalidDomainObjectOnInterface.class // explicitly import interface
+ InvalidDomainObjectOnInterface.class, // explicitly import interface
})
@ComponentScan(
basePackageClasses= {
diff --git
a/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/model/bad/InvalidElementTypes.java
b/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/model/bad/InvalidElementTypes.java
new file mode 100644
index 0000000000..7ce8f37172
--- /dev/null
+++
b/regressiontests/stable/src/main/java/org/apache/causeway/testdomain/model/bad/InvalidElementTypes.java
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.causeway.testdomain.model.bad;
+
+import java.util.Collections;
+import java.util.List;
+
+import javax.inject.Named;
+
+import org.apache.causeway.applib.annotation.Action;
+import org.apache.causeway.applib.annotation.ActionLayout;
+import org.apache.causeway.applib.annotation.Collection;
+import org.apache.causeway.applib.annotation.DomainObject;
+import org.apache.causeway.applib.annotation.Introspection;
+import org.apache.causeway.applib.annotation.MemberSupport;
+import org.apache.causeway.applib.annotation.Nature;
+import org.apache.causeway.applib.annotation.Property;
+
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+
+@DomainObject(nature = Nature.VIEW_MODEL, introspection =
Introspection.ANNOTATION_REQUIRED)
+@Named("testdomain.InvalidElementTypes")
+public class InvalidElementTypes {
+
+ // -- SAMPLE MIXIN
+
+ @Action
+ @ActionLayout(named = "someAction")
+ @RequiredArgsConstructor
+ public static class ActionMixin {
+ @SuppressWarnings("unused")
+ private final InvalidElementTypes invalidElementTypes;
+ @MemberSupport public String act() { return ""; }
+ }
+
+ // -- INVALID SCENARIOS
+
+ @DomainObject(nature = Nature.VIEW_MODEL)
+ @Named("testdomain.InvalidElementTypes.Returning")
+ public static class Returning {
+ // invalid return
+ @Action
+ public ActionMixin returningMixin() {
+ return null;
+ }
+ }
+
+ @DomainObject(nature = Nature.VIEW_MODEL)
+ @Named("testdomain.InvalidElementTypes.Taking")
+ public static class Taking {
+ // invalid param
+ @Action
+ public String takingMixin(final ActionMixin p0) {
+ return null;
+ }
+ }
+
+ @DomainObject(nature = Nature.VIEW_MODEL)
+ @Named("testdomain.InvalidElementTypes.Property")
+ public static class InvalidProperty {
+ // invalid property type
+ @Property
+ @Getter
+ private ActionMixin propertyOfMixin = null;
+ }
+
+ @DomainObject(nature = Nature.VIEW_MODEL)
+ @Named("testdomain.InvalidElementTypes.Collection")
+ public static class InvalidCollection {
+ // invalid element type
+ @Collection
+ @Getter
+ private List<ActionMixin> collectionOfMixin = Collections.emptyList();
+ }
+
+}
diff --git
a/testing/integtestsupport/applib/src/main/java/org/apache/causeway/testing/integtestsupport/applib/validate/DomainModelValidator.java
b/testing/integtestsupport/applib/src/main/java/org/apache/causeway/testing/integtestsupport/applib/validate/DomainModelValidator.java
index 70b3ef493f..d9b295d0ce 100644
---
a/testing/integtestsupport/applib/src/main/java/org/apache/causeway/testing/integtestsupport/applib/validate/DomainModelValidator.java
+++
b/testing/integtestsupport/applib/src/main/java/org/apache/causeway/testing/integtestsupport/applib/validate/DomainModelValidator.java
@@ -54,6 +54,7 @@ import lombok.extern.log4j.Log4j2;
public class DomainModelValidator {
private final ValidationFailures validationFailures;
+ private final SpecificationLoader specificationLoader;
@Inject
public DomainModelValidator(final ServiceRegistry registry) {
@@ -77,6 +78,7 @@ public class DomainModelValidator {
}
}
+ this.specificationLoader = specificationLoader;
this.validationFailures =
specificationLoader.getOrAssessValidationResult();
}
@@ -161,7 +163,31 @@ public class DomainModelValidator {
.collect(Collectors.joining("\n")));
throw new AssertionFailedError(msg);
}
+ }
+
+ /**
+ * JUnit support
+ */
+ public void assertAnyFailuresContaining(
+ final @NonNull Class<?> domainType,
+ final @NonNull String messageSnippet) {
+
+ val logicalType = specificationLoader.specForTypeElseFail(domainType)
+ .getLogicalType();
+ final Predicate<Identifier> filterByLogicalType =
id->id.getLogicalType().equals(logicalType);
+
+ boolean matchFound = streamFailures(filterByLogicalType)
+ .anyMatch(failure->
+ failure.getMessage().contains(messageSnippet));
+ if(!matchFound) {
+ val msg = String.format("validation snipped '%s' not found within
messages:\n%s",
+ messageSnippet,
+ streamFailures(filterByLogicalType)
+ .map(ValidationFailure::getMessage)
+ .collect(Collectors.joining("\n")));
+ throw new AssertionFailedError(msg);
+ }
}
/**