Exemple #1
0
 private void GivenProviderResultResponse(
     HttpStatusCode httpStatusCode,
     ProviderResultResponse providerResultResponse = null)
 {
     _resultsApiClient
     .Setup(_ => _.GetProviderResults(_providerId,
                                      _specificationId))
     .ReturnsAsync(new ApiResponse <ProviderResultResponse>(httpStatusCode, providerResultResponse));
 }
        public async Task <IActionResult> GetProviderResults(string providerId, string specificationId)
        {
            if (string.IsNullOrWhiteSpace(providerId))
            {
                _logger.Error("No provider Id was provided to GetProviderResults");
                return(new BadRequestObjectResult("Null or empty provider Id provided"));
            }

            if (string.IsNullOrWhiteSpace(specificationId))
            {
                _logger.Error("No specification Id was provided to GetProviderResults");
                return(new BadRequestObjectResult("Null or empty specification Id provided"));
            }

            ProviderResult providerResult = await _resultsRepositoryPolicy.ExecuteAsync(() => _resultsRepository.GetProviderResult(providerId, specificationId));

            if (providerResult != null)
            {
                _logger.Information($"A result was found for provider id {providerId}, specification id {specificationId}");

                ApiModels.ApiResponse <IEnumerable <CalcModels.CalculationMetadata> > calculationsResponse = await _calculationsApiClientPolicy.ExecuteAsync(() => _calculationsApiClient.GetCalculationMetadataForSpecification(specificationId));

                if (calculationsResponse?.Content == null)
                {
                    string error = $"Did not locate any calculation metadata for specification {specificationId}.";
                    _logger.Error(error);

                    return(new BadRequestObjectResult(error));
                }

                IDictionary <string, CalcModels.CalculationMetadata> calculations = calculationsResponse.Content.ToDictionary(_ => _.CalculationId);

                ProviderResultResponse providerResultResponse = _mapper.Map <ProviderResultResponse>(providerResult);

                foreach (CalculationResultResponse calculationResult in providerResultResponse.CalculationResults)
                {
                    calculationResult.CalculationValueType = _mapper.Map <CalculationValueType>(calculations[calculationResult.Calculation.Id].ValueType);
                }

                return(new OkObjectResult(providerResultResponse));
            }

            _logger.Information($"A result was not found for provider id {providerId}, specification id {specificationId}");

            return(new NotFoundResult());
        }