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 5a55f12  ISIS-2464: fix app layer test factory, such that auditing 
also works when directly (programmatically) changing entities
5a55f12 is described below

commit 5a55f1209073b439ef20f4befb4c5a01276b8d41
Author: Andi Huber <[email protected]>
AuthorDate: Thu Nov 19 22:02:20 2020 +0100

    ISIS-2464: fix app layer test factory, such that auditing also works
    when directly (programmatically) changing entities
---
 .../changetracking/ChangingEntitiesFactory.java    |  92 ++++++++++++---
 .../changetracking/EntityChangeTrackerDefault.java |  52 +++++----
 .../changetracking/SimpleChangingEntities.java     | 123 ++-------------------
 .../EntityChangeKindAuditingTest.java}             |   7 +-
 ...st.java => EntityPrePostValueAuditingTest.java} |   4 +-
 .../testdomain/applayer/command/CommandTest.java   |   4 +-
 .../applayer/ApplicationLayerTestFactory.java      |  21 ++--
 ...iguration_usingEntityPrePostValueAuditing.java} |   2 +-
 ...nfiguration_usingEntityChangeKindAuditing.java} |   2 +-
 .../entitychangetracking/ChangedObjectsTest.java   |   8 +-
 10 files changed, 141 insertions(+), 174 deletions(-)

diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/changetracking/ChangingEntitiesFactory.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/changetracking/ChangingEntitiesFactory.java
index a5b777b..a6d08c0 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/changetracking/ChangingEntitiesFactory.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/changetracking/ChangingEntitiesFactory.java
@@ -20,15 +20,26 @@ package 
org.apache.isis.core.runtime.persistence.changetracking;
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Objects;
+import java.util.UUID;
+
+import javax.annotation.Nullable;
 
 import org.apache.isis.applib.annotation.EntityChangeKind;
+import org.apache.isis.applib.jaxb.JavaSqlXMLGregorianCalendarMarshalling;
 import org.apache.isis.applib.services.clock.ClockService;
 import org.apache.isis.applib.services.iactn.Interaction;
 import org.apache.isis.applib.services.publish.ChangingEntities;
 import org.apache.isis.applib.services.user.UserService;
+import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.commons.internal.collections._Maps;
-import org.apache.isis.core.metamodel.facets.object.audit.AuditableFacet;
+import org.apache.isis.commons.internal.collections._Multimaps.ListMultimap;
+import org.apache.isis.core.metamodel.adapter.oid.RootOid;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
+import org.apache.isis.core.metamodel.spec.ManagedObjects;
+import org.apache.isis.schema.chg.v2.ChangesDto;
+import org.apache.isis.schema.chg.v2.ObjectsDto;
+import org.apache.isis.schema.common.v2.OidsDto;
 
 import lombok.RequiredArgsConstructor;
 import lombok.val;
