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/26 07:52:42 UTC

[isis] branch master updated: ISIS-2573: publishing tests: fail on missed verification stage

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 37be632  ISIS-2573: publishing tests: fail on missed verification stage
37be632 is described below

commit 37be632a8a4bb8e1203935dc821e8cd11ce7172b
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon Jul 26 09:52:33 2021 +0200

    ISIS-2573: publishing tests: fail on missed verification stage
---
 .../publishing/CommandPublishingTestAbstract.java  |  8 +-
 .../publishing/EntityPublishingTestAbstract.java   | 10 ++-
 .../ExecutionPublishingTestAbstract.java           |  8 +-
 .../publishing/PropertyPublishingTestAbstract.java | 11 ++-
 .../publishing/PublishingTestFactoryAbstract.java  | 95 +++++++++++++---------
 5 files changed, 82 insertions(+), 50 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 a355f78..47d3308 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
@@ -23,6 +23,8 @@ import java.util.UUID;
 
 import javax.inject.Inject;
 
+import static org.junit.jupiter.api.Assertions.fail;
+
 import org.apache.isis.applib.services.command.Command;
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.schema.cmd.v2.CommandDto;
@@ -49,7 +51,10 @@ implements HasPersistenceStandard {
         case FAILURE_CASE:
             assertHasCommandEntries(Can.empty());
             break;
+        case PRE_COMMIT:
         case POST_INTERACTION:
+            break;
+        case POST_COMMIT:
 
 
 //            Interaction interaction = null;
@@ -73,7 +78,8 @@ implements HasPersistenceStandard {
             assertHasCommandEntries(Can.of(command));
             break;
         default:
-            // ignore ... no checks
+            // if hitting this, the caller is requesting a verification stage, we are providing no case for
+            fail(String.format("internal error, stage not verified: %s", 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 a4fa00c..346296e 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
@@ -21,6 +21,7 @@ package org.apache.isis.testdomain.publishing;
 import javax.inject.Inject;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.fail;
 
 import org.apache.isis.testdomain.publishing.PublishingTestFactoryAbstract.VerificationStage;
 import org.apache.isis.testdomain.util.kv.KVStoreForTesting;
@@ -43,8 +44,6 @@ implements HasPersistenceStandard {
 
     protected void verify(final VerificationStage verificationStage) {
         switch(verificationStage) {
-        case PRE_COMMIT:
-            break;
         case FAILURE_CASE:
             assertEquals(0, getCreated(kvStore));
             assertEquals(0, getDeleted(kvStore));
@@ -52,7 +51,9 @@ implements HasPersistenceStandard {
             assertEquals(0, getUpdated(kvStore));
             assertEquals(0, getModified(kvStore));
             break;
-        case POST_COMMIT_WHEN_PROGRAMMATIC:
+        case PRE_COMMIT:
+        case POST_INTERACTION:
+            break;
         case POST_COMMIT:
             assertEquals(0, getCreated(kvStore));
             assertEquals(0, getDeleted(kvStore));
@@ -61,7 +62,8 @@ implements HasPersistenceStandard {
             //assertEquals(1, getModified(kvStore)); // not reproducible
             break;
         default:
-            // ignore ... no checks
+            // if hitting this, the caller is requesting a verification stage, we are providing no case for
+            fail(String.format("internal error, stage not verified: %s", 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 21b4968..ceed131 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
@@ -22,6 +22,8 @@ import java.util.Objects;
 
 import javax.inject.Inject;
 
+import static org.junit.jupiter.api.Assertions.fail;
+
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.id.LogicalType;
 import org.apache.isis.applib.services.iactn.ActionInvocation;
@@ -54,6 +56,9 @@ implements HasPersistenceStandard {
         case FAILURE_CASE:
             assertHasExecutionEntries(Can.empty());
             break;
+        case PRE_COMMIT:
+        case POST_INTERACTION:
+            break;
         case POST_COMMIT:
             val bookClass = bookClass();
             Interaction interaction = null;
@@ -69,7 +74,8 @@ implements HasPersistenceStandard {
                     ));
             break;
         default:
-            // ignore ... no checks
+            // if hitting this, the caller is requesting a verification stage, we are providing no case for
+            fail(String.format("internal error, stage not verified: %s", 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 3a9ddaf..65d1189 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
@@ -20,6 +20,8 @@ package org.apache.isis.testdomain.publishing;
 
 import javax.inject.Inject;
 
+import static org.junit.jupiter.api.Assertions.fail;
+
 import org.apache.isis.commons.collections.Can;
 import org.apache.isis.testdomain.publishing.PublishingTestFactoryAbstract.VerificationStage;
 import org.apache.isis.testdomain.publishing.subscriber.EntityPropertyChangeSubscriberForTesting;
@@ -39,18 +41,19 @@ implements HasPersistenceStandard {
 
     protected void verify(final VerificationStage verificationStage) {
         switch(verificationStage) {
-        case PRE_COMMIT:
-            break;
         case FAILURE_CASE:
             assertHasPropertyChangeEntries(Can.empty());
             break;
-        case POST_COMMIT_WHEN_PROGRAMMATIC:
+        case PRE_COMMIT:
+        case POST_INTERACTION:
+            break;
         case POST_COMMIT:
             assertHasPropertyChangeEntries(Can.of(
                     formatPersistenceStandardSpecificCapitalize("%s Product/name: 'Sample Book' -> 'Book #2'")));
             break;
         default:
-            // ignore ... no checks
+            // if hitting this, the caller is requesting a verification stage, we are providing no case for
+            fail(String.format("internal error, stage not verified: %s", verificationStage));
         }
     }
 
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 88545bd..b8e9e00 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
@@ -57,10 +57,8 @@ public abstract class PublishingTestFactoryAbstract {
     public static enum VerificationStage {
         PRE_COMMIT,
         POST_COMMIT,
-        POST_COMMIT_WHEN_PROGRAMMATIC,
         FAILURE_CASE,
         POST_INTERACTION,
-        POST_INTERACTION_WHEN_PROGRAMMATIC,
     }
 
     @Value(staticConstructor = "of")
@@ -80,6 +78,7 @@ public abstract class PublishingTestFactoryAbstract {
             }
         }
 
+        private final @NonNull String displayName;
         private final @NonNull Runnable given;
         private final @NonNull Consumer<VerificationStage> verifier;
         private final @NonNull VerificationStage transactionCompletionStage;
@@ -200,24 +199,29 @@ public abstract class PublishingTestFactoryAbstract {
 
         var dynamicTests = Can.<DynamicTest>of(
 
-                publishingTest("Interaction Api",
-                        PublishingTestContext.of(given, verifier, VerificationStage.POST_COMMIT),
+                publishingTest(
+                        PublishingTestContext.of("Interaction Api",
+                                given, verifier, VerificationStage.POST_COMMIT),
                         VerificationStage.POST_INTERACTION,
                         this::interactionApiExecution),
-                publishingTest("Wrapper Sync w/o Rules",
-                        PublishingTestContext.of(given, verifier, VerificationStage.POST_COMMIT),
+                publishingTest(
+                        PublishingTestContext.of("Wrapper Sync w/o Rules",
+                                given, verifier, VerificationStage.POST_COMMIT),
                         VerificationStage.POST_INTERACTION,
                         this::wrapperSyncExecutionNoRules),
-//                publishingTest("Wrapper Async w/o Rules",
-//                        PublishingTestContext.of(given, verifier, VerificationStage.POST_COMMIT),
+//                publishingTest(
+//                        PublishingTestContext.of("Wrapper Async w/o Rules",
+//                              given, verifier, VerificationStage.POST_COMMIT),
 //                        VerificationStage.POST_INTERACTION,
 //                        this::wrapperAsyncExecutionNoRules),
-                publishingTest("Wrapper Sync w/ Rules (expected to fail w/ DisabledException)",
-                        PublishingTestContext.of(given, verifier, VerificationStage.FAILURE_CASE),
+                publishingTest(
+                        PublishingTestContext.of("Wrapper Sync w/ Rules (expected to fail w/ DisabledException)",
+                                given, verifier, VerificationStage.FAILURE_CASE),
                         VerificationStage.POST_INTERACTION,
                         this::wrapperSyncExecutionWithFailure),
-                publishingTest("Wrapper Async w/ Rules (expected to fail w/ DisabledException)",
-                        PublishingTestContext.of(given, verifier, VerificationStage.FAILURE_CASE),
+                publishingTest(
+                        PublishingTestContext.of("Wrapper Async w/ Rules (expected to fail w/ DisabledException)",
+                                given, verifier, VerificationStage.FAILURE_CASE),
                         VerificationStage.POST_INTERACTION,
                         this::wrapperAsyncExecutionWithFailure)
                 );
@@ -225,9 +229,10 @@ public abstract class PublishingTestFactoryAbstract {
         if(includeProgrammatic) {
             // prepend
             dynamicTests = dynamicTests.add(0,
-                publishingTest("Programmatic",
-                        PublishingTestContext.of(given, verifier, VerificationStage.POST_COMMIT_WHEN_PROGRAMMATIC),
-                        VerificationStage.POST_INTERACTION_WHEN_PROGRAMMATIC,
+                publishingTest(
+                        PublishingTestContext.of("Programmatic",
+                                given, verifier, VerificationStage.POST_COMMIT),
+                        VerificationStage.POST_INTERACTION,
                         this::programmaticExecution));
         }
 
@@ -269,46 +274,56 @@ public abstract class PublishingTestFactoryAbstract {
     // -- HELPER
 
     private final DynamicTest publishingTest(
-            final String displayName,
             final PublishingTestContext testContext,
             final VerificationStage onSuccess,
             final PublishingTestRunner testRunner) {
 
-        return dynamicTest(displayName, ()->{
+        return dynamicTest(testContext.getDisplayName(), ()->{
+
+            val traceLog = testContext.getTraceLog();
+            val displayName = testContext.getDisplayName();
 
             xrayAddTest(displayName);
 
-            assertFalse(getInteractionService().isInInteraction());
-            assert_no_initial_tx_context();
+            traceLog.log("0. enter test %s", displayName);
+
+            try {
 
-            getInteractionService().runAnonymous(()->{
-                val currentInteraction = getInteractionService().currentInteraction();
-                xrayEnterInteraction(currentInteraction);
-                setupEntity(testContext);
-                xrayExitInteraction();
-            });
+                assertFalse(getInteractionService().isInInteraction());
+                assert_no_initial_tx_context();
 
-            assertFalse(getInteractionService().isInInteraction());
-            assert_no_initial_tx_context();
+                getInteractionService().runAnonymous(()->{
+                    val currentInteraction = getInteractionService().currentInteraction();
+                    xrayEnterInteraction(currentInteraction);
+                    setupEntity(testContext);
+                    xrayExitInteraction();
+                });
 
-            final boolean isExpectedToRunSuccesful = getInteractionService().callAnonymous(()->{
-                val currentInteraction = getInteractionService().currentInteraction();
-                xrayEnterInteraction(currentInteraction);
-                val result = testRunner.run(testContext);
-                xrayExitInteraction();
-                return result;
-            });
+                assertFalse(getInteractionService().isInInteraction());
+                assert_no_initial_tx_context();
 
-            getInteractionService().closeInteractionLayers();
+                final boolean isExpectedToRunSuccesful = getInteractionService().callAnonymous(()->{
+                    val currentInteraction = getInteractionService().currentInteraction();
+                    xrayEnterInteraction(currentInteraction);
+                    val result = testRunner.run(testContext);
+                    xrayExitInteraction();
+                    return result;
+                });
 
-            assertFalse(getInteractionService().isInInteraction());
-            assert_no_initial_tx_context();
+                getInteractionService().closeInteractionLayers();
 
-            failWhenContextHasErrors(testContext);
+                assertFalse(getInteractionService().isInInteraction());
+                assert_no_initial_tx_context();
 
-            if(isExpectedToRunSuccesful) {
-                testContext.runVerify(onSuccess);
                 failWhenContextHasErrors(testContext);
+
+                if(isExpectedToRunSuccesful) {
+                    testContext.runVerify(onSuccess);
+                    failWhenContextHasErrors(testContext);
+                }
+
+            } finally {
+                traceLog.log("5. exit test %s", displayName);
             }
 
         });