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);
+        }
     }
 
     /**

Reply via email to