@@ -39,6 +50,7 @@ class ChangingEntitiesFactory {
     private final ClockService clockService;
     private final UserService userService;
 
+    @Nullable
     public ChangingEntities createChangingEntities(
             final EntityChangeTrackerDefault entityChangeTracker) {
         
@@ -46,13 +58,10 @@ class ChangingEntitiesFactory {
         // creates further entities which would be enlisted; 
         // taking copy of the map avoids ConcurrentModificationException
 
-        val changeKindByPublishedAdapter =
-                _Maps.filterKeys(
-                        entityChangeTracker.getChangeKindByEnlistedAdapter(),
-                        this::isAuditingEnabled,
-                        HashMap::new);
+        val changeKindByEnlistedAdapter = new HashMap<>(
+                entityChangeTracker.getChangeKindByEnlistedAdapter());
 
-        if(changeKindByPublishedAdapter.isEmpty()) {
+        if(changeKindByEnlistedAdapter.isEmpty()) {
             return null;
         }
 
@@ -60,7 +69,7 @@ class ChangingEntitiesFactory {
                         entityChangeTracker.currentInteraction(),
                         entityChangeTracker.numberEntitiesLoaded(), 
                         
entityChangeTracker.numberAuditedEntityPropertiesModified(),
-                        changeKindByPublishedAdapter);
+                        changeKindByEnlistedAdapter);
         
         return changingEntities;
     }
@@ -71,23 +80,78 @@ class ChangingEntitiesFactory {
             final Interaction interaction,
             final int numberEntitiesLoaded,
             final int numberEntityPropertiesModified,
-            final Map<ManagedObject, EntityChangeKind> 
changeKindByPublishedAdapter) {
+            final Map<ManagedObject, EntityChangeKind> 
changeKindByEnlistedAdapter) {
 
         val uniqueId = interaction.getUniqueId();
         val userName = userService.getUser().getName();
-        val timestamp = clockService.nowAsJavaSqlTimestamp();
+        val completedAt = clockService.nowAsJavaSqlTimestamp();
         final int nextEventSequence = 
interaction.next(Interaction.Sequence.INTERACTION.id());
 
         return new SimpleChangingEntities(
                     uniqueId, nextEventSequence,
-                    userName, timestamp,
+                    userName, completedAt,
                     numberEntitiesLoaded, 
                     numberEntityPropertiesModified, 
-                    changeKindByPublishedAdapter);
+                    ()->newDto(
+                            uniqueId, nextEventSequence,
+                            userName, completedAt,
+                            numberEntitiesLoaded,         
+                            numberEntityPropertiesModified,
+                            changeKindByEnlistedAdapter));
+    }
+
+    private ChangesDto newDto(
+            final UUID uniqueId, final int nextEventSequence,
+            final String userName, final java.sql.Timestamp completedAt,
+            final int numberEntitiesLoaded,
+            final int numberEntityPropertiesModified,
+            final Map<ManagedObject, EntityChangeKind> 
changeKindByEnlistedAdapter) {
+        
+        // calculate the inverse of 'changesByAdapter'
+        final ListMultimap<EntityChangeKind, ManagedObject> adaptersByChange = 
+            _Maps.invertToListMultimap(changeKindByEnlistedAdapter);
+        
+        val objectsDto = new ObjectsDto();
+
+        objectsDto.setCreated(oidsDtoFor(adaptersByChange, 
EntityChangeKind.CREATE));
+        objectsDto.setUpdated(oidsDtoFor(adaptersByChange, 
EntityChangeKind.UPDATE));
+        objectsDto.setDeleted(oidsDtoFor(adaptersByChange, 
EntityChangeKind.DELETE));
+
+        objectsDto.setLoaded(numberEntitiesLoaded);
+        objectsDto.setPropertiesModified(numberEntityPropertiesModified);
+
+        val changesDto = new ChangesDto();
+
+        changesDto.setMajorVersion("2");
+        changesDto.setMinorVersion("0");
+
+        changesDto.setTransactionId(uniqueId.toString());
+        changesDto.setSequence(nextEventSequence);
+
+        changesDto.setUser(userName);
+        
changesDto.setCompletedAt(JavaSqlXMLGregorianCalendarMarshalling.toXMLGregorianCalendar(completedAt));
+
+        changesDto.setObjects(objectsDto);
+        return changesDto;
     }
 
-    private boolean isAuditingEnabled(ManagedObject objectAdapter) {
-        return 
AuditableFacet.isAuditingEnabled(objectAdapter.getSpecification());
+    private OidsDto oidsDtoFor(
+            final ListMultimap<EntityChangeKind, ManagedObject> 
adaptersByChange, 
+            final EntityChangeKind kind) {
+        val oidsDto = new OidsDto();
+
+        _NullSafe.stream(adaptersByChange.get(kind))
+        .map((final ManagedObject adapter) -> 
+            ManagedObjects.identify(adapter)
+            .map(RootOid::asOidDto)
+            .orElse(null)
+        )
+        .filter(Objects::nonNull)
+        .forEach(oidsDto.getOid()::add);
+        
+        return oidsDto;
     }
+
+
     
 }
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/changetracking/EntityChangeTrackerDefault.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/changetracking/EntityChangeTrackerDefault.java
index 459aadd..2dc9f4d 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/changetracking/EntityChangeTrackerDefault.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/changetracking/EntityChangeTrackerDefault.java
@@ -123,30 +123,30 @@ implements
     }
 
     private void enlistCreatedInternal(final @NonNull ManagedObject adapter) {
-        if(shouldIgnore(adapter)) {
+        if(!isEntityEnabledForAuditing(adapter)) {
             return;
         }
-        enlistForPublishing(adapter, EntityChangeKind.CREATE);
-        enlistForAuditing(adapter, 
aap->PreAndPostValues.pre(IsisTransactionPlaceholder.NEW));
+        enlistForChangeKindAuditing(adapter, EntityChangeKind.CREATE);
+        enlistForPreAndPostValueAuditing(adapter, 
aap->PreAndPostValues.pre(IsisTransactionPlaceholder.NEW));
     }
 
     private void enlistUpdatingInternal(final @NonNull ManagedObject adapter) {
-        if(shouldIgnore(adapter)) {
+        if(!isEntityEnabledForAuditing(adapter)) {
             return;
         }
-        enlistForPublishing(adapter, EntityChangeKind.UPDATE);
-        enlistForAuditing(adapter, 
aap->PreAndPostValues.pre(aap.getPropertyValue()));
+        enlistForChangeKindAuditing(adapter, EntityChangeKind.UPDATE);
+        enlistForPreAndPostValueAuditing(adapter, 
aap->PreAndPostValues.pre(aap.getPropertyValue()));
     }
 
     private void enlistDeletingInternal(final @NonNull ManagedObject adapter) {
-        if(shouldIgnore(adapter)) {
+        if(!isEntityEnabledForAuditing(adapter)) {
             return;
         }
-        final boolean enlisted = enlistForPublishing(adapter, 
EntityChangeKind.DELETE);
+        final boolean enlisted = enlistForChangeKindAuditing(adapter, 
EntityChangeKind.DELETE);
         if(!enlisted) {
             return;
         }
-        enlistForAuditing(adapter, 
aap->PreAndPostValues.pre(aap.getPropertyValue()));
+        enlistForPreAndPostValueAuditing(adapter, 
aap->PreAndPostValues.pre(aap.getPropertyValue()));
     }
 
 
@@ -157,9 +157,22 @@ implements
         return changedObjectPropertiesRef.get();
     }
 
-    private boolean shouldIgnore(final @NonNull ManagedObject adapter) {
+    private boolean isEntityEnabledForAuditing(final @NonNull ManagedObject 
adapter) {
+
+        if(changedObjectPropertiesRef.isMemoized()) {
+            throw _Exceptions.illegalState("Cannot enlist additional changes 
for auditing, "
+                    + "since changedObjectPropertiesRef was already prepared 
(memoized) for auditing.");
+        }
+        
         val spec = adapter.getSpecification();
-        return !spec.isEntity();
+        if(!spec.isEntity()) {
+            return false;
+        }
+        if(!AuditableFacet.isAuditingEnabled(spec)) {
+            return false; // ignore entities that are not enabled for auditing
+        }
+        
+        return true;
     }
 
     // end::refguide[]
@@ -172,7 +185,7 @@ implements
         switch (preCommitPhase) {
         case AUDITING:
             log.debug("about to dispatch audit entries and entity changes");
-            prepareAuditing();
+            prepareAuditDispatching();
             entityAuditDispatcher.dispatchEntityAudits(this);
             changingEntitiesDispatcher.dispatchChangingEntities(this);
             break;
@@ -187,7 +200,7 @@ implements
         }
     }
     
-    private void prepareAuditing() {
+    private void prepareAuditDispatching() {
         val command = currentInteraction().getCommand();
         command.updater().setSystemStateChanged(
                 command.isSystemStateChanged() 
@@ -212,7 +225,7 @@ implements
     /**
      * @return <code>true</code> if successfully enlisted, <code>false</code> 
if was already enlisted
      */
-    private boolean enlistForPublishing(
+    private boolean enlistForChangeKindAuditing(
             final @NonNull ManagedObject entity, 
             final @NonNull EntityChangeKind changeKind) {
         
@@ -247,18 +260,9 @@ implements
         return previousChangeKind == null;
     }
 
-    private void enlistForAuditing(
+    private void enlistForPreAndPostValueAuditing(
             final ManagedObject entity, 
             final Function<AdapterAndProperty, PreAndPostValues> pre) {
-        
-        if(changedObjectPropertiesRef.isMemoized()) {
-            throw _Exceptions.illegalState("Cannot enlist additional changes 
for auditing, "
-                    + "since changedObjectPropertiesRef was already prepared 
(memoized) for auditing.");
-        }
-        
-        if(!AuditableFacet.isAuditingEnabled(entity.getSpecification())) {
-            return; // ignore entities that are not enabled for auditing
-        }
 
         log.debug("enlist entity's property changes for auditing {}", entity);
 
diff --git 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/changetracking/SimpleChangingEntities.java
 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/changetracking/SimpleChangingEntities.java
index 547d863..0daff6b 100644
--- 
a/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/changetracking/SimpleChangingEntities.java
+++ 
b/core/runtime/src/main/java/org/apache/isis/core/runtime/persistence/changetracking/SimpleChangingEntities.java
@@ -20,29 +20,15 @@
 package org.apache.isis.core.runtime.persistence.changetracking;
 
 import java.sql.Timestamp;
-import java.util.Map;
-import java.util.Objects;
 import java.util.UUID;
+import java.util.function.Supplier;
 
-import org.apache.isis.applib.annotation.EntityChangeKind;
-import org.apache.isis.applib.annotation.Programmatic;
-import org.apache.isis.applib.jaxb.JavaSqlXMLGregorianCalendarMarshalling;
 import org.apache.isis.applib.services.RepresentsInteractionMemberExecution;
 import org.apache.isis.applib.services.publish.ChangingEntities;
-import org.apache.isis.commons.internal.base._Lazy;
-import org.apache.isis.commons.internal.base._NullSafe;
-import org.apache.isis.commons.internal.collections._Maps;
-import org.apache.isis.commons.internal.collections._Multimaps.ListMultimap;
-import org.apache.isis.core.metamodel.adapter.oid.RootOid;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
-import org.apache.isis.core.metamodel.spec.ManagedObjects;
 import org.apache.isis.schema.chg.v2.ChangesDto;
-import org.apache.isis.schema.chg.v2.ObjectsDto;
-import org.apache.isis.schema.common.v2.OidsDto;
 
 import lombok.NonNull;
 import lombok.ToString;
-import lombok.val;
 
 /**
  * Captures which objects were created, updated or deleted in the course of a 
transaction.
@@ -50,15 +36,14 @@ import lombok.val;
 @ToString
 class SimpleChangingEntities implements ChangingEntities, 
RepresentsInteractionMemberExecution {
 
-    // -- constructor, fields
     private UUID transactionUuid;
     private final int sequence;
     private final String userName;
     private final Timestamp completedAt;
     private final int numberEntitiesLoaded;
     private final int numberEntityPropertiesModified;
-    private final Map<ManagedObject, EntityChangeKind> changesByAdapter;
-
+    private final Supplier<ChangesDto> changesDtoSupplier;
+    
     public SimpleChangingEntities(
             final @NonNull UUID transactionUuid,
             final int sequence,
@@ -66,7 +51,7 @@ class SimpleChangingEntities implements ChangingEntities, 
RepresentsInteractionM
             final @NonNull Timestamp completedAt,
             final int numberEntitiesLoaded,
             final int numberEntityPropertiesModified,
-            final @NonNull Map<ManagedObject, EntityChangeKind> 
changesByAdapter) {
+            final @NonNull Supplier<ChangesDto> changesDtoSupplier) {
 
         this.transactionUuid = transactionUuid;
         this.sequence = sequence;
@@ -74,29 +59,22 @@ class SimpleChangingEntities implements ChangingEntities, 
RepresentsInteractionM
         this.completedAt = completedAt;
         this.numberEntitiesLoaded = numberEntitiesLoaded;
         this.numberEntityPropertiesModified = numberEntityPropertiesModified;
-        this.changesByAdapter = changesByAdapter;
-    }
-
-    // -- transactionId, sequence completedAt, user
-    @Programmatic
-    public UUID getTransactionId() {
-        return getUniqueId();
+        this.changesDtoSupplier = changesDtoSupplier;
     }
 
-    @Programmatic
     @Override
     public UUID getUniqueId() {
         return transactionUuid;
     }
 
-    @Programmatic
     @Override
     public int getSequence() {
         return sequence;
     }
 
     /**
-     * The date/time at which this set of enlisted objects was created (approx 
the completion time of the transaction).
+     * The date/time at which this set of enlisted objects was created 
+     * (approx the completion time of the transaction).
      */
     @Override
     public Timestamp getCompletedAt() {
@@ -108,21 +86,13 @@ class SimpleChangingEntities implements ChangingEntities, 
RepresentsInteractionM
         return userName;
     }
 
-
-    // -- dto
-    /**
-     * lazily computed
-     */
     private ChangesDto dto;
 
     @Override
     public ChangesDto getDto() {
-        return dto != null ? dto : (dto = newDto());
+        return dto != null ? dto : (dto = changesDtoSupplier.get());
     }
 
-
-    // -- numberLoaded, numberCreated, numberUpdated, numberDeleted, 
numberObjectPropertiesModified
-
     @Override
     public int getNumberLoaded() {
         return numberEntitiesLoaded;
@@ -130,17 +100,17 @@ class SimpleChangingEntities implements ChangingEntities, 
RepresentsInteractionM
 
     @Override
     public int getNumberCreated() {
-        return numAdaptersOfKind(EntityChangeKind.CREATE);
+        return getDto().getObjects().getCreated().getOid().size();
     }
 
     @Override
     public int getNumberUpdated() {
-        return numAdaptersOfKind(EntityChangeKind.UPDATE);
+        return getDto().getObjects().getUpdated().getOid().size();
     }
 
     @Override
     public int getNumberDeleted() {
-        return numAdaptersOfKind(EntityChangeKind.DELETE);
+        return getDto().getObjects().getDeleted().getOid().size();
     }
 
     @Override
@@ -148,75 +118,4 @@ class SimpleChangingEntities implements ChangingEntities, 
RepresentsInteractionM
         return numberEntityPropertiesModified;
     }
 
-    private int numAdaptersOfKind(final EntityChangeKind kind) {
-        return _NullSafe.size(adaptersByChange.get().get(kind));
-    }
-
-
-    /**
-     * Lazily calculate the inverse of 'changesByAdapter'
-     */
-    private _Lazy<ListMultimap<EntityChangeKind, ManagedObject>> 
adaptersByChange = 
-            _Lazy.of(this::initAdaptersByChange);
-
-    private ListMultimap<EntityChangeKind, ManagedObject> 
initAdaptersByChange(){
-        return _Maps.invertToListMultimap(changesByAdapter);
-    }
-
-    // -- newDto, newObjectsDto, newChangesDto
-
-    private ChangesDto newDto() {
-        final ObjectsDto objectsDto = newObjectsDto();
-        return newChangesDto(objectsDto);
-    }
-
-    protected ObjectsDto newObjectsDto() {
-
-        final ObjectsDto objectsDto = new ObjectsDto();
-
-        objectsDto.setCreated(oidsDtoFor(EntityChangeKind.CREATE));
-        objectsDto.setUpdated(oidsDtoFor(EntityChangeKind.UPDATE));
-        objectsDto.setDeleted(oidsDtoFor(EntityChangeKind.DELETE));
-
-        objectsDto.setLoaded(getNumberLoaded());
-        objectsDto.setPropertiesModified(getNumberPropertiesModified());
-
-        return objectsDto;
-    }
-
-    private OidsDto oidsDtoFor(final EntityChangeKind kind) {
-        val oidsDto = new OidsDto();
-
-        _NullSafe.stream(adaptersByChange.get().get(kind))
-        .map((final ManagedObject adapter) -> 
-            ManagedObjects.identify(adapter)
-            .map(RootOid::asOidDto)
-            .orElse(null)
-        )
-        .filter(Objects::nonNull)
-        .forEach(oidsDto.getOid()::add);
-        
-        return oidsDto;
-    }
-
-    protected ChangesDto newChangesDto(final ObjectsDto objectsDto) {
-        val changesDto = new ChangesDto();
-
-        changesDto.setMajorVersion("2");
-        changesDto.setMinorVersion("0");
-
-        changesDto.setTransactionId(transactionUuid.toString());
-        changesDto.setSequence(sequence);
-
-        changesDto.setUser(userName);
-        
changesDto.setCompletedAt(JavaSqlXMLGregorianCalendarMarshalling.toXMLGregorianCalendar(completedAt));
-
-        changesDto.setObjects(objectsDto);
-        return changesDto;
-    }
-
-
-
-
-
 }
diff --git 
a/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/applayer/publishing/PublisherServiceTest.java
 
b/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/applayer/auditing/EntityChangeKindAuditingTest.java
similarity index 93%
rename from 
regressiontests/incubating/src/test/java/org/apache/isis/testdomain/applayer/publishing/PublisherServiceTest.java
rename to 
regressiontests/incubating/src/test/java/org/apache/isis/testdomain/applayer/auditing/EntityChangeKindAuditingTest.java
index 8f0308f..d4698e6 100644
--- 
a/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/applayer/publishing/PublisherServiceTest.java
+++ 
b/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/applayer/auditing/EntityChangeKindAuditingTest.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.testdomain.applayer.publishing;
+package org.apache.isis.testdomain.applayer.auditing;
 
 import java.util.List;
 
@@ -33,6 +33,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 import org.apache.isis.core.config.presets.IsisPresets;
 import org.apache.isis.testdomain.applayer.ApplicationLayerTestFactory;
 import 
org.apache.isis.testdomain.applayer.ApplicationLayerTestFactory.VerificationStage;
+import 
org.apache.isis.testdomain.applayer.publishing.Configuration_usingEntityChangeKindAuditing;
 import org.apache.isis.testdomain.conf.Configuration_usingJdo;
 import org.apache.isis.testdomain.util.kv.KVStoreForTesting;
 import 
org.apache.isis.testing.integtestsupport.applib.IsisIntegrationTestAbstract;
@@ -47,7 +48,7 @@ import static 
org.apache.isis.testdomain.applayer.publishing.PublisherServiceFor
 @SpringBootTest(
         classes = {
                 Configuration_usingJdo.class,
-                Configuration_usingPublishing.class,
+                Configuration_usingEntityChangeKindAuditing.class,
                 ApplicationLayerTestFactory.class
         }, 
         properties = {
@@ -58,7 +59,7 @@ import static 
org.apache.isis.testdomain.applayer.publishing.PublisherServiceFor
 @TestPropertySource({
     IsisPresets.UseLog4j2Test
 })
-class PublisherServiceTest extends IsisIntegrationTestAbstract {
+class EntityChangeKindAuditingTest extends IsisIntegrationTestAbstract {
 
     @Inject private ApplicationLayerTestFactory testFactory;
     @Inject private KVStoreForTesting kvStore;
diff --git 
a/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/applayer/auditing/AuditerServiceTest.java
 
b/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/applayer/auditing/EntityPrePostValueAuditingTest.java
similarity index 95%
rename from 
regressiontests/incubating/src/test/java/org/apache/isis/testdomain/applayer/auditing/AuditerServiceTest.java
rename to 
regressiontests/incubating/src/test/java/org/apache/isis/testdomain/applayer/auditing/EntityPrePostValueAuditingTest.java
index 0889e0a..690c16c 100644
--- 
a/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/applayer/auditing/AuditerServiceTest.java
+++ 
b/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/applayer/auditing/EntityPrePostValueAuditingTest.java
@@ -44,7 +44,7 @@ import lombok.val;
 @SpringBootTest(
         classes = {
                 Configuration_usingJdo.class,
-                Configuration_usingAuditing.class,
+                Configuration_usingEntityPrePostValueAuditing.class,
                 ApplicationLayerTestFactory.class
         }, 
         properties = {
@@ -54,7 +54,7 @@ import lombok.val;
     IsisPresets.UseLog4j2Test
 })
 @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
-class AuditerServiceTest extends IsisIntegrationTestAbstract {
+class EntityPrePostValueAuditingTest extends IsisIntegrationTestAbstract {
 
     @Inject private ApplicationLayerTestFactory testFactory;
     @Inject private KVStoreForTesting kvStore;
diff --git 
a/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/applayer/command/CommandTest.java
 
b/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/applayer/command/CommandTest.java
index 41cea22..8dbec4f 100644
--- 
a/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/applayer/command/CommandTest.java
+++ 
b/regressiontests/incubating/src/test/java/org/apache/isis/testdomain/applayer/command/CommandTest.java
@@ -32,7 +32,7 @@ import org.apache.isis.applib.services.factory.FactoryService;
 import org.apache.isis.applib.services.repository.RepositoryService;
 import org.apache.isis.applib.services.wrapper.WrapperFactory;
 import org.apache.isis.core.config.presets.IsisPresets;
-import 
org.apache.isis.testdomain.applayer.auditing.Configuration_usingAuditing;
+import 
org.apache.isis.testdomain.applayer.auditing.Configuration_usingEntityPrePostValueAuditing;
 import org.apache.isis.testdomain.conf.Configuration_usingJdo;
 import org.apache.isis.testdomain.jdo.JdoInventoryManager;
 import org.apache.isis.testdomain.jdo.JdoTestDomainPersona;
@@ -45,7 +45,7 @@ import lombok.val;
 @SpringBootTest(
         classes = {
                 Configuration_usingJdo.class,
-                Configuration_usingAuditing.class
+                Configuration_usingEntityPrePostValueAuditing.class
         }, 
         properties = {
                 
"logging.level.org.apache.isis.testdomain.util.rest.KVStoreForTesting=DEBUG"
diff --git 
a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/applayer/ApplicationLayerTestFactory.java
 
b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/applayer/ApplicationLayerTestFactory.java
index 09f6339..cd66fd1 100644
--- 
a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/applayer/ApplicationLayerTestFactory.java
+++ 
b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/applayer/ApplicationLayerTestFactory.java
@@ -141,22 +141,21 @@ public class ApplicationLayerTestFactory {
 
             preAuditHook.setVerifier(verifier);
             
-            // when - direct change (circumventing the framework)
-            book.setName("Book #2");
-            repository.persist(book);
+            transactionService.executeWithinTransaction(()->{
+
+                // when - direct change (circumventing the framework)
+                book.setName("Book #2");
+                repository.persist(book);
+                
+            });
             
             preAuditHook.setVerifier(null);
 
-            // this test does not trigger publishing 
-            // because invocation happens directly rather than through the 
means of
-            // an implementation of ObjectMemberAbstract, which has the 
meta-data
-            // required to generate the associated CommandDTO
-
-            //TODO however, we should still be able to receive valid metrics 
-            // even though Commands don't have CommandDTOs
+            // This test does not trigger command or execution dispatching, 
however it does trigger
+            // auditing.
 
             // then
-            verifier.accept(VerificationStage.FAILURE_CASE);
+            verifier.accept(VerificationStage.POST_COMMIT);
         });
     }
     
diff --git 
a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/applayer/auditing/Configuration_usingAuditing.java
 
b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/applayer/auditing/Configuration_usingEntityPrePostValueAuditing.java
similarity index 94%
rename from 
regressiontests/stable/src/main/java/org/apache/isis/testdomain/applayer/auditing/Configuration_usingAuditing.java
rename to 
regressiontests/stable/src/main/java/org/apache/isis/testdomain/applayer/auditing/Configuration_usingEntityPrePostValueAuditing.java
index a32e24b..9ec9a17 100644
--- 
a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/applayer/auditing/Configuration_usingAuditing.java
+++ 
b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/applayer/auditing/Configuration_usingEntityPrePostValueAuditing.java
@@ -25,6 +25,6 @@ import org.springframework.context.annotation.Import;
 @Import({
     EntityAuditListenerForTesting.class
 })
-public class Configuration_usingAuditing {
+public class Configuration_usingEntityPrePostValueAuditing {
 
 }
diff --git 
a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/applayer/publishing/Configuration_usingPublishing.java
 
b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/applayer/publishing/Configuration_usingEntityChangeKindAuditing.java
similarity index 95%
rename from 
regressiontests/stable/src/main/java/org/apache/isis/testdomain/applayer/publishing/Configuration_usingPublishing.java
rename to 
regressiontests/stable/src/main/java/org/apache/isis/testdomain/applayer/publishing/Configuration_usingEntityChangeKindAuditing.java
index 20b0018..e819a21 100644
--- 
a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/applayer/publishing/Configuration_usingPublishing.java
+++ 
b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/applayer/publishing/Configuration_usingEntityChangeKindAuditing.java
@@ -28,6 +28,6 @@ import org.apache.isis.testdomain.util.kv.KVStoreForTesting;
     KVStoreForTesting.class,
     PublisherServiceForTesting.class
 })
-public class Configuration_usingPublishing {
+public class Configuration_usingEntityChangeKindAuditing {
 
 }
diff --git 
a/regressiontests/stable/src/test/java/org/apache/isis/testdomain/entitychangetracking/ChangedObjectsTest.java
 
b/regressiontests/stable/src/test/java/org/apache/isis/testdomain/entitychangetracking/ChangedObjectsTest.java
index f37f4d8..0905cc0 100644
--- 
a/regressiontests/stable/src/test/java/org/apache/isis/testdomain/entitychangetracking/ChangedObjectsTest.java
+++ 
b/regressiontests/stable/src/test/java/org/apache/isis/testdomain/entitychangetracking/ChangedObjectsTest.java
@@ -31,8 +31,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.core.config.presets.IsisPresets;
 import 
org.apache.isis.testdomain.applayer.auditing.EntityAuditListenerForTesting;
-import 
org.apache.isis.testdomain.applayer.auditing.Configuration_usingAuditing;
-import 
org.apache.isis.testdomain.applayer.publishing.Configuration_usingPublishing;
+import 
org.apache.isis.testdomain.applayer.auditing.Configuration_usingEntityPrePostValueAuditing;
+import 
org.apache.isis.testdomain.applayer.publishing.Configuration_usingEntityChangeKindAuditing;
 import org.apache.isis.testdomain.commons.InteractionBoundaryProbe;
 import org.apache.isis.testdomain.commons.InteractionTestAbstract;
 import org.apache.isis.testdomain.conf.Configuration_usingJdo;
@@ -47,8 +47,8 @@ import lombok.val;
 @SpringBootTest(
         classes = {
                 Configuration_usingJdo.class,
-                Configuration_usingAuditing.class,
-                Configuration_usingPublishing.class,
+                Configuration_usingEntityPrePostValueAuditing.class,
+                Configuration_usingEntityChangeKindAuditing.class,
                 InteractionBoundaryProbe.class,
         }, 
         properties = {

Reply via email to