public void Should_throw_exception_when_target_is_not_aggregate() { var scanner = new ProjectionProviderAttributeScanner(); Func <Task> func = async() => await scanner.ScanAsync(typeof(FakeNonAggregate)).ConfigureAwait(false); func.ShouldThrowExactly <TargetException>(); }
public async Task Should_scan_all_attributes_for_aggregate() { var bar = Bar.Create(Guid.NewGuid()); var scanner = new ProjectionProviderAttributeScanner(); var result = await scanner.ScanAsync(bar.GetType()).ConfigureAwait(false); result.Providers.Count().Should().Be(3); }
public async Task Should_provide_a_projection_instance_from_aggregate() { var bar = Bar.Create(Guid.NewGuid()); var scanner = new ProjectionProviderAttributeScanner(); var result = await scanner.ScanAsync(bar.GetType()).ConfigureAwait(false); var provider = result.Providers.First(e => e.GetType().Name == nameof(BarProjectionProvider)); var projection = (BarProjection)provider.CreateProjection(bar); projection.Id.Should().Be(bar.Id); projection.LastText.Should().Be(bar.LastText); projection.Messages.Count.Should().Be(bar.Messages.Count); projection.UpdatedAt.Should().Be(bar.UpdatedAt); }
public Session( ILoggerFactory loggerFactory, IEventStore eventStore, IEventPublisher eventPublisher, IEventSerializer eventSerializer, ISnapshotSerializer snapshotSerializer, IProjectionSerializer projectionSerializer, IProjectionProviderScanner projectionProviderScanner = null, IEventUpdateManager eventUpdateManager = null, IEnumerable <IMetadataProvider> metadataProviders = null, ISnapshotStrategy snapshotStrategy = null, IEventsMetadataService eventsMetadataService = null) { if (loggerFactory == null) { throw new ArgumentNullException(nameof(loggerFactory)); } if (eventStore == null) { throw new ArgumentNullException(nameof(eventStore)); } if (eventPublisher == null) { throw new ArgumentNullException(nameof(eventPublisher)); } if (eventSerializer == null) { throw new ArgumentNullException(nameof(eventSerializer)); } if (snapshotSerializer == null) { throw new ArgumentNullException(nameof(snapshotSerializer)); } if (projectionSerializer == null) { throw new ArgumentNullException(nameof(projectionSerializer)); } if (metadataProviders == null) { metadataProviders = Enumerable.Empty <IMetadataProvider>(); } metadataProviders = metadataProviders.Concat(new IMetadataProvider[] { new AggregateTypeMetadataProvider(), new EventTypeMetadataProvider(), new CorrelationIdMetadataProvider() }); if (projectionProviderScanner == null) { projectionProviderScanner = new ProjectionProviderAttributeScanner(); } if (snapshotStrategy == null) { snapshotStrategy = new IntervalSnapshotStrategy(); } if (eventsMetadataService == null) { eventsMetadataService = new EventsMetadataService(); } _logger = loggerFactory.Create(nameof(Session)); _snapshotStrategy = snapshotStrategy; _eventStore = eventStore; _eventSerializer = eventSerializer; _snapshotSerializer = snapshotSerializer; _projectionSerializer = projectionSerializer; _eventUpdateManager = eventUpdateManager; _projectionProviderScanner = projectionProviderScanner; _metadataProviders = metadataProviders; _eventPublisher = eventPublisher; _eventsMetadataService = eventsMetadataService; }