public async Task ExistingEventsAreLoadedAndProcessedOnStart()
        {
            var existingEvent = new TestAggregateCreatedEvent(new Guid("b166fbb3-b7f9-49d2-8a61-0b4df5fff561"), "Test1");

            A.CallTo(() => _persistenceClient.Retrieve(typeof(TestAggregateCreatedEvent)))
            .Returns(new IEvent[] { existingEvent });

            var reader = new TestAggregateReader(_persistenceClient, _streamingClient);
            await reader.StartAsync();

            var aggregates = reader.Get();

            Assert.AreEqual(1, aggregates.Length);

            var actualAggregate = aggregates[0];

            Assert.AreEqual(existingEvent.AggregateId, actualAggregate.Id);
            Assert.AreEqual(existingEvent.Foo, actualAggregate.Foo);
        }
        public async Task WhenSavingNewEventUsesVersionOfAggregateAsExpectedVersion()
        {
            var createdEvent = new TestAggregateCreatedEvent(new Guid("b166fbb3-b7f9-49d2-8a61-0b4df5fff561"), "Test1_Initial");
            var updatedEvent = new TestAggregateUpdatedEvent(new Guid("b166fbb3-b7f9-49d2-8a61-0b4df5fff561"), "Test1_Updated");

            A.CallTo(() => _persistenceClient.Retrieve(typeof(TestAggregateCreatedEvent)))
            .Returns(new IEvent[] { createdEvent });
            A.CallTo(() => _persistenceClient.Retrieve(typeof(TestAggregateUpdatedEvent)))
            .Returns(new IEvent[] { updatedEvent });

            var writer = new TestAggregateWriter(_persistenceClient, _streamingClient);
            await writer.StartAsync();

            var newUpdatedEvent = new TestAggregateUpdatedEvent(new Guid("b166fbb3-b7f9-49d2-8a61-0b4df5fff561"), "Test1_Updated_SecondTime");

            await writer.Save(newUpdatedEvent);

            A.CallTo(() => _persistenceClient.Save(
                         "TestAggregateRoot_b166fbb3-b7f9-49d2-8a61-0b4df5fff561",
                         1,
                         A <IEvent> .Ignored))
            .MustHaveHappenedOnceExactly();
        }
예제 #3
0
        private async Task <List <IEvent> > RetrievePersistedEvents()
        {
            var retrievedEvents = await Task.WhenAll(
                SubscribedEventTypes
                .Select(async nameToTypeMapping =>
            {
                var type = nameToTypeMapping.Value;
                return(await _eventPersistenceClient.Retrieve(type));
            }));

            return(retrievedEvents
                   .SelectMany(y => y)
                   .ToList());
        }