Example #1
0
        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);
        }
Example #2
0
        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();
        }
Example #3
0
        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
            });
        }
Example #4
0
        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);
        }
Example #5
0
        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();
        }