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 = {