public async Task When_a_snapshot_is_not_up_to_date_then_GetLatest_retrieves_later_events_and_applies_them() { // arrange var snapshotRepository = new InMemorySnapshotRepository(); Configuration.Current.UseDependency <ISnapshotRepository>(_ => snapshotRepository); var snapshot = new CustomerAccountSnapshot { AggregateId = Any.Guid(), Version = 123, AggregateTypeName = AggregateType <CustomerAccount> .EventStreamName, EmailAddress = Any.Email(), NoSpam = true, UserName = Any.FullName(), ETags = new[] { Any.Word(), Any.Word() } }; await snapshotRepository.SaveSnapshot(snapshot); await SaveEventsDirectly(new CustomerAccount.RequestedSpam { AggregateId = snapshot.AggregateId, SequenceNumber = 124 }.ToStoredEvent()); // act var account = await CreateRepository <CustomerAccount>().GetLatest(snapshot.AggregateId); // assert account.Version.Should().Be(124); account.NoSpam.Should().Be(false); }
public async Task GetLatest_can_return_an_aggregate_built_from_a_snapshot_projection() { // arrange var snapshotRepository = new InMemorySnapshotRepository(); Configuration.Current.UseDependency <ISnapshotRepository>(_ => snapshotRepository); var snapshot = new CustomerAccountSnapshot { AggregateId = Any.Guid(), Version = 123, AggregateTypeName = AggregateType <CustomerAccount> .EventStreamName, EmailAddress = Any.Email(), NoSpam = true, UserName = Any.FullName(), ETags = new[] { Any.Word(), Any.Word() } }; await snapshotRepository.SaveSnapshot(snapshot); // act var account = await CreateRepository <CustomerAccount>().GetLatest(snapshot.AggregateId); // assert account.Id.Should().Be(snapshot.AggregateId); account.Version.Should().Be(snapshot.Version); account.EmailAddress.Should().Be(snapshot.EmailAddress); account.UserName.Should().Be(snapshot.UserName); account.NoSpam.Should().Be(snapshot.NoSpam); foreach (var etag in snapshot.ETags) { account.HasETag(etag).Should().BeTrue("etags are expected to be loaded from the snapshot"); } }
public async Task When_new_events_are_added_to_an_aggregate_sourced_from_a_stale_snapshot_the_version_increments_correctly() { // arrange var snapshotRepository = new InMemorySnapshotRepository(); Configuration.Current.UseDependency <ISnapshotRepository>(_ => snapshotRepository); var snapshot = new CustomerAccountSnapshot { AggregateId = Any.Guid(), Version = 122, AggregateTypeName = AggregateType <CustomerAccount> .EventStreamName, EmailAddress = Any.Email(), NoSpam = true, UserName = Any.FullName(), ETags = new[] { Any.Word(), Any.Word() } }; await snapshotRepository.SaveSnapshot(snapshot); await SaveEventsDirectly(new CustomerAccount.RequestedSpam { AggregateId = snapshot.AggregateId, SequenceNumber = snapshot.Version + 1 }.ToStoredEvent()); // act var account = await CreateRepository <CustomerAccount>().GetLatest(snapshot.AggregateId); account.Apply(new RequestSpam()); // assert account.Version.Should().Be(124); }
public async Task GetLatest_can_return_an_aggregate_built_from_a_snapshot_projection() { // arrange var snapshotRepository = new InMemorySnapshotRepository(); Configuration.Current.UseDependency <ISnapshotRepository>(_ => snapshotRepository); var etags = new[] { Any.Word(), Any.Word() }; var bloomFilter = new BloomFilter(); etags.ForEach(bloomFilter.Add); var snapshot = new CustomerAccountSnapshot { AggregateId = Any.Guid(), Version = 123, AggregateTypeName = AggregateType <CustomerAccount> .EventStreamName, EmailAddress = Any.Email(), NoSpam = true, UserName = Any.FullName(), ETags = bloomFilter }; await snapshotRepository.SaveSnapshot(snapshot); // act var account = await CreateRepository <CustomerAccount>().GetLatest(snapshot.AggregateId); // assert account.Id.Should().Be(snapshot.AggregateId); account.Version.Should().Be(snapshot.Version); account.EmailAddress.Should().Be(snapshot.EmailAddress); account.UserName.Should().Be(snapshot.UserName); account.NoSpam.Should().Be(snapshot.NoSpam); }