in regressiontests/stable/src/main/java/org/apache/causeway/testdomain/publishing/stubs/LifecycleEventPublishingTestAbstract.java [60:214]
protected void verify(
final ChangeScenario changeScenario,
final VerificationStage verificationStage) {
val defaultSample = BookDto.sample();
val bookSamplesForCreate = Can.of(
defaultSample,
BookDto.builder().build()); // empty-defaults
val bookSample1 = Can.of( // initial
defaultSample);
val bookSample2 = Can.of( // after property update
defaultSample.asBuilder()
.name("Book #2")
.build());
val bookSample3 = Can.of( // after action invocation
defaultSample.asBuilder()
.price(defaultSample.getPrice()*2.)
.build());
switch(verificationStage) {
case FAILURE_CASE:
assertHasCreatedLifecycleEvents(Can.empty());
assertHasLoadedLifecycleEvents(Can.empty());
assertHasPersistingLifecycleEvents(Can.empty());
assertHasPersistedLifecycleEvents(Can.empty());
assertHasUpdatingLifecycleEvents(Can.empty());
assertHasUpdatedLifecycleEvents(Can.empty());
assertHasRemovingLifecycleEvents(Can.empty());
return;
case PRE_COMMIT:
switch(changeScenario) {
case ENTITY_CREATION:
//TODO what is there to verify?
return;
case ENTITY_PERSISTING:
assertHasPersistingLifecycleEvents(bookSample1);
//assertHasPersistedLifecycleEvents(Can.empty()); //TODO what is expected empty or not?
return;
case ENTITY_LOADING:
//TODO what is there to verify?
return;
case PROPERTY_UPDATE: // update the book's name -> "Book #2"
//XXX if we want to trigger callback events before PRE_COMMIT then changes need to be flushed .eg
//val em = jpaSupport.getEntityManagerElseFail(JpaBook.class);
//em.flush(); // in effect makes changes visible during PRE_COMMIT
//assertHasUpdatingLifecycleEvents(bookSample2);
//assertHasUpdatedLifecycleEvents(Can.empty()); //XXX only empty if not flushed
return;
case ACTION_INVOCATION: // double the book's price action -> 198.0
//assertHasUpdatingLifecycleEvents(bookSample3); //XXX only populated if flushed
//assertHasUpdatedLifecycleEvents(Can.empty()); //XXX only empty if not flushed
return;
case ENTITY_REMOVAL:
assertHasRemovingLifecycleEvents(bookSample1);
return;
default:
throw _Exceptions.unmatchedCase(changeScenario);
}
case POST_INTERACTION:
case POST_COMMIT:
switch(changeScenario) {
case ENTITY_CREATION:
assertHasCreatedLifecycleEvents(bookSamplesForCreate);
assertHasLoadedLifecycleEvents(Can.empty());
assertHasPersistingLifecycleEvents(Can.empty());
assertHasPersistedLifecycleEvents(Can.empty());
assertHasUpdatingLifecycleEvents(Can.empty());
assertHasUpdatedLifecycleEvents(Can.empty());
assertHasRemovingLifecycleEvents(Can.empty());
return;
case ENTITY_PERSISTING:
assertHasCreatedLifecycleEvents(Can.empty()); // creation events are deliberately not triggered for this test
assertHasLoadedLifecycleEvents(Can.empty());
assertHasPersistingLifecycleEvents(bookSample1);
assertHasPersistedLifecycleEvents(bookSample1);
assertHasUpdatingLifecycleEvents(Can.empty());
assertHasUpdatedLifecycleEvents(Can.empty());
assertHasRemovingLifecycleEvents(Can.empty());
return;
case ENTITY_LOADING:
assertHasCreatedLifecycleEvents(Can.empty());
assertHasLoadedLifecycleEvents(bookSample1);
assertHasPersistingLifecycleEvents(Can.empty());
assertHasPersistedLifecycleEvents(Can.empty());
assertHasUpdatingLifecycleEvents(Can.empty());
assertHasUpdatedLifecycleEvents(Can.empty());
assertHasRemovingLifecycleEvents(Can.empty());
return;
case PROPERTY_UPDATE: // update the book's name -> "Book #2"
assertHasCreatedLifecycleEvents(Can.empty());
assertHasLoadedLifecycleEvents(Can.empty());
assertHasPersistingLifecycleEvents(Can.empty());
assertHasPersistedLifecycleEvents(Can.empty());
assertHasUpdatingLifecycleEvents(bookSample2);
assertHasUpdatedLifecycleEvents(bookSample2);
assertHasRemovingLifecycleEvents(Can.empty());
return;
case ACTION_INVOCATION: // double the book's price action -> 198.0
assertHasCreatedLifecycleEvents(Can.empty());
assertHasLoadedLifecycleEvents(Can.empty());
assertHasPersistingLifecycleEvents(Can.empty());
assertHasPersistedLifecycleEvents(Can.empty());
assertHasUpdatingLifecycleEvents(bookSample3);
assertHasUpdatedLifecycleEvents(bookSample3);
assertHasRemovingLifecycleEvents(Can.empty());
return;
case ENTITY_REMOVAL:
assertHasCreatedLifecycleEvents(Can.empty());
assertHasLoadedLifecycleEvents(Can.empty());
assertHasPersistingLifecycleEvents(Can.empty());
assertHasPersistedLifecycleEvents(Can.empty());
assertHasUpdatingLifecycleEvents(Can.empty());
assertHasUpdatedLifecycleEvents(Can.empty());
assertHasRemovingLifecycleEvents(bookSample1);
return;
default:
throw _Exceptions.unmatchedCase(changeScenario);
}
default:
// 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));
}
}