Пример #1
0
        public async Task ReadStoreIsUpdatedWithRelevantEvents()
        {
            // Arrange
            var thingyId = Inject(ThingyId.New);

            Arrange_ReadModelStore_UpdateAsync(ReadModelEnvelope <TReadModel> .With(
                                                   thingyId.Value,
                                                   A <TReadModel>()));
            var events = new[]
            {
                ToDomainEvent(A <ThingyPingEvent>(), 1),
                ToDomainEvent(A <ThingyDomainErrorAfterFirstEvent>(), 2)
            };

            // Act
            await Sut.UpdateReadStoresAsync(events, CancellationToken.None).ConfigureAwait(false);

            // Assert
            ReadModelStoreMock.Verify(
                s => s.UpdateAsync(
                    It.Is <IReadOnlyCollection <ReadModelUpdate> >(l => l.Count == 1),
                    It.IsAny <IReadModelContextFactory>(),
                    It.IsAny <Func <
                                  IReadModelContext,
                                  IReadOnlyCollection <IDomainEvent>,
                                  ReadModelEnvelope <TReadModel>,
                                  CancellationToken,
                                  Task <ReadModelUpdateResult <TReadModel> > > >(),
                    It.IsAny <CancellationToken>()),
                Times.Once);
        }
Пример #2
0
        protected IReadOnlyCollection <ReadModelUpdateResult> Arrange_ReadModelStore_UpdateAsync(
            params ReadModelEnvelope <TReadModel>[] readModelEnvelopes)
        {
            // Don't try this at home...

            var resultingReadModelUpdateResults = new List <ReadModelUpdateResult>();

            ReadModelStoreMock
            .Setup(m => m.UpdateAsync(
                       It.IsAny <IReadOnlyCollection <ReadModelUpdate> >(),
                       It.IsAny <IReadModelContextFactory>(),
                       It.IsAny <Func <
                                     IReadModelContext,
                                     IReadOnlyCollection <IDomainEvent>,
                                     ReadModelEnvelope <TReadModel>,
                                     CancellationToken,
                                     Task <ReadModelUpdateResult <TReadModel> > > >(),
                       It.IsAny <CancellationToken>()))
            .Callback <
                IReadOnlyCollection <ReadModelUpdate>,
                IReadModelContextFactory,
                Func <
                    IReadModelContext,
                    IReadOnlyCollection <IDomainEvent>,
                    ReadModelEnvelope <TReadModel>,
                    CancellationToken,
                    Task <ReadModelUpdateResult <TReadModel> > >,
                CancellationToken>((readModelUpdates, readModelContextFactory, updaterFunc, cancellationToken) =>
            {
                try
                {
                    foreach (var g in readModelEnvelopes.GroupBy(e => e.ReadModelId))
                    {
                        foreach (var readModelEnvelope in g)
                        {
                            resultingReadModelUpdateResults.Add(updaterFunc(
                                                                    readModelContextFactory.Create(readModelEnvelope.ReadModelId, true),
                                                                    readModelUpdates
                                                                    .Where(d => d.ReadModelId == g.Key)
                                                                    .SelectMany(d => d.DomainEvents)
                                                                    .OrderBy(d => d.AggregateSequenceNumber)
                                                                    .ToList(),
                                                                    readModelEnvelope,
                                                                    cancellationToken)
                                                                .Result);
                        }
                    }
                }
                catch (AggregateException e) when(e.InnerException != null)
                {
                    throw e.InnerException;
                }
            })
            .Returns(Task.FromResult(0));

            return(resultingReadModelUpdateResults);
        }
        public async Task IfNoReadModelIdsAreReturned_ThenDontInvokeTheReadModelStore()
        {
            // Arrange
            _readModelLocator.Setup(l => l.GetReadModelIds(It.IsAny <IDomainEvent>())).Returns(Enumerable.Empty <string>());
            var events = new[]
            {
                ToDomainEvent(A <ThingyPingEvent>()),
            };

            // Act
            await Sut.UpdateReadStoresAsync(events, CancellationToken.None).ConfigureAwait(false);

            // Assert
            _readModelLocator.Verify(l => l.GetReadModelIds(It.IsAny <IDomainEvent>()), Times.Once);
            ReadModelStoreMock.Verify(
                s => s.UpdateAsync(
                    It.IsAny <IReadOnlyCollection <ReadModelUpdate> >(),
                    It.IsAny <IReadModelContext>(),
                    It.IsAny <Func <IReadModelContext, IReadOnlyCollection <IDomainEvent>, ReadModelEnvelope <ReadStoreManagerTestReadModel>, CancellationToken, Task <ReadModelEnvelope <ReadStoreManagerTestReadModel> > > >(),
                    It.IsAny <CancellationToken>()),
                Times.Never);
        }