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 {