This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch v4
in repository https://gitbox.apache.org/repos/asf/causeway.git


The following commit(s) were added to refs/heads/v4 by this push:
     new 0941b1e6ee4 CAUSEWAY-3897: workaround test stability issue with 
@DirtiesContext
0941b1e6ee4 is described below

commit 0941b1e6ee4c03197facc6f5c36536fbe4dd05e1
Author: Andi Huber <[email protected]>
AuthorDate: Wed Jul 9 08:39:52 2025 +0200

    CAUSEWAY-3897: workaround test stability issue with @DirtiesContext
---
 .../environment/CausewaySystemEnvironment.java     |  5 ++---
 .../title/methods/TitleFacetViaTitleMethod.java    |  7 +-----
 .../CausewayWebAppContextInitializer.java          | 25 +++++++++++++---------
 .../testdomain/RegressionTestAbstract.java         |  5 +++++
 .../testdomain/rest/jpa/RestServiceTest.java       |  3 +++
 5 files changed, 26 insertions(+), 19 deletions(-)

diff --git 
a/core/config/src/main/java/org/apache/causeway/core/config/environment/CausewaySystemEnvironment.java
 
b/core/config/src/main/java/org/apache/causeway/core/config/environment/CausewaySystemEnvironment.java
index f8924673f76..1f6ed9ca452 100644
--- 
a/core/config/src/main/java/org/apache/causeway/core/config/environment/CausewaySystemEnvironment.java
+++ 
b/core/config/src/main/java/org/apache/causeway/core/config/environment/CausewaySystemEnvironment.java
@@ -78,7 +78,6 @@ public void postConstruct() {
         if(primed!=null) {
             _Context.remove(CausewaySystemEnvironment.class);
             this.setPrototyping(primed.isPrototyping());
-            this.setUnitTesting(primed.isUnitTesting());
         }
         _Context.putSingleton(CausewaySystemEnvironment.class, this);
     }
