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 2021/07/30 15:48:13 UTC

[isis] branch master updated: ISIS-2794: de-duplicate publishing test code

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 eeb06c5  ISIS-2794: de-duplicate publishing test code
eeb06c5 is described below

commit eeb06c58e23aef119de3b093d1bf51726566e865
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Jul 30 17:48:02 2021 +0200

    ISIS-2794: de-duplicate publishing test code
---
 .../publishing/CommandPublishingTestAbstract.java  |  9 +++-
 .../publishing/EntityPublishingTestAbstract.java   |  9 +++-
 .../ExecutionPublishingTestAbstract.java           |  9 +++-
 .../publishing/PropertyPublishingTestAbstract.java |  9 +++-
 .../publishing/PublishingTestAbstract.java         | 58 ++++++++++++++++++++++
 .../publishing/jdo/JdoCommandPublishingTest.java   | 32 ++----------
 .../publishing/jdo/JdoEntityPublishingTest.java    | 32 ++----------
 .../publishing/jdo/JdoExecutionPublishingTest.java | 32 ++----------
 .../publishing/jdo/JdoPropertyPublishingTest.java  | 32 ++----------
 .../publishing/jpa/JpaCommandPublishingTest.java   | 33 ++----------
 .../publishing/jpa/JpaEntityPublishingTest.java    | 37 ++------------
 .../publishing/jpa/JpaExecutionPublishingTest.java | 32 ++----------
 .../publishing/jpa/JpaPropertyPublishingTest.java  | 32 ++----------
 .../publishing/PublishingTestFactoryAbstract.java  | 23 ++-------
 14 files changed, 127 insertions(+), 252 deletions(-)

diff --git a/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/CommandPublishingTestAbstract.java b/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/CommandPublishingTestAbstract.java
index 29e3261..1db0bcc 100644
--- a/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/CommandPublishingTestAbstract.java
+++ b/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/CommandPublishingTestAbstract.java
@@ -40,14 +40,21 @@ import org.apache.isis.testdomain.util.kv.KVStoreForTesting;
 import lombok.val;
 
 public abstract class CommandPublishingTestAbstract
