Esempio n. 1
0
        public async Task Access_metadata_from_all_emitted_events()
        {
            // Arrange

            var snapshotStrategy = CreateSnapshotStrategy();

            var eventsMetadataService = new EventsMetadataService();

            var stores  = new InMemoryStores();
            var session = _sessionFactory(stores, stores.EventStore, stores.SnapshotStore, _eventPublisherMock.Object, snapshotStrategy, eventsMetadataService);

            var stubAggregate = StubSnapshotAggregate.Create("Snap");

            stubAggregate.AddEntity("Child 1");
            stubAggregate.AddEntity("Child 2");

            await session.AddAsync(stubAggregate).ConfigureAwait(false);

            // Act

            await session.SaveChangesAsync().ConfigureAwait(false);

            // Assert

            var eventsWithMetadata = eventsMetadataService.GetEvents().ToList();

            eventsWithMetadata.Count().Should().Be(3);

            eventsWithMetadata[0].Metadata.GetValue(MetadataKeys.EventName).Should().Be("StubCreated");
            eventsWithMetadata[1].Metadata.GetValue(MetadataKeys.EventName).Should().Be(nameof(ChildCreatedEvent));
            eventsWithMetadata[2].Metadata.GetValue(MetadataKeys.EventName).Should().Be(nameof(ChildCreatedEvent));
        }
        private TestServer TestServerFactory(IEventStore eventStore, EventsMetadataService eventsMetadataService = null)
        {
            var builder = new WebHostBuilder()
                          .UseStartup <Startup>()
                          .ConfigureServices(collection => {
                collection.AddScoped <IEventsMetadataService>(e => eventsMetadataService);
                collection.AddScoped(provider => eventStore);
                collection.AddScoped <IMetadataProvider, FakeUserMetadataProvider>();
            });

            var testServer = new TestServer(builder);

            return(testServer);
        }
Esempio n. 3
0
        public Session(
            ILoggerFactory loggerFactory,
            ITransaction transaction,
            IEventStore eventStore,
            ISnapshotStore snapshotStore,
            IEventPublisher eventPublisher,
            IEventUpdateManager eventUpdateManager            = null,
            IEnumerable <IMetadataProvider> metadataProviders = null,
            ISnapshotStrategy snapshotStrategy           = null,
            IEventsMetadataService eventsMetadataService = null)
        {
            if (loggerFactory == null)
            {
                throw new ArgumentNullException(nameof(loggerFactory));
            }
            if (metadataProviders == null)
            {
                metadataProviders = Enumerable.Empty <IMetadataProvider>();
            }

            metadataProviders = metadataProviders.Concat(new IMetadataProvider[]
            {
                new AggregateTypeMetadataProvider(),
                new EventTypeMetadataProvider(),
                new CorrelationIdMetadataProvider()
            });

            if (snapshotStrategy == null)
            {
                snapshotStrategy = new IntervalSnapshotStrategy();
            }

            if (eventsMetadataService == null)
            {
                eventsMetadataService = new EventsMetadataService();
            }

            _logger = loggerFactory.Create(nameof(Session));

            _transaction           = transaction ?? throw new ArgumentNullException(nameof(transaction));
            _eventStore            = eventStore ?? throw new ArgumentNullException(nameof(eventStore));
            _snapshotStore         = snapshotStore ?? throw new ArgumentNullException(nameof(snapshotStore));
            _eventPublisher        = eventPublisher ?? throw new ArgumentNullException(nameof(eventPublisher));
            _snapshotStrategy      = snapshotStrategy;
            _eventUpdateManager    = eventUpdateManager;
            _metadataProviders     = metadataProviders;
            _eventsMetadataService = eventsMetadataService;
        }
        public async Task Verify_custom_metadata()
        {
            // Arrange
            var eventStore            = new InMemoryStores();
            var eventsMetadataService = new EventsMetadataService();

            var server = TestServerFactory(eventStore, eventStore, eventsMetadataService);

            var response = await server.CreateRequest("/command/foo").PostAsync();

            var eventsWithMetadata = eventsMetadataService.GetEvents().ToList();

            eventsWithMetadata.Count().Should().Be(1);
            var fakeUser = eventsWithMetadata[0].Metadata.GetValue(FakeUserMetadataProvider.MetadataKey, e => (User)e);

            fakeUser.Name.Should().Be("Xomano");
            fakeUser.UserCode.Should().Be(123);
        }
        private TestServer TestServerFactory(ITransaction transaction, ICompositeStores compositeStores, EventsMetadataService eventsMetadataService = null)
        {
            var builder = new WebHostBuilder()
                          .UseStartup <Startup>()
                          .ConfigureServices(services => {
                services.AddScoped <IEventsMetadataService>(e => eventsMetadataService);
                services.AddScoped <ITransaction>(provider => transaction);
                services.AddScoped <IEventStore>(provider => compositeStores.EventStore);
                services.AddScoped <ISnapshotStore>(provider => compositeStores.SnapshotStore);
                services.AddScoped <IMetadataProvider, FakeUserMetadataProvider>();
            });

            var testServer = new TestServer(builder);

            return(testServer);
        }