Пример #1
0
        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>();
        }
Пример #2
0
        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();
        }
Пример #3
0
        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>();
        }
Пример #4
0
        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());
            }
        }