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 customerAccount = new CustomerAccount() .Apply(new ChangeEmailAddress(Any.Email())); var repository = CreateRepository <CustomerAccount>(); await repository.Save(customerAccount); var snapshot = customerAccount.CreateSnapshot(); Console.WriteLine(snapshot.Body); await snapshotRepository.SaveSnapshot(snapshot); await SaveEventsDirectly(new CustomerAccount.RequestedSpam { AggregateId = snapshot.AggregateId, SequenceNumber = 124 }.ToInMemoryStoredEvent()); // act var account = await repository.GetLatest(snapshot.AggregateId); // assert account.Version.Should().Be(124); account.NoSpam.Should().Be(false); }
public void When_instantiated_from_a_snapshot_the_aggregate_version_is_correct() { // arrange var customerAccount = new CustomerAccount() .Apply(new ChangeEmailAddress(Any.Email())); customerAccount.ConfirmSave(); var snapshot = customerAccount.CreateSnapshot(); snapshot.Version = 12; // act var accountFromSnapshot = new CustomerAccount(snapshot); // assert accountFromSnapshot.Version.Should().Be(12); }
public void EventSourcedAggregate_can_be_rehydrated_from_an_empty_event_sequence_when_using_a_snapshot() { // arrange var emailAddress = Any.Email(); var customerAccount = new CustomerAccount() .Apply(new ChangeEmailAddress(emailAddress)); customerAccount.ConfirmSave(); var snapshot = customerAccount.CreateSnapshot(); //act var fromSnapshot = new CustomerAccount(snapshot); // assert fromSnapshot.EmailAddress .Should() .Be(emailAddress); }
public void An_aggregate_instantiated_from_a_snapshot_adds_new_events_at_the_correct_sequence_number() { // arrange var account = new CustomerAccount() .Apply(new ChangeEmailAddress(Any.Email())); account.ConfirmSave(); var snapshot = account.CreateSnapshot(); snapshot.Version = 12; // act var accountFromSnapshot = new CustomerAccount(snapshot); accountFromSnapshot.Apply(new RequestNoSpam()); // assert accountFromSnapshot.Version.Should().Be(13); accountFromSnapshot.PendingEvents.Last().SequenceNumber.Should().Be(13); }
public void Accessing_event_history_from_an_aggregate_instantiated_using_a_snapshot_throws() { // arrange var account = new CustomerAccount() .Apply(new ChangeEmailAddress(Any.Email())); account.ConfirmSave(); var snapshot = account .CreateSnapshot(); snapshot.Version = 10; account = new CustomerAccount(snapshot); // act Action getEvents = () => account.Events(); // assert getEvents.ShouldThrow <InvalidOperationException>() .And .Message .Should() .Contain("Aggregate was sourced from a snapshot, so event history is unavailable."); }
public void Attempting_to_re_source_an_aggregate_that_was_instantiated_using_a_snapshot_succeeds_if_the_specified_version_is_at_or_after_the_snapshot() { // arrange var originalEmail = Any.Email(); var account = new CustomerAccount() .Apply(new ChangeEmailAddress(originalEmail)); account.ConfirmSave(); var snapshot = account.CreateSnapshot(); snapshot.Version = 10; account = new CustomerAccount(snapshot); account.Apply(new ChangeEmailAddress(Any.Email())); // act var accountAtVersion10 = account.AsOfVersion(10); // arrange accountAtVersion10.Version.Should().Be(10); accountAtVersion10.EmailAddress.Should().Be(originalEmail); }
public void Attempting_to_re_source_an_aggregate_that_was_instantiated_using_a_snapshot_throws_if_the_specified_version_is_prior_to_the_snapshot() { // arrange var account = new CustomerAccount() .Apply(new ChangeEmailAddress(Any.Email())); account.ConfirmSave(); var snapshot = account .CreateSnapshot(); snapshot.Version = 10; account = new CustomerAccount(snapshot); // act Action rollBack = () => account.AsOfVersion(9); // assert rollBack.ShouldThrow <InvalidOperationException>() .And .Message .Should() .Contain("Snapshot version is later than specified version."); }