Exemplo n.º 1
0
        public async Task RESTRequestTest_GetNullServiceParams()
        {
            RESTRequestParameters parameters = null;

            var response = await _restRequest.Get(parameters);

            Assert.NotEmpty(response.Error);
            Assert.Contains(response.Error, e => e.Message.Contains("Service request parameters are null"));
            Assert.Contains(response.Error, e => e.ErrorLevel.Equals(LogLevel.Error));
        }
Exemplo n.º 2
0
        public async Task RESTRequestTest_PostNullRequest()
        {
            var parameters = new RESTRequestParameters()
            {
                Url = "https://example.com"
            };

            var response = await _restRequest.Post(parameters, null);

            Assert.NotEmpty(response.Error);
            Assert.Contains(response.Error, e => e.Message.Contains("Invalid request object"));
            Assert.Contains(response.Error, e => e.ErrorLevel.Equals(LogLevel.Error));
        }
Exemplo n.º 3
0
        public async Task RESTRequestTest_GetRequest()
        {
            var headers = new Dictionary <string, string>()
            {
                { "OperationId", $"{Guid.NewGuid()}" }
            };
            var parameters = new RESTRequestParameters()
            {
                Url = "https://example.com", Headers = headers
            };

            var response = await _restRequest.Get(parameters);

            Assert.NotNull(response.Result);
            Assert.Empty(response.Error);
            Assert.Equal(_testOutputClass.Message, response.Result.Message);
        }
Exemplo n.º 4
0
        public async Task RESTRequestTest_GetRequestWithQueryString()
        {
            var headers = new Dictionary <string, string>()
            {
                { "OperationId", $"{Guid.NewGuid()}" }
            };
            var parameters = new RESTRequestParameters()
            {
                Url = "https://example.com", Headers = headers
            };
            var query = new Dictionary <string, string>()
            {
                { "input", "1234 street, city, state 12345" },
                { "key", "AFB139F" },
                { "sessiontoken", "12345" }
            };

            var response = await new RESTRequest <OutputClass, Dictionary <string, string> >(_httpClient).Get(parameters, query);

            Assert.NotNull(response.Result);
            Assert.Empty(response.Error);
            Assert.Equal(_testOutputClass.Message, response.Result.Message);
        }
Exemplo n.º 5
0
 public Task <BusinessResult <TResult> > Post(RESTRequestParameters parameters, TRequest serviceRequest)
 {
     return(null);
 }
        /// <summary>
        /// Place Autocomplete search request and response processor
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public async Task <BusinessResult <SearchPlacesResponse> > ExecuteAsync(SearchPlacesRequest request)
        {
            var result = new BusinessResult <SearchPlacesResponse>()
            {
                Result = new SearchPlacesResponse()
            };

            if (request == null)
            {
                result.Error.Add(new BusinessError($"{this.GetType().FullName}.ExecuteAsync", LogLevel.Error,
                                                   "Invalid request: request object is null", null, null));
                return(result);
            }

            if (string.IsNullOrEmpty(request.Address))
            {
                result.Error.Add(new BusinessError($"{this.GetType().FullName}.ExecuteAsync", LogLevel.Error,
                                                   "Invalid request:  search address  is invalid", null, request?.OperationId));
                return(result);
            }

            if (string.IsNullOrEmpty(request.ApiKey))
            {
                result.Error.Add(new BusinessError($"{this.GetType().FullName}.ExecuteAsync", LogLevel.Error,
                                                   "Invalid ApiKey", null, request?.OperationId));
                return(result);
            }

            if (string.IsNullOrWhiteSpace(request.OperationId))
            {
                request.OperationId = $"{Guid.NewGuid()}";
            }

            try
            {
                //  generate request
                var restServiceParameters = new RESTRequestParameters()
                {
                    Url = request.PlaceBaseUrl,
                    CancellationToken = request.CancellationToken,
                };
                var restRequest = CreateRequestDictionary(request);

                //  make service request
                var restService = await _restService.Get(restServiceParameters, restRequest.Result);

                result.Error.AddRange(restService.Error);

                //  check response status
                if (!string.IsNullOrEmpty(restService.Result?.Error_message))
                {
                    result.Error.Add(new BusinessError(LogLevel.Error, restService.Result.Error_message, null, request.OperationId));
                }
                if (!restService.Result?.Status?.Equals($"{PlaceResponseStatus.OK}") ?? true)
                {
                    result.Error.Add(new BusinessError(LogLevel.Error, $"Reponse Status: {restService.Result.Status}", null, request.OperationId));
                }

                if (result.Error.Count == 0)
                {
                    //  process response
                    result.Result.Status       = restService.Result.Status;
                    result.Result.SessionToken = request.SessionToken;
                    result.Result.OperationId  = string.IsNullOrEmpty(result.Result.OperationId)
                                                    ? request.OperationId
                                                    : result.Result.OperationId;

                    result.Result.Predictions = new List <SearchPlacePrediction>();
                    foreach (var predicition in restService.Result.Predictions)
                    {
                        var searchPlacePredicition = new SearchPlacePrediction()
                        {
                            Description    = predicition.Description,
                            Id             = predicition.Id,
                            PlaceId        = predicition.Place_id,
                            Reference      = predicition.Reference,
                            Types          = predicition.Types.ToList(),
                            DistanceMeters = predicition.Distance_meters,
                        };
                        result.Result.Predictions.Add(searchPlacePredicition);
                    }
                }
            }
            catch (Exception ex)
            {
                result.Error.Add(new BusinessError($"{this.GetType().FullName}.ExecuteAsync", LogLevel.Critical, "Exception found", ex, request.OperationId));
            }

            return(result);
        }