public void Ok()
        {
            ImmunizationViewResponse expectedViewResponse = new ImmunizationViewResponse()
            {
                Id                 = Guid.NewGuid(),
                SourceSystemId     = "mockSourceSystemId",
                Name               = "mockName",
                OccurrenceDateTime = DateTime.ParseExact("2020/09/10 17:16:10.809", "yyyy/MM/dd HH:mm:ss.fff", CultureInfo.InvariantCulture)
            };

            PHSAResult <ImmunizationResponse> phsaResponse = new PHSAResult <ImmunizationResponse>()
            {
                Result = new ImmunizationResponse()
                {
                    ImmunizationViews = new List <ImmunizationViewResponse>()
                    {
                        expectedViewResponse
                    }
                }
            };

            string json = JsonSerializer.Serialize(phsaResponse, null);

            using Microsoft.Extensions.Logging.ILoggerFactory loggerFactory = LoggerFactory.Create(builder => builder.AddConsole());
            IHttpClientService httpClientService = GetHttpClientService(HttpStatusCode.OK, json);

            IImmunizationDelegate immsDelegate = new RestImmunizationDelegate(loggerFactory.CreateLogger <RestImmunizationDelegate>(), httpClientService, this.configuration);
            var actualResult = immsDelegate.GetImmunizations("token", 0).Result;

            Assert.Equal(Common.Constants.ResultType.Success, actualResult.ResultStatus);
            Assert.NotNull(actualResult.ResourcePayload);
            Assert.Equal(1, actualResult.ResourcePayload.Result.ImmunizationViews.Count());
        }
Beispiel #2
0
        /// <inheritdoc/>
        public async Task <RequestResult <IEnumerable <LaboratoryOrder> > > GetLaboratoryOrders(string bearerToken, string hdid, int pageIndex = 0)
        {
            using (Source.StartActivity("GetLaboratoryOrders"))
            {
                RequestResult <IEnumerable <LaboratoryOrder> > retVal = new RequestResult <IEnumerable <LaboratoryOrder> >()
                {
                    ResultStatus = Common.Constants.ResultType.Error,
                    PageIndex    = pageIndex,
                };

                this.logger.LogDebug($"Getting laboratory orders...");
                using HttpClient client = this.httpClientService.CreateDefaultHttpClient();
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", bearerToken);
                client.DefaultRequestHeaders.Accept.Add(
                    new MediaTypeWithQualityHeaderValue(MediaTypeNames.Application.Json));
                var query = new Dictionary <string, string?>
                {
                    ["limit"]       = this.labConfig.FetchSize,
                    ["subjectHdid"] = hdid,
                };
                try
                {
                    Uri endpoint = new Uri(QueryHelpers.AddQueryString(this.labConfig.Endpoint, query));
                    HttpResponseMessage response = await client.GetAsync(endpoint).ConfigureAwait(true);

                    string payload = await response.Content.ReadAsStringAsync().ConfigureAwait(true);

                    this.logger.LogTrace($"Response: {response}");
                    switch (response.StatusCode)
                    {
                    case HttpStatusCode.OK:
                        var options = new JsonSerializerOptions
                        {
                            PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
                            IgnoreNullValues     = true,
                            WriteIndented        = true,
                        };
                        this.logger.LogTrace($"Response payload: {payload}");
                        PHSAResult <List <LaboratoryOrder> >?phsaResult = JsonSerializer.Deserialize <PHSAResult <List <LaboratoryOrder> > >(payload, options);
                        if (phsaResult != null && phsaResult.Result != null)
                        {
                            retVal.ResultStatus     = Common.Constants.ResultType.Success;
                            retVal.ResourcePayload  = phsaResult.Result;
                            retVal.TotalResultCount = phsaResult.Result.Count;
#pragma warning disable CA1305 // Specify IFormatProvider
                            retVal.PageSize = int.Parse(this.labConfig.FetchSize);
#pragma warning restore CA1305 // Specify IFormatProvider
                        }
                        else
                        {
                            retVal.ResultError = new RequestResultError()
                            {
                                ResultMessage = "Error with JSON data", ErrorCode = ErrorTranslator.ServiceError(ErrorType.CommunicationExternal, ServiceType.PHSA)
                            };
                        }

                        break;

                    case HttpStatusCode.NoContent:     // No Lab exits for this user
                        retVal.ResultStatus     = Common.Constants.ResultType.Success;
                        retVal.ResourcePayload  = new List <LaboratoryOrder>();
                        retVal.TotalResultCount = 0;
#pragma warning disable CA1305 // Specify IFormatProvider
                        retVal.PageSize = int.Parse(this.labConfig.FetchSize);
#pragma warning restore CA1305 // Specify IFormatProvider
                        break;

                    case HttpStatusCode.Forbidden:
                        retVal.ResultError = new RequestResultError()
                        {
                            ResultMessage = $"DID Claim is missing or can not resolve PHN, HTTP Error {response.StatusCode}", ErrorCode = ErrorTranslator.ServiceError(ErrorType.CommunicationExternal, ServiceType.PHSA)
                        };
                        break;

                    default:
                        retVal.ResultError = new RequestResultError()
                        {
                            ResultMessage = $"Unable to connect to Labs Endpoint, HTTP Error {response.StatusCode}", ErrorCode = ErrorTranslator.ServiceError(ErrorType.CommunicationExternal, ServiceType.PHSA)
                        };
                        this.logger.LogError($"Unable to connect to endpoint {endpoint}, HTTP Error {response.StatusCode}\n{payload}");
                        break;
                    }
                }
#pragma warning disable CA1031 // Do not catch general exception types
                catch (Exception e)
#pragma warning restore CA1031 // Do not catch general exception types
                {
                    retVal.ResultError = new RequestResultError()
                    {
                        ResultMessage = $"Exception getting Lab Orders: {e}", ErrorCode = ErrorTranslator.ServiceError(ErrorType.CommunicationExternal, ServiceType.PHSA)
                    };
                    this.logger.LogError($"Unexpected exception in Get Lab Orders {e}");
                }

                this.logger.LogDebug($"Finished getting Laboratory Orders");
                return(retVal);
            }
        }