示例#1
0
        public void ToSearchIllnessesResponse_Should_Map_Correctly()
        {
            var source = new IllnessesResponse
            {
                _embedded = new IllnessesObject
                {
                    Illnesses = new []
                    {
                        new AzureIllness {
                            Illness = new IllnessObject {
                                Id = 1
                            }
                        },
                        new AzureIllness {
                            Illness = new IllnessObject {
                                Id = 2
                            }
                        },
                        new AzureIllness {
                            Illness = new IllnessObject {
                                Id = 3
                            }
                        }
                    }
                },
                Page = new PageObject {
                    Number = 123
                }
            };

            var actual = source.ToSearchIllnessesResponse();

            actual.Data.Should().HaveSameCount(source._embedded.Illnesses);
            actual.CurrentPageIndex.Should().Be(source.Page.Number);
        }
示例#2
0
        public void ToSearchIllnessesResponse_Should_Handle_Null()
        {
            IllnessesResponse source = null;

            var actual = source.ToSearchIllnessesResponse();

            actual.Should().BeNull();
        }
示例#3
0
        public void ToSearchIllnessesResponse_Should_Handle_Null_Embedded()
        {
            var source = new IllnessesResponse();

            var actual = source.ToSearchIllnessesResponse();

            actual.Should().BeNull();
        }
示例#4
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();
        }
示例#5
0
        public static SearchIllnessesResponse ToSearchIllnessesResponse(this IllnessesResponse source)
        {
            if (source == null || source._embedded == null)
            {
                return(null);
            }

            var response = new SearchIllnessesResponse
            {
                Data = source._embedded.Illnesses.ToIllnessDetailsList(),
            };

            return(response.PopulatePageDetails(source.Page));
        }
示例#6
0
        public async void SearchIllnesses_Should_Call_Return_Correctly()
        {
            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 {
                                Id = 1
                            }
                        },
                        new AzureIllness
                        {
                            Illness = new IllnessObject {
                                Id = 2
                            }
                        },
                        new AzureIllness
                        {
                            Illness = new IllnessObject {
                                Id = 3
                            }
                        }
                    }
                },
                Page = new PageObject
                {
                    Number        = 123,
                    Size          = 456,
                    TotalElements = 789,
                    TotalPages    = 111
                }
            };
            var expected = response.ToSearchIllnessesResponse();

            _apiClient.Send(Arg.Any <HttpRequestMessage>(), Arg.Any <Func <HttpResponseMessage, Task <IllnessesResponse> > >()).Returns(response);

            var actual = await _repository.SearchIllnesses(new SearchIllnessesRequest());

            actual.Should().BeEquivalentTo(expected);

            request.Dispose();
        }
示例#7
0
        public async void SearchIllnesses_Should_Call_IApiClient_Send()
        {
            Func <HttpResponseMessage, Task <IllnessesResponse> > mapper = null;
            var request = new HttpRequestMessage();

            _requestProvider.CreateGetRequest(Arg.Any <string>()).Returns(request);
            await _apiClient.Send(Arg.Any <HttpRequestMessage>(), Arg.Do <Func <HttpResponseMessage, Task <IllnessesResponse> > >(a => mapper = a));

            await _repository.SearchIllnesses(new SearchIllnessesRequest());

            await _apiClient.Received(1).Send <IllnessesResponse>(request, Arg.Any <Func <HttpResponseMessage, Task <IllnessesResponse> > >());

            var expected = new IllnessesResponse
            {
                _embedded = new IllnessesObject
                {
                    Illnesses = new []
                    {
                        new AzureIllness
                        {
                            Illness = new IllnessObject {
                                Id = 1
                            }
                        }
                    }
                },
                Page = new PageObject {
                    Number = 123
                }
            };
            var body = JObject.FromObject(expected);

            var response = new HttpResponseMessage();

            response.Content = new StringContent(body.ToString());
            var actual = await mapper(response);

            actual.Should().BeEquivalentTo(expected);

            request.Dispose();
        }
示例#8
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();
        }