@Test @DirtiesContext @SuppressWarnings({"unchecked", "OptionalGetWithoutIsPresent"}) public void testStoreAndLoadEventsWithUpcaster() { EventUpcaster mockUpcasterChain = mock(EventUpcaster.class); when(mockUpcasterChain.upcast(isA(Stream.class))).thenAnswer(invocation -> { Stream<?> inputStream = (Stream) invocation.getArguments()[0]; return inputStream.flatMap(e -> Stream.of(e, e)); }); testSubject = createEngine(mockUpcasterChain); testSubject.appendEvents(createEvents(4)); List<DomainEventMessage> upcastedEvents = testSubject.readEvents(AGGREGATE).asStream().collect(toList()); assertEquals(8, upcastedEvents.size()); Iterator<DomainEventMessage> iterator = upcastedEvents.iterator(); while (iterator.hasNext()) { DomainEventMessage event1 = iterator.next(), event2 = iterator.next(); assertEquals(event1.getAggregateIdentifier(), event2.getAggregateIdentifier()); assertEquals(event1.getSequenceNumber(), event2.getSequenceNumber()); assertEquals(event1.getPayload(), event2.getPayload()); assertEquals(event1.getMetaData(), event2.getMetaData()); } }