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); }
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); }