-implements HasPersistenceStandard {
+extends PublishingTestAbstract {
 
     @Inject private KVStoreForTesting kvStore;
 
+    @Override
+    protected final boolean supportsProgrammaticTesting(final ChangeScenario changeScenario) {
+        return false;
+    }
+
+    @Override
     protected void given() {
         CommandSubscriberForTesting.clearPublishedCommands(kvStore);
     }
 
+    @Override
     protected void verify(
             final ChangeScenario changeScenario,
             final VerificationStage verificationStage) {
diff --git a/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/EntityPublishingTestAbstract.java b/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/EntityPublishingTestAbstract.java
index 1cb61f9..438e5e4 100644
--- a/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/EntityPublishingTestAbstract.java
+++ b/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/EntityPublishingTestAbstract.java
@@ -35,14 +35,21 @@ import static org.apache.isis.testdomain.publishing.subscriber.EntityChangesSubs
 import static org.apache.isis.testdomain.publishing.subscriber.EntityChangesSubscriberForTesting.getUpdated;
 
 public abstract class EntityPublishingTestAbstract
-implements HasPersistenceStandard {
+extends PublishingTestAbstract {
 
     @Inject private KVStoreForTesting kvStore;
 
+    @Override
+    protected final boolean supportsProgrammaticTesting(final ChangeScenario changeScenario) {
+        return changeScenario.isSupportsProgrammatic();
+    }
+
+    @Override
     protected void given() {
         clearPublishedEntries(kvStore);
     }
 
+    @Override
     protected void verify(
             final ChangeScenario changeScenario,
             final VerificationStage verificationStage) {
diff --git a/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/ExecutionPublishingTestAbstract.java b/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/ExecutionPublishingTestAbstract.java
index 1a55a2c..5ac14f1 100644
--- a/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/ExecutionPublishingTestAbstract.java
+++ b/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/ExecutionPublishingTestAbstract.java
@@ -44,14 +44,21 @@ import org.apache.isis.testdomain.util.kv.KVStoreForTesting;
 import lombok.val;
 
 public abstract class ExecutionPublishingTestAbstract
-implements HasPersistenceStandard {
+extends PublishingTestAbstract {
 
     @Inject private KVStoreForTesting kvStore;
 
+    @Override
+    protected final boolean supportsProgrammaticTesting(final ChangeScenario changeScenario) {
+        return false;
+    }
+
+    @Override
     protected void given() {
         ExecutionSubscriberForTesting.clearPublishedEntries(kvStore);
     }
 
+    @Override
     protected void verify(
             final ChangeScenario changeScenario,
             final VerificationStage verificationStage) {
diff --git a/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/PropertyPublishingTestAbstract.java b/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/PropertyPublishingTestAbstract.java
index 272fd0f..8090fca 100644
--- a/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/PropertyPublishingTestAbstract.java
+++ b/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/PropertyPublishingTestAbstract.java
@@ -33,14 +33,21 @@ import org.apache.isis.testdomain.util.kv.KVStoreForTesting;
 import lombok.val;
 
 public abstract class PropertyPublishingTestAbstract
-implements HasPersistenceStandard {
+extends PublishingTestAbstract {
 
     @Inject private KVStoreForTesting kvStore;
 
+    @Override
+    protected final boolean supportsProgrammaticTesting(final ChangeScenario changeScenario) {
+        return changeScenario.isSupportsProgrammatic();
+    }
+
+    @Override
     protected void given() {
         EntityPropertyChangeSubscriberForTesting.clearPropertyChangeEntries(kvStore);
     }
 
+    @Override
     protected void verify(
             final ChangeScenario changeScenario,
             final VerificationStage verificationStage) {
diff --git a/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/PublishingTestAbstract.java b/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/PublishingTestAbstract.java
new file mode 100644
index 0000000..255a73b
--- /dev/null
+++ b/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/PublishingTestAbstract.java
@@ -0,0 +1,58 @@
+package org.apache.isis.testdomain.publishing;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.DynamicTest;
+import org.junit.jupiter.api.TestFactory;
+
+import org.apache.isis.testdomain.publishing.PublishingTestFactoryAbstract.ChangeScenario;
+import org.apache.isis.testdomain.publishing.PublishingTestFactoryAbstract.VerificationStage;
+
+import lombok.val;
+
+public abstract class PublishingTestAbstract
+implements HasPersistenceStandard {
+
+    protected abstract PublishingTestFactoryAbstract getTestFactory();
+
+    protected abstract boolean supportsProgrammaticTesting(ChangeScenario changeScenario);
+
+    @TestFactory @DisplayName("Entity Creation")
+    final List<DynamicTest> generateTestsForCreation() {
+        return generateTests(ChangeScenario.ENTITY_CREATION);
+    }
+
+    @TestFactory @DisplayName("Entity Removal")
+    final List<DynamicTest> generateTestsForRemoval() {
+        return generateTests(ChangeScenario.ENTITY_REMOVAL);
+    }
+
+    @TestFactory @DisplayName("Property Update")
+    final List<DynamicTest> generateTestsForUpdate() {
+        return generateTests(ChangeScenario.PROPERTY_UPDATE);
+    }
+
+    @TestFactory @DisplayName("Action Execution")
+    final List<DynamicTest> generateTestsForAction() {
+        return generateTests(ChangeScenario.ACTION_INVOCATION);
+    }
+
+    protected abstract void given();
+
+    protected abstract void verify(
+            ChangeScenario changeScenario,
+            VerificationStage verificationStage);
+
+    // -- HELPER
+
+    private final List<DynamicTest> generateTests(final ChangeScenario scenario) {
+        val testFactory = getTestFactory();
+        return testFactory!=null
+                ? testFactory.generateTests(
+                        scenario, supportsProgrammaticTesting(scenario), this::given, this::verify)
+                : Collections.emptyList();
+    }
+
+}
diff --git a/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/jdo/JdoCommandPublishingTest.java b/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/jdo/JdoCommandPublishingTest.java
index 0ce6313..9856479 100644
--- a/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/jdo/JdoCommandPublishingTest.java
+++ b/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/jdo/JdoCommandPublishingTest.java
@@ -18,21 +18,16 @@
  */
 package org.apache.isis.testdomain.publishing.jdo;
 
-import java.util.List;
-
 import javax.inject.Inject;
 
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.DynamicTest;
-import org.junit.jupiter.api.TestFactory;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.TestPropertySource;
 
 import org.apache.isis.core.config.presets.IsisPresets;
 import org.apache.isis.testdomain.conf.Configuration_usingJdo;
 import org.apache.isis.testdomain.publishing.CommandPublishingTestAbstract;
+import org.apache.isis.testdomain.publishing.PublishingTestFactoryAbstract;
 import org.apache.isis.testdomain.publishing.PublishingTestFactoryJdo;
-import org.apache.isis.testdomain.publishing.PublishingTestFactoryAbstract.ChangeScenario;
 import org.apache.isis.testdomain.publishing.conf.Configuration_usingCommandPublishing;
 
 @SpringBootTest(
@@ -57,28 +52,9 @@ implements HasPersistenceStandardJdo {
 
     @Inject private PublishingTestFactoryJdo testFactory;
 
-    @TestFactory @DisplayName("Entity Creation")
-    List<DynamicTest> generateTestsForCreation() {
-        return testFactory.generateTests(
-                ChangeScenario.ENTITY_CREATION, this::given, this::verify);
-    }
-
-    @TestFactory @DisplayName("Entity Removal")
-    List<DynamicTest> generateTestsForRemoval() {
-        return testFactory.generateTests(
-                ChangeScenario.ENTITY_REMOVAL, this::given, this::verify);
-    }
-
-    @TestFactory @DisplayName("Property Update")
-    List<DynamicTest> generateTestsForUpdate() {
-        return testFactory.generateTests(
-                ChangeScenario.PROPERTY_UPDATE, this::given, this::verify);
-    }
-
-    @TestFactory @DisplayName("Action Execution")
-    List<DynamicTest> generateTestsForAction() {
-        return testFactory.generateTests(
-                ChangeScenario.ACTION_INVOCATION, this::given, this::verify);
+    @Override
+    protected PublishingTestFactoryAbstract getTestFactory() {
+        return testFactory;
     }
 
 }
diff --git a/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/jdo/JdoEntityPublishingTest.java b/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/jdo/JdoEntityPublishingTest.java
index e26796f..ee2ab67 100644
--- a/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/jdo/JdoEntityPublishingTest.java
+++ b/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/jdo/JdoEntityPublishingTest.java
@@ -18,21 +18,16 @@
  */
 package org.apache.isis.testdomain.publishing.jdo;
 
-import java.util.List;
-
 import javax.inject.Inject;
 
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.DynamicTest;
-import org.junit.jupiter.api.TestFactory;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.TestPropertySource;
 
 import org.apache.isis.core.config.presets.IsisPresets;
 import org.apache.isis.testdomain.conf.Configuration_usingJdo;
 import org.apache.isis.testdomain.publishing.EntityPublishingTestAbstract;
+import org.apache.isis.testdomain.publishing.PublishingTestFactoryAbstract;
 import org.apache.isis.testdomain.publishing.PublishingTestFactoryJdo;
-import org.apache.isis.testdomain.publishing.PublishingTestFactoryAbstract.ChangeScenario;
 import org.apache.isis.testdomain.publishing.conf.Configuration_usingEntityChangesPublishing;
 
 @SpringBootTest(
@@ -58,28 +53,9 @@ implements HasPersistenceStandardJdo {
 
     @Inject private PublishingTestFactoryJdo testFactory;
 
-    @TestFactory @DisplayName("Entity Creation")
-    List<DynamicTest> generateTestsForCreation() {
-        return testFactory.generateTestsIncludeProgrammatic(
-                ChangeScenario.ENTITY_CREATION, this::given, this::verify);
-    }
-
-    @TestFactory @DisplayName("Entity Removal")
-    List<DynamicTest> generateTestsForRemoval() {
-        return testFactory.generateTestsIncludeProgrammatic(
-                ChangeScenario.ENTITY_REMOVAL, this::given, this::verify);
-    }
-
-    @TestFactory @DisplayName("Property Update")
-    List<DynamicTest> generateTestsForUpdate() {
-        return testFactory.generateTestsIncludeProgrammatic(
-                ChangeScenario.PROPERTY_UPDATE, this::given, this::verify);
-    }
-
-    @TestFactory @DisplayName("Action Execution")
-    List<DynamicTest> generateTestsForAction() {
-        return testFactory.generateTestsIncludeProgrammatic(
-                ChangeScenario.ACTION_INVOCATION, this::given, this::verify);
+    @Override
+    protected PublishingTestFactoryAbstract getTestFactory() {
+        return testFactory;
     }
 
 }
diff --git a/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/jdo/JdoExecutionPublishingTest.java b/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/jdo/JdoExecutionPublishingTest.java
index 76da9c5..af26650 100644
--- a/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/jdo/JdoExecutionPublishingTest.java
+++ b/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/jdo/JdoExecutionPublishingTest.java
@@ -18,21 +18,16 @@
  */
 package org.apache.isis.testdomain.publishing.jdo;
 
-import java.util.List;
-
 import javax.inject.Inject;
 
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.DynamicTest;
-import org.junit.jupiter.api.TestFactory;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.TestPropertySource;
 
 import org.apache.isis.core.config.presets.IsisPresets;
 import org.apache.isis.testdomain.conf.Configuration_usingJdo;
 import org.apache.isis.testdomain.publishing.ExecutionPublishingTestAbstract;
+import org.apache.isis.testdomain.publishing.PublishingTestFactoryAbstract;
 import org.apache.isis.testdomain.publishing.PublishingTestFactoryJdo;
-import org.apache.isis.testdomain.publishing.PublishingTestFactoryAbstract.ChangeScenario;
 import org.apache.isis.testdomain.publishing.conf.Configuration_usingExecutionPublishing;
 
 @SpringBootTest(
@@ -57,28 +52,9 @@ implements HasPersistenceStandardJdo {
 
     @Inject private PublishingTestFactoryJdo testFactory;
 
-    @TestFactory @DisplayName("Entity Creation")
-    List<DynamicTest> generateTestsForCreation() {
-        return testFactory.generateTests(
-                ChangeScenario.ENTITY_CREATION, this::given, this::verify);
-    }
-
-    @TestFactory @DisplayName("Entity Removal")
-    List<DynamicTest> generateTestsForRemoval() {
-        return testFactory.generateTests(
-                ChangeScenario.ENTITY_REMOVAL, this::given, this::verify);
-    }
-
-    @TestFactory @DisplayName("Property Update")
-    List<DynamicTest> generateTestsForUpdate() {
-        return testFactory.generateTests(
-                ChangeScenario.PROPERTY_UPDATE, this::given, this::verify);
-    }
-
-    @TestFactory @DisplayName("Action Execution")
-    List<DynamicTest> generateTestsForAction() {
-        return testFactory.generateTests(
-                ChangeScenario.ACTION_INVOCATION, this::given, this::verify);
+    @Override
+    protected PublishingTestFactoryAbstract getTestFactory() {
+        return testFactory;
     }
 
 }
diff --git a/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/jdo/JdoPropertyPublishingTest.java b/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/jdo/JdoPropertyPublishingTest.java
index 78c4e4e..c941821 100644
--- a/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/jdo/JdoPropertyPublishingTest.java
+++ b/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/jdo/JdoPropertyPublishingTest.java
@@ -18,14 +18,9 @@
  */
 package org.apache.isis.testdomain.publishing.jdo;
 
-import java.util.List;
-
 import javax.inject.Inject;
 
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.DynamicTest;
 import org.junit.jupiter.api.MethodOrderer;
-import org.junit.jupiter.api.TestFactory;
 import org.junit.jupiter.api.TestMethodOrder;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.TestPropertySource;
@@ -33,8 +28,8 @@ import org.springframework.test.context.TestPropertySource;
 import org.apache.isis.core.config.presets.IsisPresets;
 import org.apache.isis.testdomain.conf.Configuration_usingJdo;
 import org.apache.isis.testdomain.publishing.PropertyPublishingTestAbstract;
+import org.apache.isis.testdomain.publishing.PublishingTestFactoryAbstract;
 import org.apache.isis.testdomain.publishing.PublishingTestFactoryJdo;
-import org.apache.isis.testdomain.publishing.PublishingTestFactoryAbstract.ChangeScenario;
 import org.apache.isis.testdomain.publishing.conf.Configuration_usingEntityPropertyChangePublishing;
 
 @SpringBootTest(
@@ -60,28 +55,9 @@ implements HasPersistenceStandardJdo {
 
     @Inject private PublishingTestFactoryJdo testFactory;
 
-    @TestFactory @DisplayName("Entity Creation")
-    List<DynamicTest> generateTestsForCreation() {
-        return testFactory.generateTestsIncludeProgrammatic(
-                ChangeScenario.ENTITY_CREATION, this::given, this::verify);
-    }
-
-    @TestFactory @DisplayName("Entity Removal")
-    List<DynamicTest> generateTestsForRemoval() {
-        return testFactory.generateTestsIncludeProgrammatic(
-                ChangeScenario.ENTITY_REMOVAL, this::given, this::verify);
-    }
-
-    @TestFactory @DisplayName("Property Update")
-    List<DynamicTest> generateTestsForUpdate() {
-        return testFactory.generateTestsIncludeProgrammatic(
-                ChangeScenario.PROPERTY_UPDATE, this::given, this::verify);
-    }
-
-    @TestFactory @DisplayName("Action Execution")
-    List<DynamicTest> generateTestsForAction() {
-        return testFactory.generateTestsIncludeProgrammatic(
-                ChangeScenario.ACTION_INVOCATION, this::given, this::verify);
+    @Override
+    protected PublishingTestFactoryAbstract getTestFactory() {
+        return testFactory;
     }
 
 }
diff --git a/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/jpa/JpaCommandPublishingTest.java b/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/jpa/JpaCommandPublishingTest.java
index 96a1e42..e3041ce 100644
--- a/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/jpa/JpaCommandPublishingTest.java
+++ b/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/jpa/JpaCommandPublishingTest.java
@@ -18,21 +18,16 @@
  */
 package org.apache.isis.testdomain.publishing.jpa;
 
-import java.util.List;
-
 import javax.inject.Inject;
 
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.DynamicTest;
-import org.junit.jupiter.api.TestFactory;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.TestPropertySource;
 
 import org.apache.isis.core.config.presets.IsisPresets;
 import org.apache.isis.testdomain.conf.Configuration_usingJpa;
 import org.apache.isis.testdomain.publishing.CommandPublishingTestAbstract;
+import org.apache.isis.testdomain.publishing.PublishingTestFactoryAbstract;
 import org.apache.isis.testdomain.publishing.PublishingTestFactoryJpa;
-import org.apache.isis.testdomain.publishing.PublishingTestFactoryAbstract.ChangeScenario;
 import org.apache.isis.testdomain.publishing.conf.Configuration_usingCommandPublishing;
 
 @SpringBootTest(
@@ -57,29 +52,9 @@ implements HasPersistenceStandardJpa {
 
     @Inject private PublishingTestFactoryJpa testFactory;
 
-    @TestFactory @DisplayName("Entity Creation")
-    List<DynamicTest> generateTestsForCreation() {
-        return testFactory.generateTests(
-                ChangeScenario.ENTITY_CREATION, this::given, this::verify);
-    }
-
-    @TestFactory @DisplayName("Entity Removal")
-    List<DynamicTest> generateTestsForRemoval() {
-        return testFactory.generateTests(
-                ChangeScenario.ENTITY_REMOVAL, this::given, this::verify);
-    }
-
-    @TestFactory @DisplayName("Property Update")
-    List<DynamicTest> generateTestsForUpdate() {
-        return testFactory.generateTests(
-                ChangeScenario.PROPERTY_UPDATE, this::given, this::verify);
-    }
-
-    @TestFactory @DisplayName("Action Execution")
-    List<DynamicTest> generateTestsForAction() {
-        return testFactory.generateTests(
-                ChangeScenario.ACTION_INVOCATION, this::given, this::verify);
+    @Override
+    protected PublishingTestFactoryAbstract getTestFactory() {
+        return testFactory;
     }
 
-
 }
diff --git a/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/jpa/JpaEntityPublishingTest.java b/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/jpa/JpaEntityPublishingTest.java
index 525f03f..c0d6e01 100644
--- a/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/jpa/JpaEntityPublishingTest.java
+++ b/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/jpa/JpaEntityPublishingTest.java
@@ -18,22 +18,16 @@
  */
 package org.apache.isis.testdomain.publishing.jpa;
 
-import java.util.List;
-
 import javax.inject.Inject;
 
-import org.junit.jupiter.api.Disabled;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.DynamicTest;
-import org.junit.jupiter.api.TestFactory;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.TestPropertySource;
 
 import org.apache.isis.core.config.presets.IsisPresets;
 import org.apache.isis.testdomain.conf.Configuration_usingJpa;
 import org.apache.isis.testdomain.publishing.EntityPublishingTestAbstract;
+import org.apache.isis.testdomain.publishing.PublishingTestFactoryAbstract;
 import org.apache.isis.testdomain.publishing.PublishingTestFactoryJpa;
-import org.apache.isis.testdomain.publishing.PublishingTestFactoryAbstract.ChangeScenario;
 import org.apache.isis.testdomain.publishing.conf.Configuration_usingEntityChangesPublishing;
 
 @SpringBootTest(
@@ -57,32 +51,9 @@ implements HasPersistenceStandardJpa {
 
     @Inject private PublishingTestFactoryJpa testFactory;
 
-    @Disabled("'Entity Changes Tracking' currently not supported for JPA")
-    @TestFactory @DisplayName("Entity Creation - n/a")
-    List<DynamicTest> generateTestsForCreation() {
-        return testFactory.generateTestsIncludeProgrammatic(
-                ChangeScenario.ENTITY_CREATION, this::given, this::verify);
-    }
-
-    @Disabled("'Entity Changes Tracking' currently not supported for JPA")
-    @TestFactory @DisplayName("Entity Removal - n/a")
-    List<DynamicTest> generateTestsForRemoval() {
-        return testFactory.generateTestsIncludeProgrammatic(
-                ChangeScenario.ENTITY_REMOVAL, this::given, this::verify);
-    }
-
-    @Disabled("'Entity Changes Tracking' currently not supported for JPA")
-    @TestFactory @DisplayName("Property Update - n/a")
-    List<DynamicTest> generateTestsForUpdate() {
-        return testFactory.generateTestsIncludeProgrammatic(
-                ChangeScenario.PROPERTY_UPDATE, this::given, this::verify);
-    }
-
-    @Disabled("'Entity Changes Tracking' currently not supported for JPA")
-    @TestFactory @DisplayName("Action Execution - n/a")
-    List<DynamicTest> generateTestsForAction() {
-        return testFactory.generateTestsIncludeProgrammatic(
-                ChangeScenario.ACTION_INVOCATION, this::given, this::verify);
+    @Override
+    protected PublishingTestFactoryAbstract getTestFactory() {
+        return null; // Entity Changes Tracking' currently not supported for JPA
     }
 
 }
diff --git a/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/jpa/JpaExecutionPublishingTest.java b/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/jpa/JpaExecutionPublishingTest.java
index 8019255..95211d0 100644
--- a/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/jpa/JpaExecutionPublishingTest.java
+++ b/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/jpa/JpaExecutionPublishingTest.java
@@ -18,21 +18,16 @@
  */
 package org.apache.isis.testdomain.publishing.jpa;
 
-import java.util.List;
-
 import javax.inject.Inject;
 
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.DynamicTest;
-import org.junit.jupiter.api.TestFactory;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.TestPropertySource;
 
 import org.apache.isis.core.config.presets.IsisPresets;
 import org.apache.isis.testdomain.conf.Configuration_usingJpa;
 import org.apache.isis.testdomain.publishing.ExecutionPublishingTestAbstract;
+import org.apache.isis.testdomain.publishing.PublishingTestFactoryAbstract;
 import org.apache.isis.testdomain.publishing.PublishingTestFactoryJpa;
-import org.apache.isis.testdomain.publishing.PublishingTestFactoryAbstract.ChangeScenario;
 import org.apache.isis.testdomain.publishing.conf.Configuration_usingExecutionPublishing;
 
 @SpringBootTest(
@@ -57,28 +52,9 @@ implements HasPersistenceStandardJpa {
 
     @Inject private PublishingTestFactoryJpa testFactory;
 
-    @TestFactory @DisplayName("Entity Creation")
-    List<DynamicTest> generateTestsForCreation() {
-        return testFactory.generateTests(
-                ChangeScenario.ENTITY_CREATION, this::given, this::verify);
-    }
-
-    @TestFactory @DisplayName("Entity Removal")
-    List<DynamicTest> generateTestsForRemoval() {
-        return testFactory.generateTests(
-                ChangeScenario.ENTITY_REMOVAL, this::given, this::verify);
-    }
-
-    @TestFactory @DisplayName("Property Update")
-    List<DynamicTest> generateTestsForUpdate() {
-        return testFactory.generateTests(
-                ChangeScenario.PROPERTY_UPDATE, this::given, this::verify);
-    }
-
-    @TestFactory @DisplayName("Action Execution")
-    List<DynamicTest> generateTestsForAction() {
-        return testFactory.generateTests(
-                ChangeScenario.ACTION_INVOCATION, this::given, this::verify);
+    @Override
+    protected PublishingTestFactoryAbstract getTestFactory() {
+        return testFactory;
     }
 
 }
diff --git a/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/jpa/JpaPropertyPublishingTest.java b/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/jpa/JpaPropertyPublishingTest.java
index 564dfb4..1ba8f5b 100644
--- a/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/jpa/JpaPropertyPublishingTest.java
+++ b/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/publishing/jpa/JpaPropertyPublishingTest.java
@@ -18,14 +18,9 @@
  */
 package org.apache.isis.testdomain.publishing.jpa;
 
-import java.util.List;
-
 import javax.inject.Inject;
 
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.DynamicTest;
 import org.junit.jupiter.api.MethodOrderer;
-import org.junit.jupiter.api.TestFactory;
 import org.junit.jupiter.api.TestMethodOrder;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.TestPropertySource;
@@ -33,7 +28,7 @@ import org.springframework.test.context.TestPropertySource;
 import org.apache.isis.core.config.presets.IsisPresets;
 import org.apache.isis.testdomain.conf.Configuration_usingJpa;
 import org.apache.isis.testdomain.publishing.PropertyPublishingTestAbstract;
-import org.apache.isis.testdomain.publishing.PublishingTestFactoryAbstract.ChangeScenario;
+import org.apache.isis.testdomain.publishing.PublishingTestFactoryAbstract;
 import org.apache.isis.testdomain.publishing.PublishingTestFactoryJpa;
 import org.apache.isis.testdomain.publishing.conf.Configuration_usingEntityPropertyChangePublishing;
 
@@ -60,28 +55,9 @@ implements HasPersistenceStandardJpa {
 
     @Inject private PublishingTestFactoryJpa testFactory;
 
-    @TestFactory @DisplayName("Entity Creation")
-    List<DynamicTest> generateTestsForCreation() {
-        return testFactory.generateTestsIncludeProgrammatic(
-                ChangeScenario.ENTITY_CREATION, this::given, this::verify);
-    }
-
-    @TestFactory @DisplayName("Entity Removal")
-    List<DynamicTest> generateTestsForRemoval() {
-        return testFactory.generateTestsIncludeProgrammatic(
-                ChangeScenario.ENTITY_REMOVAL, this::given, this::verify);
-    }
-
-    @TestFactory @DisplayName("Property Update")
-    List<DynamicTest> generateTestsForUpdate() {
-        return testFactory.generateTestsIncludeProgrammatic(
-                ChangeScenario.PROPERTY_UPDATE, this::given, this::verify);
-    }
-
-    @TestFactory @DisplayName("Action Execution")
-    List<DynamicTest> generateTestsForAction() {
-        return testFactory.generateTestsIncludeProgrammatic(
-                ChangeScenario.ACTION_INVOCATION, this::given, this::verify);
+    @Override
+    protected PublishingTestFactoryAbstract getTestFactory() {
+        return testFactory;
     }
 
 }
diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/publishing/PublishingTestFactoryAbstract.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/publishing/PublishingTestFactoryAbstract.java
index dc24beb..6a6195b 100644
--- a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/publishing/PublishingTestFactoryAbstract.java
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/publishing/PublishingTestFactoryAbstract.java
@@ -65,11 +65,12 @@ public abstract class PublishingTestFactoryAbstract {
     /** what kind of entity change is under test */
     @RequiredArgsConstructor @Getter
     public static enum ChangeScenario {
-        ENTITY_CREATION("creation"),
-        PROPERTY_UPDATE("property update"),
-        ACTION_INVOCATION("action invocation"),
-        ENTITY_REMOVAL("removal");
+        ENTITY_CREATION("creation", true),
+        PROPERTY_UPDATE("property update", false),
+        ACTION_INVOCATION("action invocation", false),
+        ENTITY_REMOVAL("removal", true);
         final String displayName;
+        final boolean supportsProgrammatic;
     }
 
     @Value(staticConstructor = "of")
@@ -198,22 +199,8 @@ public abstract class PublishingTestFactoryAbstract {
 
     // -- CREATE DYNAMIC TESTS
 
-    public final List<DynamicTest> generateTestsIncludeProgrammatic(
-            final ChangeScenario changeScenario,
-            final Runnable given,
-            final BiConsumer<ChangeScenario, VerificationStage> verifier) {
-        return generateTests(changeScenario, true, given, verifier);
-    }
-
     public final List<DynamicTest> generateTests(
             final ChangeScenario changeScenario,
-            final Runnable given,
-            final BiConsumer<ChangeScenario, VerificationStage> verifier) {
-        return generateTests(changeScenario, false, given, verifier);
-    }
-
-    private final List<DynamicTest> generateTests(
-            final ChangeScenario changeScenario,
             final boolean includeProgrammatic,
             final Runnable given,
             final BiConsumer<ChangeScenario, VerificationStage> verifier) {