public void WithInvalidMinimumValuesShouldBeInvalid()
        {
            // Assign
            var model = new ProbabilityCalculationRequestViewModel
            {
                Type          = ProbabilityCalculationType.Unknown,
                Probabilities = new List <ProbabilityViewModel> {
                    new ProbabilityViewModel {
                        Rate = -0.1
                    }
                },
            };

            var expectedResult = new List <string>
            {
                "The Type field is required.",
                "At least two probability is required.",
            };

            // Act
            var results = ModelValidator.Validate(model).ToList();

            // Assert
            results.Should().BeEquivalentTo(expectedResult);
        }
コード例 #2
0
        private async Task LogCalculation(ProbabilityCalculationRequestViewModel request, List <double> probabilities, double result)
        {
            var now = this.dateTimeProvider.GetUtcNow();
            var probabilitiesCsv = string.Join(",", probabilities);
            var logMsg           = $"{now}: Probability of {request.Type} with {probabilitiesCsv} returned a result of {result}";

            await this.logWriter.AppendLinesToLogFileAsync(logMsg);
        }
コード例 #3
0
        public async Task <double> CalculateProbabilityAsync(ProbabilityCalculationRequestViewModel request)
        {
            var calculator    = ProbabilityCalculationFactory.CreateForStrategy(request.Type);
            var probabilities = request.Probabilities.Select(x => x.Rate).ToList();
            var result        = calculator.Calculate(probabilities);

            await this.LogCalculation(request, probabilities, result);

            return(result);
        }
コード例 #4
0
        internal ProbabilityCalculationControllerSutBuilder VerifyLogWasCalledCorrectly(
            ProbabilityCalculationRequestViewModel request,
            ProbabilityViewModel result)
        {
            this.mockLogWriter.Verify(x => x.AppendLinesToLogFileAsync(It.IsAny <string>()), Times.Once);

            var probabilities  = string.Join(",", request.Probabilities.Select(x => x.Rate));
            var expectedLogMsg = $"{this.stubbedNow}: Probability of {request.Type} with {probabilities} returned a result of {result.Rate}";

            this.mockLogWriter.Verify(x => x.AppendLinesToLogFileAsync(expectedLogMsg), Times.Once);
            return(this);
        }
コード例 #5
0
        public async Task <ActionResult <ProbabilityViewModel> > Post(ProbabilityCalculationRequestViewModel request)
        {
            try
            {
                var result = await this.probabilityCalculationService.CalculateProbabilityAsync(request);

                return(this.Ok(new ProbabilityViewModel {
                    Rate = result
                }));
            }
            catch
            {
                return(this.StatusCode(StatusCodes.Status500InternalServerError));
            }
        }
        public void WithAllFieldsBeingTheirDefaultStateShouldBeInvalid()
        {
            // Assign
            var model          = new ProbabilityCalculationRequestViewModel();
            var expectedResult = new List <string>
            {
                "The Type field is required.",
                "The Probabilities field is required.",
            };

            // Act
            var results = ModelValidator.Validate(model).ToList();

            // Assert
            results.Should().BeEquivalentTo(expectedResult);
        }
        public async Task AndTheRequestsIsValidShouldReturnTheCorrectResult(
            ProbabilityCalculationRequestViewModel stubbedRequest,
            ProbabilityViewModel expectedResult)
        {
            // Assign
            var sut = this.builder
                      .WithStubbedNow(this.now)
                      .Build();

            // Act
            var result = await sut.Post(stubbedRequest);

            // Assert
            var actionResult = Assert.IsAssignableFrom <ActionResult <ProbabilityViewModel> >(result);
            var viewResult   = Assert.IsAssignableFrom <OkObjectResult>(actionResult.Result);
            var viewModel    = Assert.IsAssignableFrom <ProbabilityViewModel>(viewResult.Value);

            viewModel.Should().BeEquivalentTo(expectedResult);
            this.builder.VerifyLogWasCalledCorrectly(stubbedRequest, expectedResult);
        }
        public void WithValidMinimumValuesShouldBeValid()
        {
            // Assign
            var model = new ProbabilityCalculationRequestViewModel
            {
                Type          = ProbabilityCalculationType.And,
                Probabilities = new List <ProbabilityViewModel>
                {
                    new ProbabilityViewModel {
                        Rate = 0
                    },
                    new ProbabilityViewModel {
                        Rate = 0
                    },
                },
            };

            // Act
            var results = ModelValidator.Validate(model).ToList();

            // Assert
            results.Should().BeEmpty();
        }