Exemplo n.º 1
0
        public EventStoreTests()
        {
            var eventSerializer      = new EventSerializer(new JsonTextSerializer());
            var snapshotSerializer   = new SnapshotSerializer(new JsonTextSerializer());
            var projectionSerializer = new ProjectionSerializer(new JsonTextSerializer());

            _inMemoryDomainEventStore = new InMemoryEventStore();

            var mockLogger = new Mock <ILogger>();

            mockLogger.Setup(e => e.IsEnabled(It.IsAny <LogLevel>())).Returns(true);
            mockLogger.Setup(e => e.Log(It.IsAny <LogLevel>(), It.IsAny <string>(), It.IsAny <Exception>()));

            var mockLoggerFactory = new Mock <ILoggerFactory>();

            mockLoggerFactory.Setup(e => e.Create(It.IsAny <string>())).Returns(mockLogger.Object);

            _mockEventPublisher = new Mock <IEventPublisher>();
            _mockEventPublisher.Setup(e => e.PublishAsync(It.IsAny <IEnumerable <IDomainEvent> >())).Returns(Task.CompletedTask);

            var session = new Session(mockLoggerFactory.Object, _inMemoryDomainEventStore, _mockEventPublisher.Object, eventSerializer, snapshotSerializer, projectionSerializer);

            _repository = new Repository(mockLoggerFactory.Object, session);

            var unitOfWorkMock = new Mock <IUnitOfWork>();

            unitOfWorkMock.Setup(e => e.CommitAsync())
            .Callback(async() =>
            {
                await session.SaveChangesAsync().ConfigureAwait(false);
            })
            .Returns(Task.CompletedTask);

            _unitOfWork = unitOfWorkMock.Object;
        }
Exemplo n.º 2
0
        private async Task <Session> ArrangeSessionAsync <TAggregate>(Guid aggregateId, IEventUpdateManager eventUpdateManager = null, params IDomainEvent[] arrangeEvents)
            where TAggregate : Aggregate, new()
        {
            var metadataProviders = new IMetadataProvider[]
            {
                new AggregateTypeMetadataProvider(),
                new EventTypeMetadataProvider(),
                new CorrelationIdMetadataProvider()
            };

            var loggerFactory  = new NoopLoggerFactory();
            var eventPublisher = new EventPublisher(new StubEventRouter());

            var eventStore           = new InMemoryEventStore();
            var eventSerializer      = new EventSerializer(new JsonTextSerializer());
            var snapshotSerializer   = new SnapshotSerializer(new JsonTextSerializer());
            var projectionSerializer = new ProjectionSerializer(new JsonTextSerializer());

            var session = new Session(loggerFactory, eventStore, eventPublisher, eventSerializer, snapshotSerializer, projectionSerializer, eventUpdateManager: eventUpdateManager);

            var aggregate = (TAggregate)Activator.CreateInstance(typeof(TAggregate), args: aggregateId);

            aggregate.UpdateVersion(arrangeEvents.Length - 1);

            var serializedEvents = arrangeEvents.Select((e, index) =>
            {
                index++;

                var metadatas =
                    metadataProviders.SelectMany(md => md.Provide(aggregate, e, EventSource.Metadata.Empty)).Concat(new[]
                {
                    new KeyValuePair <string, object>(MetadataKeys.EventId, Guid.NewGuid()),
                    new KeyValuePair <string, object>(MetadataKeys.EventVersion, (aggregate.Version + index))
                });
                return(eventSerializer.Serialize(aggregate, e, new EventSource.Metadata(metadatas)));
            });

            eventStore.BeginTransaction();

            await eventStore.SaveAsync(serializedEvents);

            await eventStore.CommitAsync();

            return(session);
        }