protected void verify()

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));
        }
    }