From 3a923519f2cc204e070aff145ad3339b98429f42 Mon Sep 17 00:00:00 2001 From: Oliver Drotbohm Date: Mon, 24 Apr 2023 17:31:21 +0200 Subject: [PATCH] GH-185 - Allow verification of events after method invocation stimulus. --- .../springframework/modulith/test/Scenario.java | 12 ++++++++++++ .../modulith/test/ScenarioUnitTests.java | 14 ++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/spring-modulith-test/src/main/java/org/springframework/modulith/test/Scenario.java b/spring-modulith-test/src/main/java/org/springframework/modulith/test/Scenario.java index 311981af..aa3ff8b7 100644 --- a/spring-modulith-test/src/main/java/org/springframework/modulith/test/Scenario.java +++ b/spring-modulith-test/src/main/java/org/springframework/modulith/test/Scenario.java @@ -433,6 +433,18 @@ public class Scenario { consumer.accept(result.first(), result.second()); } + + /** + * Verifies the underlying {@link AssertablePublishedEvents}. + * + * @param events must not be {@literal null}. + */ + public void andVerifyEvents(Consumer events) { + + Assert.notNull(events, "Consumer must not be null!"); + + events.accept(Scenario.this.events); + } } public class EventResult { diff --git a/spring-modulith-test/src/test/java/org/springframework/modulith/test/ScenarioUnitTests.java b/spring-modulith-test/src/test/java/org/springframework/modulith/test/ScenarioUnitTests.java index 890d51eb..1a90cfc2 100644 --- a/spring-modulith-test/src/test/java/org/springframework/modulith/test/ScenarioUnitTests.java +++ b/spring-modulith-test/src/test/java/org/springframework/modulith/test/ScenarioUnitTests.java @@ -382,6 +382,20 @@ class ScenarioUnitTests { assertThat(specialCustomizer.invoked).isFalse(); } + @Test // GH-185 + @SuppressWarnings("unchecked") + void invokesEventVerificationOnMethodInvocationStimulus() { + + Consumer consumer = mock(Consumer.class); + + new Scenario(tx, publisher, new DefaultAssertablePublishedEvents()) + .stimulate(() -> {}) + .andWaitForStateChange(() -> true) + .andVerifyEvents(consumer); + + verify(consumer).accept(any()); + } + private Fixture givenAScenario(Consumer consumer) { return new Fixture(consumer, DELAY, null, new DefaultAssertablePublishedEvents()); }