use of uk.gov.justice.services.core.aggregate.exception.AggregateChangeDetectedException in project microservice_framework by CJSCommonPlatform.
the class SnapshotAwareAggregateServiceTest method shouldRebuildAggregateOnModelChange.
@Test
public void shouldRebuildAggregateOnModelChange() throws AggregateChangeDetectedException {
defaultAggregateService.logger = logger;
defaultAggregateService.jsonObjectToObjectConverter = jsonObjectToObjectConverter;
final UUID streamId = UUID.randomUUID();
final long currentStreamVersion = 3L;
final JsonEnvelope jsonEventA = envelope().with(metadataWithRandomUUID("eventA")).withPayloadOf("value1", "name1").build();
final JsonEnvelope jsonEventB = envelope().with(metadataWithRandomUUID("eventB")).withPayloadOf("value2", "name1").build();
final JsonEnvelope jsonEventC = envelope().with(metadataWithRandomUUID("eventC")).withPayloadOf("value3", "name1").build();
registerEvent(EventA.class, "eventA");
registerEvent(EventB.class, "eventB");
registerEvent(EventC.class, "eventC");
final EventA eventA = new EventA("A1");
final EventB eventB = new EventB("B1");
final EventC eventC = new EventC("C1");
when(eventStream.getId()).thenReturn(streamId);
when(eventStream.getCurrentVersion()).thenReturn(currentStreamVersion);
doThrow(new AggregateChangeDetectedException("Aggregate Change Detected")).when(snapshotService).getLatestVersionedAggregate(streamId, TestAggregate.class);
when(jsonObjectToObjectConverter.convert(jsonEventA.payloadAsJsonObject(), EventA.class)).thenReturn(eventA);
when(jsonObjectToObjectConverter.convert(jsonEventB.payloadAsJsonObject(), EventB.class)).thenReturn(eventB);
when(jsonObjectToObjectConverter.convert(jsonEventC.payloadAsJsonObject(), EventC.class)).thenReturn(eventC);
when(eventStream.read()).thenReturn(of(jsonEventA, jsonEventB, jsonEventC));
final TestAggregate aggregate1 = aggregateService.get(eventStream, TestAggregate.class);
verify(snapshotService).removeAllSnapshots(streamId, TestAggregate.class);
assertThat(aggregate1.recordedEvents(), hasItems(eventA, eventB, eventC));
}
Aggregations