use of uk.gov.justice.domain.aggregate.TestAggregate in project microservice_framework by CJSCommonPlatform.
the class SnapshotAwareAggregateServiceIT method shouldStoreABrandNewSnapshotWhenEventCountInTheStreamReachesThreshold.
@Test
public void shouldStoreABrandNewSnapshotWhenEventCountInTheStreamReachesThreshold() throws Exception {
final UUID streamId = randomUUID();
appendEventsViaAggregate(streamId, SNAPSHOT_THRESHOLD);
final Optional<AggregateSnapshot<TestAggregate>> snapshot = snapshotRepository.getLatestSnapshot(streamId, TestAggregate.class);
final TestAggregate aggregateFromSnapshot = snapshot.get().getAggregate(new DefaultObjectInputStreamStrategy());
assertThat(snapshot, not(nullValue()));
assertThat(snapshot.isPresent(), equalTo(true));
assertThat(snapshot.get().getType(), equalTo(TYPE));
assertThat(snapshot.get().getStreamId(), equalTo(streamId));
assertThat(snapshot.get().getVersionId(), equalTo(25L));
assertThat(rowCount(SQL_EVENT_LOG_COUNT_BY_STREAM_ID, streamId), is(25));
assertThat(aggregateFromSnapshot.numberOfAppliedEvents(), is(25));
assertThat(aggregateFromSnapshot.recordedEvents().size(), is(25));
assertThat(rowCount(SQL_EVENT_STREAM_COUNT_BY_STREAM_ID, streamId), is(1));
}
use of uk.gov.justice.domain.aggregate.TestAggregate in project microservice_framework by CJSCommonPlatform.
the class SnapshotAwareAggregateServiceIT method shouldCreateNewSnapshotOnAggregateChangeWhenWeHaveMultipleExistingSnapshots.
@Test
public void shouldCreateNewSnapshotOnAggregateChangeWhenWeHaveMultipleExistingSnapshots() throws Exception {
final Class aggregateClass = TestAggregate.class;
final UUID streamId = randomUUID();
final long initialNumberOfSnapshots = 4;
for (int i = 0; i < initialNumberOfSnapshots; i++) {
appendEventsViaAggregate(streamId, SNAPSHOT_THRESHOLD);
}
final Optional<AggregateSnapshot> snapshot = snapshotRepository.getLatestSnapshot(streamId, aggregateClass);
assertThat(snapshot, not(nullValue()));
assertThat(snapshot.isPresent(), equalTo(true));
appendEventsViaAggregate(streamId, SNAPSHOT_THRESHOLD - 2);
final Optional<AggregateSnapshot> newSnapshot = snapshotRepository.getLatestSnapshot(streamId, aggregateClass);
assertThat(newSnapshot, not(nullValue()));
assertThat(newSnapshot.isPresent(), equalTo(true));
assertThat(newSnapshot.get().getType(), equalTo(aggregateClass.getName()));
assertThat(newSnapshot.get().getStreamId(), equalTo(streamId));
assertThat(newSnapshot.get().getVersionId(), equalTo(initialNumberOfSnapshots * SNAPSHOT_THRESHOLD));
assertThat(rowCount(SQL_EVENT_LOG_COUNT_BY_STREAM_ID, streamId), is(123));
TestAggregate aggregateFromSnapshot2 = (TestAggregate) newSnapshot.get().getAggregate(new DefaultObjectInputStreamStrategy());
assertThat(aggregateFromSnapshot2.numberOfAppliedEvents(), is(100));
assertThat(rowCount(SQL_EVENT_STREAM_COUNT_BY_STREAM_ID, streamId), is(1));
}
use of uk.gov.justice.domain.aggregate.TestAggregate in project microservice_framework by CJSCommonPlatform.
the class SnapshotAwareAggregateServiceIT method shouldNotCreateNewSnapshotOnAggregateChangeWhenWeJustOneExistingSnapshots.
@Test
public void shouldNotCreateNewSnapshotOnAggregateChangeWhenWeJustOneExistingSnapshots() throws Exception {
final Class aggregateClass = TestAggregate.class;
final UUID streamId = randomUUID();
appendEventsViaAggregate(streamId, SNAPSHOT_THRESHOLD);
final Optional<AggregateSnapshot> snapshot = snapshotRepository.getLatestSnapshot(streamId, aggregateClass);
assertThat(snapshot, not(nullValue()));
assertThat(snapshot.isPresent(), equalTo(true));
final EventStream updatedStream = eventSource.getStreamById(streamId);
appendEventsViaAggregate(streamId, SNAPSHOT_THRESHOLD - 2);
final Optional<AggregateSnapshot<TestAggregate>> snapshotChanged = snapshotRepository.getLatestSnapshot(streamId, aggregateClass);
assertThat(snapshotChanged, not(nullValue()));
assertThat(snapshotChanged.isPresent(), equalTo(true));
assertThat(snapshotChanged.get().getType(), equalTo(aggregateClass.getName()));
assertThat(snapshotChanged.get().getStreamId(), equalTo(streamId));
assertThat(snapshotChanged.get().getVersionId(), equalTo(25L));
assertThat(rowCount(SQL_EVENT_LOG_COUNT_BY_STREAM_ID, streamId), is(48));
final TestAggregate aggregateFromSnapshot = snapshotChanged.get().getAggregate(new DefaultObjectInputStreamStrategy());
assertThat(aggregateFromSnapshot.numberOfAppliedEvents(), is(25));
assertThat(rowCount(SQL_EVENT_STREAM_COUNT_BY_STREAM_ID, streamId), is(1));
}
use of uk.gov.justice.domain.aggregate.TestAggregate in project microservice_framework by CJSCommonPlatform.
the class SnapshotAwareAggregateServiceIT method appendEventsViaAggregate.
private void appendEventsViaAggregate(final UUID streamId, final long eventCount) throws Exception {
final EventStream eventStream = eventSource.getStreamById(streamId);
TestAggregate aggregateRebuilt = aggregateService.get(eventStream, TestAggregate.class);
eventStream.append(createEventAndApply(streamId, eventCount, aggregateRebuilt));
}
use of uk.gov.justice.domain.aggregate.TestAggregate in project microservice_framework by CJSCommonPlatform.
the class SnapshotAwareEnvelopeEventStreamTest method shouldAttemptSnapshotCreationOnAppendingEvents.
@Test
public void shouldAttemptSnapshotCreationOnAppendingEvents() throws Exception {
final TestAggregate aggregate = new TestAggregate();
eventStream.registerAggregates(TestAggregate.class, aggregate);
final long streamVersionAfterAppending = 14L;
final Stream<JsonEnvelope> streamOfEvents = Stream.of(envelope().build());
when(eventStreamManager.append(STREAM_ID, streamOfEvents)).thenReturn(streamVersionAfterAppending);
eventStream.append(streamOfEvents);
verify(snapshotService).attemptAggregateStore(STREAM_ID, streamVersionAfterAppending, aggregate);
}
Aggregations