public async void SearchIllnesses_Should_Call_IApiRequestProvider_CreateGetRequest(int?itemsPerPage, int?pageIndex, string expectedLimit, string expectedPage) { var details = new SearchIllnessesRequest { ItemsPerPage = itemsPerPage, PageIndex = pageIndex }; await _repository.SearchIllnesses(details); var query = new List <string>(); if (expectedLimit != null) { query.Add($"limit={expectedLimit}"); } if (expectedPage != null) { query.Add($"page={expectedPage}"); } var queryString = query.Any() ? $"?{string.Join("&", query)}" : string.Empty; var url = $"{_database}/illnesses{queryString}"; _requestProvider.Received(1).CreateGetRequest(url); }
public async void SearchIllnesses_Should_Call_IRequestProvider_CreateGetRequest_Until_There_Are_No_More_Pages() { var request = new HttpRequestMessage(); _requestProvider.CreateGetRequest(Arg.Any <string>()).Returns(request); var embedded = new IllnessesObject { Illnesses = new [] { new AzureIllness { Illness = new IllnessObject { Name = "aaa" } } } }; var withNext = new LinksObject { Next = new LinkObject { Href = "nextUrl" } }; var withoutNext = new LinksObject { Next = new LinkObject() }; var response1 = new IllnessesResponse { _embedded = embedded, _links = withNext }; var response2 = new IllnessesResponse { _embedded = embedded, _links = withNext }; var response3 = new IllnessesResponse { _embedded = embedded, _links = withoutNext }; _apiClient.Send(Arg.Any <HttpRequestMessage>(), Arg.Any <Func <HttpResponseMessage, Task <IllnessesResponse> > >()).Returns(response1, response2, response3); var url = $"{_database}/illnesses"; var search = new SearchIllnessesRequest { IllnessName = "aa" }; await _repository.SearchIllnesses(search); _requestProvider.Received(1).CreateGetRequest(url); _requestProvider.Received(2).CreateGetRequest(withNext.Next.Href); request.Dispose(); }
public async Task <SearchIllnessesResponse> SearchIllnesses(SearchIllnessesRequest request) { if (string.IsNullOrWhiteSpace(request.IllnessName)) { var nonFiltered = await SearchAzureIllnesses(request.ItemsPerPage, request.PageIndex); return(nonFiltered.ToSearchIllnessesResponse()); } var illnesses = await SearchAzureIllnesses(null, null); var list = new List <IllnessDetails>(); var next = illnesses._links?.Next?.Href; var items = illnesses._embedded.Illnesses.ToIllnessDetailsList(); var filtered = items.Where(i => i.Name.Contains(request.IllnessName, StringComparison.OrdinalIgnoreCase)); list.AddRange(filtered); var limit = request.ItemsPerPage ?? DEFAULT_ITEMS_PER_PAGE; var page = request.PageIndex ?? 0; var maxItems = limit + (limit * page); while (list.Count() < maxItems && !string.IsNullOrWhiteSpace(next)) { illnesses = await SearchAzureIllnesses(next); next = illnesses._links?.Next?.Href; var nextItems = illnesses._embedded.Illnesses.ToIllnessDetailsList(); var nextFiltered = nextItems.Where(i => i.Name.Contains(request.IllnessName, StringComparison.OrdinalIgnoreCase)); list.AddRange(nextFiltered); } var response = list.GetPage(limit, page); var lastPageIndex = list.Count() / limit; var currentIndex = request.PageIndex ?? 0; var prevIndex = currentIndex > 0 ? currentIndex - 1 : (int?)null; var nextIndex = currentIndex < lastPageIndex ? currentIndex + 1 : (int?)null; return(new SearchIllnessesResponse { Data = response, CurrentPageIndex = currentIndex, PrevPageIndex = prevIndex, NextPageIndex = nextIndex }); }
public async void GetConditions_Should_Call_IHospitalRepository_SearchIllnesses() { SearchIllnessesRequest arg = null; _hospitalRepository.SearchIllnesses(Arg.Do <SearchIllnessesRequest>(a => arg = a)).Returns(new SearchIllnessesResponse()); var request = new GetConditionsRequest { Name = "name", PageIndex = 123 }; await _service.GetConditions(request); await _hospitalRepository.Received(1).SearchIllnesses(Arg.Any <SearchIllnessesRequest>()); arg.ItemsPerPage.Should().BeNull(); arg.IllnessName.Should().Be(request.Name); arg.PageIndex.Should().Be(request.PageIndex); }
public async void SearchIllnesses_Should_Call_IRequestProvider_CreateGetRequest_Until_Page_Is_Full(string name, int expectedExtraCall) { var request = new HttpRequestMessage(); _requestProvider.CreateGetRequest(Arg.Any <string>()).Returns(request); var response = new IllnessesResponse { _embedded = new IllnessesObject { Illnesses = new [] { new AzureIllness { Illness = new IllnessObject { Name = "aza" } }, new AzureIllness { Illness = new IllnessObject { Name = "zao" } }, new AzureIllness { Illness = new IllnessObject { Name = "2za" } }, new AzureIllness { Illness = new IllnessObject { Name = "aaz" } }, new AzureIllness { Illness = new IllnessObject { Name = "zae" } }, new AzureIllness { Illness = new IllnessObject { Name = "Zqw" } }, new AzureIllness { Illness = new IllnessObject { Name = "eZr" } }, new AzureIllness { Illness = new IllnessObject { Name = "zzZ" } }, new AzureIllness { Illness = new IllnessObject { Name = "jkz" } }, new AzureIllness { Illness = new IllnessObject { Name = "zop" } } } }, _links = new LinksObject { Next = new LinkObject { Href = "nextUrl" } } }; _apiClient.Send(Arg.Any <HttpRequestMessage>(), Arg.Any <Func <HttpResponseMessage, Task <IllnessesResponse> > >()).Returns(response); var url = $"{_database}/illnesses"; var search = new SearchIllnessesRequest { IllnessName = name }; await _repository.SearchIllnesses(search); _requestProvider.Received(1).CreateGetRequest(url); _requestProvider.Received(expectedExtraCall).CreateGetRequest(response._links.Next.Href); request.Dispose(); }