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 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()); } }