예제 #1
0
        private Func <TestMessage, Task <AppendResult> > CreateMessageStorerAndStartHandling(ConnectedProjection <TestDbContext> projection)
        {
            var eventMapping =
                new EventMapping(EventMapping.DiscoverEventNamesInAssembly(typeof(RunnerTests).Assembly));
            var testRunner =
                new TestRunner(
                    new EnvelopeFactory(
                        eventMapping,
                        new EventDeserializer(JsonConvert.DeserializeObject)),
                    new Logger <TestRunner>(new LoggerFactory()),
                    projection);

            var options = new DbContextOptionsBuilder <TestDbContext>()
                          .UseInMemoryDatabase("testing")
                          .Options;

            using (var testDbContext = new TestDbContext(options))
            {
                testDbContext.Database.EnsureDeleted();
            }

            var inMemoryStreamStore = new InMemoryStreamStore(() => DateTime.UtcNow);

            testRunner.Handle(
                inMemoryStreamStore,
                () => new Owned <TestDbContext>(new TestDbContext(options), this));

            return(async message => await inMemoryStreamStore.AppendToStream(new StreamId("Bla"), ExpectedVersion.Any,
                                                                             new NewStreamMessage(Guid.NewGuid(), eventMapping.GetEventName(typeof(TestMessage)), JsonConvert.SerializeObject(message))));
        }
        private async Task Tick(CancellationToken cancellationToken)
        {
            var eventMapping = new EventMapping(EventMapping.DiscoverEventNamesInAssembly(typeof(ClockHasTicked).Assembly));

            var clockStreamId      = new StreamId(ClockStreamId);
            var lastClockHasTicked = await _streamStore.ReadStreamBackwards(
                streamId : clockStreamId,
                fromVersionInclusive : StreamVersion.End,
                maxCount : 1,
                prefetchJsonData : true,
                cancellationToken : cancellationToken);

            if (!lastClockHasTicked.Messages.Any())
            {
                await AppendClockHasTicked(cancellationToken, clockStreamId, eventMapping);
            }
            else
            {
                var lastClockTickJsonData = await lastClockHasTicked.Messages[0].GetJsonData(cancellationToken);
                var lastClockTick         = JsonConvert.DeserializeObject <ClockHasTicked>(lastClockTickJsonData);

                if (LocalDate.FromDateTime(lastClockTick.DateTime.Date) != _clockProvider.Today)
                {
                    await AppendClockHasTicked(cancellationToken, clockStreamId, eventMapping);
                }
            }
        }
예제 #3
0
            public async Task WhenMessageIsAppended()
            {
                var mapping       = new EventMapping(EventMapping.DiscoverEventNamesInAssembly(typeof(RoadNetworkEvents).Assembly));
                var settings      = EventsJsonSerializerSettingsProvider.CreateSerializerSettings();
                var archiveStream = new StreamName("archive-1");
                var commandStream = new StreamName("road-network-commands");
                var id            = Guid.NewGuid();
                var reaction      = new ReactionScenarioBuilder()
                                    .Given(new RecordedEvent(archiveStream, new Messages.UploadRoadNetworkChangesArchive {
                    ArchiveId = "123"
                }).WithMessageId(id))
                                    .Then(new RecordedEvent(commandStream, new Messages.UploadRoadNetworkChangesArchive {
                    ArchiveId = "123"
                }).WithMessageId(id).WithMetadata(new { Position = 1 }))
                                    .Build();

                var sut = new Subscriber(_store, commandStream);

                using (sut)
                {
                    sut.Start();

                    //Act
                    foreach (var stream in reaction.Givens.GroupBy(given => given.Stream))
                    {
                        await _store.AppendToStream(
                            stream.Key,
                            ExpectedVersion.NoStream,
                            stream.Select((given, index) => new NewStreamMessage(
                                              Deterministic.Create(Deterministic.Namespaces.Events,
                                                                   $"{given.Stream}-{index}"),
                                              mapping.GetEventName(given.Event.GetType()),
                                              JsonConvert.SerializeObject(given.Event, settings),
                                              given.Metadata != null ? JsonConvert.SerializeObject(given.Metadata, settings) : null
                                              )).ToArray());
                    }


                    //Await
                    var page = await _store.ReadStreamForwards(commandStream, StreamVersion.Start, 1);

                    while (page.Status == PageReadStatus.StreamNotFound)
                    {
                        page = await _store.ReadStreamForwards(commandStream, StreamVersion.Start, 1);
                    }

                    //Assert
                    //Assert.Equal(_messageId, page.Messages[0].MessageId);
                }

                await sut.Disposed;
            }
        public PublicServiceControllerTests()
        {
            var dbContextOptions = CreateDbContext();

            _existingPublicServiceId = "DVR000000001";

            var publicServiceListItem = new PublicServiceListItem
            {
                PublicServiceId = _existingPublicServiceId,
                Name            = "Dienstverlening"
            };

            _backofficeContext = new BackofficeContext(dbContextOptions);
            _backofficeContext.PublicServiceList.Add(publicServiceListItem);
            _backofficeContext.SaveChanges();

            _eventMapping      = new EventMapping(EventMapping.DiscoverEventNamesInAssembly(typeof(DomainAssemblyMarker).Assembly));
            _eventDeserializer = new EventDeserializer(JsonConvert.DeserializeObject);
        }
 public ClockTickingServiceTests()
 {
     _eventMapping = new EventMapping(EventMapping.DiscoverEventNamesInAssembly(typeof(ClockHasTicked).Assembly));
 }
예제 #6
0
 public EventHandlingModule(Assembly eventsAssembly, JsonSerializerSettings jsonSerializerSettingsForEvents)
 {
     _eventDeserializer = new EventDeserializer((eventData, eventType) => JsonConvert.DeserializeObject(eventData, eventType, jsonSerializerSettingsForEvents));
     _eventSerializer   = new EventSerializer(@event => JsonConvert.SerializeObject(@event, jsonSerializerSettingsForEvents));
     _eventMapping      = new EventMapping(EventMapping.DiscoverEventNamesInAssembly(eventsAssembly));
 }