@@ -124,7 +123,7 @@ public _IocContainer ioc() {
      * Must be set prior to configuration bootstrapping.
      * @param isUnitTesting
      */
-    public void setUnitTesting(final boolean isUnitTesting) {
+    public static void setUnitTesting(final boolean isUnitTesting) {
         System.setProperty("UNITTESTING", ""+isUnitTesting);
     }
 
@@ -141,7 +140,7 @@ public DeploymentType getDeploymentType() {
         return decideDeploymentType();
     }
 
-    public boolean isUnitTesting() {
+    public static boolean isUnitTesting() {
         return "true".equalsIgnoreCase(getProperty("UNITTESTING"));
     }
 
diff --git 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/title/methods/TitleFacetViaTitleMethod.java
 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/title/methods/TitleFacetViaTitleMethod.java
index 486b8c7c8f7..261e007f825 100644
--- 
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/title/methods/TitleFacetViaTitleMethod.java
+++ 
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/title/methods/TitleFacetViaTitleMethod.java
@@ -27,7 +27,6 @@
 import org.apache.causeway.applib.services.i18n.TranslationContext;
 import 
org.apache.causeway.commons.internal.reflection._GenericResolver.ResolvedMethod;
 import org.apache.causeway.core.config.environment.CausewaySystemEnvironment;
-import org.apache.causeway.core.metamodel.context.MetaModelContext;
 import org.apache.causeway.core.metamodel.facetapi.FacetHolder;
 import org.apache.causeway.core.metamodel.facets.HasImperativeAspect;
 import org.apache.causeway.core.metamodel.facets.ImperativeAspect;
@@ -88,11 +87,7 @@ public String title(final TitleRenderRequest 
titleRenderRequest) {
             }
             return null;
         } catch (final RuntimeException ex) {
-            var isUnitTesting = Optional.ofNullable(getMetaModelContext())
-                    .map(MetaModelContext::getSystemEnvironment)
-                    .map(CausewaySystemEnvironment::isUnitTesting)
-                    .orElse(false);
-            if(!isUnitTesting) {
+            if(!CausewaySystemEnvironment.isUnitTesting()) {
                 log.warn("Failed Title {}", owningAdapter.objSpec(), ex);
             }
             return "Failed Title";
diff --git 
a/core/webapp/src/main/java/org/apache/causeway/core/webapp/webappctx/CausewayWebAppContextInitializer.java
 
b/core/webapp/src/main/java/org/apache/causeway/core/webapp/webappctx/CausewayWebAppContextInitializer.java
index 8ef0482d261..4016d8b7ee8 100644
--- 
a/core/webapp/src/main/java/org/apache/causeway/core/webapp/webappctx/CausewayWebAppContextInitializer.java
+++ 
b/core/webapp/src/main/java/org/apache/causeway/core/webapp/webappctx/CausewayWebAppContextInitializer.java
@@ -19,7 +19,6 @@
 package org.apache.causeway.core.webapp.webappctx;
 
 import java.util.EventListener;
-
 import jakarta.inject.Inject;
 import jakarta.servlet.ServletContext;
 import jakarta.servlet.ServletContextEvent;
@@ -33,6 +32,7 @@
 import org.apache.causeway.commons.internal.base._Oneshot;
 import org.apache.causeway.commons.internal.context._Context;
 import org.apache.causeway.core.config.CausewayConfiguration;
+import org.apache.causeway.core.config.environment.CausewaySystemEnvironment;
 import org.apache.causeway.core.config.viewer.web.WebAppContextPath;
 import org.apache.causeway.core.webapp.modules.WebModule;
 import org.apache.causeway.core.webapp.modules.WebModuleContext;
@@ -67,16 +67,21 @@ public class CausewayWebAppContextInitializer implements 
ServletContextInitializ
     @Override
     public void onStartup(final ServletContext servletContext) throws 
ServletException {
 
-        // onStartup(...) must be a one shot, otherwise ignore with warning
-        if(!oneshot.trigger()) {
-            log.warn("Spring tries to startup this initializer more than once."
-                    + " This is most likely a Spring configuration issue, 
check your bootstrapping setup.");
-            return;
-        }
+        // does not play well with @DirtiesContext, hence we skip those guards 
for testing
+        if(!CausewaySystemEnvironment.isUnitTesting()) {
+
+            // onStartup(...) must be a one shot, otherwise ignore with warning
+            if(!oneshot.trigger()) {
+                log.warn("Spring tries to startup this initializer more than 
once."
+                        + " This is most likely a Spring configuration issue, 
check your bootstrapping setup.");
+                return;
+            }
+
+            if(!isCausewayProvisioned()) {
+                log.error("skipping initialization, Spring should already have 
provisioned all configured Beans");
+                return;
+            }
 
-        if(!isCausewayProvisioned()) {
-            log.error("skipping initialization, Spring should already have 
provisioned all configured Beans");
-            return;
         }
 
         // set the ServletContext initializing thread as preliminary default 
until overridden by
diff --git 
a/regressiontests/base/src/main/java/org/apache/causeway/testdomain/RegressionTestAbstract.java
 
b/regressiontests/base/src/main/java/org/apache/causeway/testdomain/RegressionTestAbstract.java
index 444c6bd7544..28cea6f0879 100644
--- 
a/regressiontests/base/src/main/java/org/apache/causeway/testdomain/RegressionTestAbstract.java
+++ 
b/regressiontests/base/src/main/java/org/apache/causeway/testdomain/RegressionTestAbstract.java
@@ -31,6 +31,7 @@
 import org.apache.causeway.applib.services.repository.RepositoryService;
 import org.apache.causeway.applib.services.xactn.TransactionService;
 import org.apache.causeway.commons.functional.ThrowingRunnable;
+import org.apache.causeway.core.config.environment.CausewaySystemEnvironment;
 import org.apache.causeway.core.metamodel.objectmanager.ObjectManager;
 
 /**
@@ -39,6 +40,10 @@
  */
 public abstract class RegressionTestAbstract {
 
+    {
+        CausewaySystemEnvironment.setUnitTesting(true);
+    }
+
     protected void run(final ThrowingRunnable runnable) {
         interactionService.runAnonymous(() ->
             transactionService.runTransactional(Propagation.REQUIRES_NEW, 
runnable).ifFailureFail()
diff --git 
a/regressiontests/rest-jpa/src/test/java/org/apache/causeway/testdomain/rest/jpa/RestServiceTest.java
 
b/regressiontests/rest-jpa/src/test/java/org/apache/causeway/testdomain/rest/jpa/RestServiceTest.java
index 8cc7849c0fd..3e3f1ccc899 100644
--- 
a/regressiontests/rest-jpa/src/test/java/org/apache/causeway/testdomain/rest/jpa/RestServiceTest.java
+++ 
b/regressiontests/rest-jpa/src/test/java/org/apache/causeway/testdomain/rest/jpa/RestServiceTest.java
@@ -35,6 +35,8 @@
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.boot.web.server.test.LocalServerPort;
 import org.springframework.context.annotation.Import;
+import org.springframework.test.annotation.DirtiesContext;
+import org.springframework.test.annotation.DirtiesContext.ClassMode;
 import org.springframework.web.client.RestClient;
 
 import 
org.apache.causeway.extensions.fullcalendar.applib.value.CalendarEventSemantics;
@@ -58,6 +60,7 @@
     Configuration_usingJpa.class,
     CausewayModuleViewerRestfulObjectsViewer.class
 })
+@DirtiesContext(classMode = ClassMode.BEFORE_CLASS)
 @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
 class RestServiceTest extends RegressionTestWithJpaFixtures {
 

Reply via email to