DATACMNS-1067 - Polishing.
Revert change to only invoke cleanup method if events have been exposed. We now again invoke the cleanup method for every aggregate. Changed the publication of events from the aggregate instances that were handed into the method to the ones the save method returns as the save call might return different object instances. Cleanups in the unit tests. Moved newly introduced methods to the bottom of the test case class. Extracted method to set up mock method invocation. Original pull request: #216.
This commit is contained in:
@@ -52,7 +52,7 @@ import org.springframework.data.repository.core.support.EventPublishingRepositor
|
||||
* @author Yuki Yoshida
|
||||
* @soundtrack Henrik Freischlader Trio - Nobody Else To Blame (Openness)
|
||||
*/
|
||||
@RunWith(MockitoJUnitRunner.class)
|
||||
@RunWith(MockitoJUnitRunner.Silent.class)
|
||||
public class EventPublishingRepositoryProxyPostProcessorUnitTests {
|
||||
|
||||
@Mock ApplicationEventPublisher publisher;
|
||||
@@ -102,40 +102,6 @@ public class EventPublishingRepositoryProxyPostProcessorUnitTests {
|
||||
verify(publisher, times(0)).publishEvent(any());
|
||||
}
|
||||
|
||||
@Test // DATACMNS-1067
|
||||
public void clearEventsDoesNotExposedByEntity() {
|
||||
|
||||
EventsWithClearing entity = spy(EventsWithClearing.of(Collections.emptyList()));
|
||||
|
||||
EventPublishingMethod.of(EventsWithClearing.class).publishEventsFrom(entity, publisher);
|
||||
|
||||
verify(entity, times(0)).clearDomainEvents();
|
||||
}
|
||||
|
||||
@Test // DATACMNS-1067
|
||||
public void clearEventsExposedByEntity() {
|
||||
|
||||
EventsWithClearing entity = spy(EventsWithClearing.of(Collections.singletonList(new SomeEvent())));
|
||||
|
||||
EventPublishingMethod.of(EventsWithClearing.class).publishEventsFrom(entity, publisher);
|
||||
|
||||
verify(entity, times(1)).clearDomainEvents();
|
||||
}
|
||||
|
||||
@Test // DATACMNS-1067
|
||||
public void clearEventsExposedByEntities() {
|
||||
|
||||
EventsWithClearing firstEntity = spy(EventsWithClearing.of(Collections.emptyList()));
|
||||
EventsWithClearing secondEntity = spy(EventsWithClearing.of(Collections.singletonList(new SomeEvent())));
|
||||
|
||||
Collection<EventsWithClearing> entities = Arrays.asList(firstEntity, secondEntity);
|
||||
|
||||
EventPublishingMethod.of(EventsWithClearing.class).publishEventsFrom(entities, publisher);
|
||||
|
||||
verify(firstEntity, times(0)).clearDomainEvents();
|
||||
verify(secondEntity, times(1)).clearDomainEvents();
|
||||
}
|
||||
|
||||
@Test // DATACMNS-928
|
||||
public void doesNotCreatePublishingMethodIfNoAnnotationDetected() {
|
||||
assertThat(EventPublishingMethod.of(Object.class)).isNull();
|
||||
@@ -144,11 +110,9 @@ public class EventPublishingRepositoryProxyPostProcessorUnitTests {
|
||||
@Test // DATACMNS-928
|
||||
public void interceptsSaveMethod() throws Throwable {
|
||||
|
||||
doReturn(SampleRepository.class.getMethod("save", Object.class)).when(invocation).getMethod();
|
||||
|
||||
SomeEvent event = new SomeEvent();
|
||||
MultipleEvents sample = MultipleEvents.of(Collections.singletonList(event));
|
||||
doReturn(new Object[] { sample }).when(invocation).getArguments();
|
||||
mockInvocation(invocation, SampleRepository.class.getMethod("save", Object.class), sample);
|
||||
|
||||
EventPublishingMethodInterceptor//
|
||||
.of(EventPublishingMethod.of(MultipleEvents.class), publisher)//
|
||||
@@ -200,9 +164,7 @@ public class EventPublishingRepositoryProxyPostProcessorUnitTests {
|
||||
|
||||
SomeEvent event = new SomeEvent();
|
||||
MultipleEvents sample = MultipleEvents.of(Collections.singletonList(event));
|
||||
doReturn(new Object[] { Collections.singletonList(sample) }).when(invocation).getArguments();
|
||||
|
||||
doReturn(SampleRepository.class.getMethod("saveAll", Iterable.class)).when(invocation).getMethod();
|
||||
mockInvocation(invocation, SampleRepository.class.getMethod("saveAll", Iterable.class), sample);
|
||||
|
||||
EventPublishingMethodInterceptor//
|
||||
.of(EventPublishingMethod.of(MultipleEvents.class), publisher)//
|
||||
@@ -228,12 +190,9 @@ public class EventPublishingRepositoryProxyPostProcessorUnitTests {
|
||||
@Test // DATACMNS-1113
|
||||
public void invokesEventsForMethodsThatStartsWithSave() throws Throwable {
|
||||
|
||||
Method method = SampleRepository.class.getMethod("saveAndFlush", MultipleEvents.class);
|
||||
doReturn(method).when(invocation).getMethod();
|
||||
|
||||
SomeEvent event = new SomeEvent();
|
||||
MultipleEvents sample = MultipleEvents.of(Collections.singletonList(event));
|
||||
doReturn(new Object[] { sample }).when(invocation).getArguments();
|
||||
mockInvocation(invocation, SampleRepository.class.getMethod("saveAndFlush", MultipleEvents.class), sample);
|
||||
|
||||
EventPublishingMethodInterceptor//
|
||||
.of(EventPublishingMethod.of(MultipleEvents.class), publisher)//
|
||||
@@ -242,6 +201,48 @@ public class EventPublishingRepositoryProxyPostProcessorUnitTests {
|
||||
verify(publisher).publishEvent(event);
|
||||
}
|
||||
|
||||
@Test // DATACMNS-1067
|
||||
public void clearsEventsEvenIfNoneWereExposedToPublish() {
|
||||
|
||||
EventsWithClearing entity = spy(EventsWithClearing.of(Collections.emptyList()));
|
||||
|
||||
EventPublishingMethod.of(EventsWithClearing.class).publishEventsFrom(entity, publisher);
|
||||
|
||||
verify(entity, times(1)).clearDomainEvents();
|
||||
}
|
||||
|
||||
@Test // DATACMNS-1067
|
||||
public void clearsEventsIfThereWereSomeToBePublished() {
|
||||
|
||||
EventsWithClearing entity = spy(EventsWithClearing.of(Collections.singletonList(new SomeEvent())));
|
||||
|
||||
EventPublishingMethod.of(EventsWithClearing.class).publishEventsFrom(entity, publisher);
|
||||
|
||||
verify(entity, times(1)).clearDomainEvents();
|
||||
}
|
||||
|
||||
@Test // DATACMNS-1067
|
||||
public void clearsEventsForOperationOnMutlipleAggregates() {
|
||||
|
||||
EventsWithClearing firstEntity = spy(EventsWithClearing.of(Collections.emptyList()));
|
||||
EventsWithClearing secondEntity = spy(EventsWithClearing.of(Collections.singletonList(new SomeEvent())));
|
||||
|
||||
Collection<EventsWithClearing> entities = Arrays.asList(firstEntity, secondEntity);
|
||||
|
||||
EventPublishingMethod.of(EventsWithClearing.class).publishEventsFrom(entities, publisher);
|
||||
|
||||
verify(firstEntity, times(1)).clearDomainEvents();
|
||||
verify(secondEntity, times(1)).clearDomainEvents();
|
||||
}
|
||||
|
||||
private static void mockInvocation(MethodInvocation invocation, Method method, Object parameterAndReturnValue)
|
||||
throws Throwable {
|
||||
|
||||
doReturn(method).when(invocation).getMethod();
|
||||
doReturn(new Object[] { parameterAndReturnValue }).when(invocation).getArguments();
|
||||
doReturn(parameterAndReturnValue).when(invocation).proceed();
|
||||
}
|
||||
|
||||
@Value(staticConstructor = "of")
|
||||
static class MultipleEvents {
|
||||
@Getter(onMethod = @__(@DomainEvents)) Collection<? extends Object> events;
|
||||
|
||||
Reference in New Issue
Block a user