public void Handle_logs_exception_before_throwing_it()
        {
            // Arrange
            var newEvent     = new NewResultIntegrationEvent();
            var anyException = new Exception($"Failed to process {nameof(NewResultIntegrationEvent)}: {newEvent.Id}");

            var logger = new Mock <ILogger <NewResultIntegrationEventHandler> >();
            var uow    = new Mock <IUnitOfWork>();

            uow.Setup(s => s.DiffResultsRepository)
            .Throws(anyException);

            var handler = GetHandler(logger, uow: uow);

            // Act
            Assert.ThrowsAsync <Exception>(() => handler.Handle(newEvent));

            // Assert
            logger.Verify(l =>
                          l.Log(
                              LogLevel.Error,
                              0,
                              It.Is <FormattedLogValues>(v => v.ToString() == anyException.Message),
                              It.Is <Exception>(e => e == anyException),
                              It.IsAny <Func <object, Exception, string> >())
                          );
        }
Exemple #2
0
        public void Handle_should_return_expected_differences_for_different_inputs(
            InputData input,
            InputData opposingInput,
            DiffResult expectedResult
            )
        {
            // Arrange
            var resultEvent   = new NewResultIntegrationEvent(input, string.Empty, expectedResult);
            var newInputEvent = new NewInputIntegrationEvent()
            {
                Position = input.Position
            };

            var eventBus = new Mock <IRabbitMQEventBus>();

            var repository = new Mock <IInputRepository>();

            repository
            .Setup(s => s.FindAsync(It.IsAny <string>()))
            .ReturnsAsync(() => input);

            repository
            .Setup(s => s.GetLastInputBeforeAsync(It.IsAny <Guid>(), It.IsAny <InputPosition>(), It.IsAny <DateTime>()))
            .ReturnsAsync(() => opposingInput);

            var handler = GetHandler(
                eventBus: eventBus,
                repository: repository,
                logic: new DiffLogic()
                );

            // Act
            handler.Handle(newInputEvent);

            // Assert
            eventBus.Verify(
                eb => eb.Publish(
                    It.Is <NewResultIntegrationEvent>(e =>
                                                      e.Result == ResultType.Different &&
                                                      e.Differences.Count == expectedResult.Differences.Count &&
                                                      e.Differences.All(_ => expectedResult.Differences.Contains(_))
                                                      )
                    )
                );
        }
        public async Task Handle_doesnt_save_result_if_already_exists()
        {
            // Arrange
            var newEvent = new NewResultIntegrationEvent {
                InputId = Guid.NewGuid().ToString()
            };

            var mapper = new Mock <IMapper>();

            mapper.Setup(s => s.Map <DiffResult>(It.IsAny <NewResultIntegrationEvent>()))
            .Returns(new DiffResult());

            var mockRepo = new Mock <IDiffResultsRepository>();

            mockRepo.Setup(s => s.Get(It.IsAny <Expression <Func <DiffResult, bool> > >()))
            .Returns(() =>
                     new DiffResult[] {
                new DiffResult {
                    TriggerInputId = newEvent.InputId
                }
            }
                     .AsQueryable()
                     );

            var uow = new Mock <IUnitOfWork>();

            uow.Setup(s => s.DiffResultsRepository)
            .Returns(mockRepo.Object);

            var handler = GetHandler(mapper: mapper, uow: uow);

            // Act
            await handler.Handle(newEvent);

            // Assert
            mockRepo.Verify(r =>
                            r.Add(It.IsAny <DiffResult>()),
                            Times.Never
                            );
            uow.Verify(u =>
                       u.SaveChangesAsync(),
                       Times.Never
                       );
        }
Exemple #4
0
        public void Handle_consider_input_larger_if_no_opposing_input_found(InputPosition position, ResultType expectedResultType)
        {
            // Arrange
            var input          = new InputData(position, "test");
            var expectedResult = new DiffResult(expectedResultType, null);
            var resultEvent    = new NewResultIntegrationEvent(input, string.Empty, expectedResult);
            var newInputEvent  = new NewInputIntegrationEvent()
            {
                Position = input.Position
            };

            var eventBus = new Mock <IRabbitMQEventBus>();

            var logic = new Mock <IDiffLogic>();

            logic.Setup(s => s.CompareData(It.IsAny <InputData>(), It.IsAny <InputData>()))
            .Returns(expectedResult);

            var repository = new Mock <IInputRepository>();

            repository
            .Setup(s => s.FindAsync(It.IsAny <string>()))
            .ReturnsAsync(() => input);

            repository
            .Setup(s => s.GetLastInputBeforeAsync(It.IsAny <Guid>(), It.IsAny <InputPosition>(), It.IsAny <DateTime>()))
            .ReturnsAsync(() => null);

            var handler = GetHandler(
                eventBus: eventBus,
                repository: repository,
                logic: logic.Object
                );

            // Act
            handler.Handle(newInputEvent);

            // Assert
            eventBus.Verify(
                eb => eb.Publish(
                    It.Is <NewResultIntegrationEvent>(e => e.Result == expectedResult.Result)
                    )
                );
        }
Exemple #5
0
        private void PublishNewResult(InputData input, string oppsingInputId, DiffResult diffResult)
        {
            var newResult = new NewResultIntegrationEvent(input, oppsingInputId, diffResult);

            _eventBus.Publish(newResult);
        }