public async Task save_should_throw_exception_when_concurrency_is_violated() { // arrange var id = NewGuid(); var birthday = Now.AddYears(-21); var newEvents = new IEvent[] { new Married(id, NewGuid(), Now) }; var persistence = new SimplePersistence(); var eventStore = new SimpleEventStore(persistence); await persistence.Persist(new Commit() { Id = id, Version = 0, Events = { new Born(id, "John", "Doe", birthday) } }, CancellationToken.None); await persistence.Persist(new Commit() { Id = id, Version = 1, Events = { new Married(id, NewGuid(), Now) } }, CancellationToken.None); // act Func <Task> save = () => eventStore.Save(id, newEvents, 0, CancellationToken.None); // assert save.Should().Throw <ConcurrencyException>(); }
public async Task single_should_load_aggregate() { // arrange var id = NewGuid(); var birthday = Now.AddYears(-3); var anniversary = Now; var person = new Person(id, "Jane", "Smith", birthday); var spouse = new Person(NewGuid(), "John", "Doe", Now); person.Marry(spouse, anniversary); person.ChangeLastName("Doe"); var events = new IEvent[] { new Born(id, "Jane", "Smith", birthday), new Married(id, spouse.Id, anniversary), new LastNameChanged(id, "Doe") }; var eventStore = new SimpleEventStore(new Dictionary <Guid, IEnumerable <IEvent> >() { [id] = events }); var repository = new Repository <Person>(eventStore); // act var twin = await repository.Single(id, CancellationToken.None); // assert twin.Equals(person).Should().BeTrue(); }
public async Task load_should_return_stream_that_throws_not_found_exception() { // arrange var id = NewGuid(); var persistence = new SimplePersistence(); var eventStore = new SimpleEventStore(persistence); // act var events = await eventStore.Load(id, CancellationToken.None); var enumerator = events.GetEnumerator(); Action moveNext = () => enumerator.MoveNext(); // assert moveNext.Should().Throw <AggregateNotFoundException>(); }
public async Task save_should_update_event_versions() { // arrange var id = NewGuid(); var birthday = Now.AddYears(-21); var events = new IEvent[] { new Born(id, "John", "Doe", birthday), new Married(id, NewGuid(), Now) }; var persistence = new SimplePersistence(); var eventStore = new SimpleEventStore(persistence); var version = 0; var sequence = 0; // act await eventStore.Save(id, events, ExpectedVersion.Initial, CancellationToken.None); // assert foreach (var @event in events) { @event.Should().BeEquivalentTo(new { Version = version, Sequence = sequence++ }, options => options.ExcludingMissingMembers()); } }