/// <summary> /// Builds a valid Establishment Search API URL. /// </summary> /// <param name="endpoint">The endpoint for the search API.</param> /// <param name="criteria">The criteria to search.</param> /// <returns></returns> private string BuildEstablishmentCriteriaUrl(string endpoint, EstablishmentSearchCriteria criteria) { var queryStringParameters = new List <string>(); if (criteria != null) { AddQueryKeyValueToSource(EntityConstants.EstablishmentSearchCriteriaKeys.Name, criteria.Name, queryStringParameters); AddQueryKeyValueToSource(EntityConstants.EstablishmentSearchCriteriaKeys.Address, criteria.Address, queryStringParameters); AddQueryKeyValueToSource(EntityConstants.EstablishmentSearchCriteriaKeys.Longitude, criteria.Longitude, queryStringParameters); AddQueryKeyValueToSource(EntityConstants.EstablishmentSearchCriteriaKeys.Latitude, criteria.Latitude, queryStringParameters); AddQueryKeyValueToSource(EntityConstants.EstablishmentSearchCriteriaKeys.MaxDistanceLimit, criteria.MaxDistanceLimit, queryStringParameters); AddQueryKeyValueToSource(EntityConstants.EstablishmentSearchCriteriaKeys.BusinessTypeId, criteria.BusinessTypeId, queryStringParameters); AddQueryKeyValueToSource(EntityConstants.EstablishmentSearchCriteriaKeys.SchemeTypeKey, criteria.SchemeTypeKey, queryStringParameters); AddQueryKeyValueToSource(EntityConstants.EstablishmentSearchCriteriaKeys.RatingKey, criteria.RatingKey, queryStringParameters); AddQueryKeyValueToSource(EntityConstants.EstablishmentSearchCriteriaKeys.RatingOperatorKey, criteria.RatingOperatorKey, queryStringParameters); AddQueryKeyValueToSource(EntityConstants.EstablishmentSearchCriteriaKeys.LocalAuthorityId, criteria.LocalAuthorityId, queryStringParameters); AddQueryKeyValueToSource(EntityConstants.EstablishmentSearchCriteriaKeys.CountryId, criteria.CountryId, queryStringParameters); AddQueryKeyValueToSource(EntityConstants.EstablishmentSearchCriteriaKeys.SortOptionKey, criteria.SortOptionKey, queryStringParameters); AddQueryKeyValueToSource(EntityConstants.EstablishmentSearchCriteriaKeys.PageNumber, criteria.PageNumber, queryStringParameters); AddQueryKeyValueToSource(EntityConstants.EstablishmentSearchCriteriaKeys.PageSize, criteria.PageSize, queryStringParameters); } return(queryStringParameters.Any() ? $"{HttpConstants.FhrHttpProtocol}://{HttpConstants.FhrBaseApiUrl}/{endpoint}?{string.Join("&", queryStringParameters)}" : $"{HttpConstants.FhrHttpProtocol}://{HttpConstants.FhrBaseApiUrl}/{endpoint}"); }
/// <inheritdoc /> public async Task <FhrResponse <Establishments> > GetBasicAsync(EstablishmentSearchCriteria criteria) { var url = BuildEstablishmentCriteriaUrl(HttpConstants.Endpoints.EstablishmentsBasic, criteria); var response = await _httpService.GetAsync <Establishments>(url); return(response); }
public async Task ProvidesCorrectEncodedApiUrlWhenCriteriaExists(string name) { // Arrange MockHttpProvider .Setup(http => http.GetAsync(It.IsAny <string>(), It.IsAny <IDictionary <string, string> >())) .Returns(Task.FromResult(GenerateHttpResponse(string.Empty))); // Act var criteria = new EstablishmentSearchCriteria { Name = name }; await Service.GetBasicAsync(criteria); // Assert var expected = $"{HttpConstants.FhrHttpProtocol}://{HttpConstants.FhrBaseApiUrl}/Establishments/basic?name={WebUtility.UrlEncode(name)}&address=&longitude=&latitude=&maxDistanceLimit=&businessTypeId=&schemeTypeKey=&ratingKey=&ratingOperatorKey=&localAuthorityId=&countryId=&sortOptionKey=&pageNumber=&pageSize="; MockHttpProvider.Verify(http => http.GetAsync(It.Is <string>(s => s == expected), It.IsAny <IDictionary <string, string> >())); }