public void RetrievePetByType_WhenAPIReturnsValidResponse_ReturnsValidPetsCountForEachGender(string ownerGender, int petsCount) { // Arrange OwnerPetsData ownerPetsData = new OwnerPetsData(); ownerPetsData.Owners = new List <Owners>() { new Owners() { Age = 20, Gender = "Male", Name = "John", Pets = new List <Pet>() { new Pet() { Name = "Tom", Type = "Cat" }, new Pet() { Name = "Garfield", Type = "Dog" } } }, new Owners() { Age = 30, Gender = "Female", Name = "John", Pets = new List <Pet>() { new Pet() { Name = "Tomy", Type = "Cat" }, } }, new Owners() { Age = 20, Gender = "Male", Name = "Johnny", Pets = new List <Pet>() { new Pet() { Name = "Fido", Type = "Cat" }, } } }; _moqPetsDataAccess.Setup(m => m.RetrievePets()).Returns(ownerPetsData); // Act PetsByGenderResponse petsByGender = _petsBusinessLogic.RetreivePetsByType("Cat"); //Assert Assert.IsTrue(petsByGender.PetsByGenderList.Where(p => p.Gender == ownerGender).First().petsList.Count == petsCount); }
public void RetrievePetByType_WhenAPIReturnsValidResponse_ReturnPetsGroupedByGender() { // Arrange OwnerPetsData ownerPetsData = new OwnerPetsData(); ownerPetsData.Owners = new List <Owners>() { new Owners() { Age = 20, Gender = "Male", Name = "John", Pets = new List <Pet>() { new Pet() { Name = "Tom", Type = "Cat" }, new Pet() { Name = "Garfield", Type = "Dog" } } }, new Owners() { Age = 30, Gender = "Female", Name = "John", Pets = new List <Pet>() { new Pet() { Name = "Tomy", Type = "Cat" }, } }, new Owners() { Age = 20, Gender = "Male", Name = "Johnny", Pets = new List <Pet>() { new Pet() { Name = "Fido", Type = "Cat" }, } } }; _moqPetsDataAccess.Setup(m => m.RetrievePets()).Returns(ownerPetsData); // Act PetsByGenderResponse petsByGender = _petsBusinessLogic.RetreivePetsByType("Cat"); //Assert Assert.IsTrue(petsByGender.PetsByGenderList[0].Gender == "Male" && petsByGender.PetsByGenderList[1].Gender == "Female"); }
public void WhenAPIReturnsValidResponse_NoErrorsInResponse() { //Act OwnerPetsData ownerPetsData = _petsDataAccess.RetrievePets(); // Assert Assert.IsTrue(ownerPetsData.Errors.Count == 0 && ownerPetsData.Owners.Count > 0); }
public void GroupPetsByGender_WhenPassedPetsOfBothGender_ReturnedPetsGroupedByMaleAndFemaleWithProperCount(string gender, int ownerCountByGender) { // Arrange OwnerPetsData ownerPetsData = new OwnerPetsData(); ownerPetsData.Owners = new List <Owners>() { new Owners() { Age = 20, Gender = "Male", Name = "John", Pets = new List <Pet>() { new Pet() { Name = "Tom", Type = "Cat" }, new Pet() { Name = "Garfield", Type = "Dog" } } }, new Owners() { Age = 30, Gender = "Female", Name = "John", Pets = new List <Pet>() { new Pet() { Name = "Tomy", Type = "Cat" }, } }, new Owners() { Age = 20, Gender = "Male", Name = "Johnny", Pets = new List <Pet>() { new Pet() { Name = "Fido", Type = "Cat" }, } } }; // Act Dictionary <string, List <List <Pet> > > petsGroups = _petsBusinessLogic.GroupPetsByOwnerGender(ownerPetsData); // Assert Assert.AreEqual(petsGroups[gender].Count, ownerCountByGender, string.Format("Invalid number of {0} Owner(s) in the result", gender)); }
public void GroupPetsByGender_WhenOnlyOneGenderHasPets_ReturnPetsGroupedOnlyForThatGender(string gender) { // Arrange OwnerPetsData ownerPetsData = new OwnerPetsData(); ownerPetsData.Owners = new List <Owners>() { new Owners() { Age = 20, Gender = gender, Name = "John", Pets = new List <Pet>() { new Pet() { Name = "Tom", Type = "Cat" }, new Pet() { Name = "Garfield", Type = "Dog" } } }, new Owners() { Age = 30, Gender = gender, Name = "John", Pets = new List <Pet>() { new Pet() { Name = "Tomy", Type = "Cat" }, } }, new Owners() { Age = 20, Gender = gender, Name = "Johnny", Pets = new List <Pet>() { new Pet() { Name = "Fido", Type = "Cat" }, } } }; // Act Dictionary <string, List <List <Pet> > > petsGroups = _petsBusinessLogic.GroupPetsByOwnerGender(ownerPetsData); // Assert Assert.IsTrue(petsGroups.Keys.Count == 1 && petsGroups.ContainsKey(gender)); }
public void GroupPetsByGender_WhenBothOwnersHasPets_ShouldReturnPetsOfBothOwners() { // Arrange OwnerPetsData ownerPetsData = new OwnerPetsData(); ownerPetsData.Owners = new List <Owners>() { new Owners() { Age = 20, Gender = "Male", Name = "John", Pets = new List <Pet>() { new Pet() { Name = "Tom", Type = "Cat" }, new Pet() { Name = "Garfield", Type = "Dog" } } }, new Owners() { Age = 30, Gender = "Female", Name = "John", Pets = new List <Pet>() { new Pet() { Name = "Tomy", Type = "Cat" }, } }, new Owners() { Age = 20, Gender = "Male", Name = "Johnny", Pets = new List <Pet>() { new Pet() { Name = "Fido", Type = "Cat" }, } } }; // Act Dictionary <string, List <List <Pet> > > petsGroups = _petsBusinessLogic.GroupPetsByOwnerGender(ownerPetsData); // Assert Assert.IsTrue(petsGroups.Keys.Count == 2 && petsGroups.ContainsKey("Male") && petsGroups.ContainsKey("Female"), "Male Or Female Owner are not present in group"); }
public void WhenCalled_UndhandledExceptionOccurs_ThrowsException() { // Arrange _moqClient.Setup(m => m.Execute <List <Owners> >(It.IsAny <IRestRequest>())).Throws(new NullReferenceException("Object reference not set to an instance")); //Act OwnerPetsData ownerPetsData = _petsDataAccess.RetrievePets(); //Assert Assert.IsTrue(ownerPetsData.Errors.Any(e => e.ErrorMessage == "Object reference not set to an instance")); }
public void GroupPetsByGender_WhenSingleOwnerHasNoPets_OwnerWithoutPetsIgnoredWhileGrouping() { // Arrange OwnerPetsData ownerPetsData = new OwnerPetsData(); ownerPetsData.Owners = new List <Owners>() { new Owners() { Age = 20, Gender = "Male", Name = "John", Pets = new List <Pet>() { new Pet() { Name = "Tom", Type = "Cat" }, new Pet() { Name = "Garfield", Type = "Dog" } } }, new Owners() { Age = 30, Gender = "Female", Name = "John", Pets = new List <Pet>() { new Pet() { Name = "Tomy", Type = "Cat" }, } }, new Owners() { Age = 20, Gender = "Male", Name = "Johnny", Pets = null } }; // Act Dictionary <string, List <List <Pet> > > petsGroups = _petsBusinessLogic.GroupPetsByOwnerGender(ownerPetsData); // Assert Assert.AreEqual(1, petsGroups["Male"].Count, "Owner count does not match"); }
public void WhenInvokedAPI_WithInvalidBaseUri_ShouldReturnError() { // Arrange ConfigurationManager.AppSettings["BaseUri"] = "http://agl-developer-test.azurewebsites.com"; // Invalid base uri ConfigurationManager.AppSettings["RetrievePetsUri"] = "/people.json"; _petsDataAccess = new PetsDataAccess(new RestClient()); //Act OwnerPetsData ownerPetsData = _petsDataAccess.RetrievePets(); // Assert Assert.IsTrue(ownerPetsData.Errors.Any(error => error.StatusCode == 0 && !string.IsNullOrEmpty(error.ErrorMessage))); }
public void WhenInvokedAPIWithInvalidResourceUri_ShouldReturn404NotFoundError() { // Arrange ConfigurationManager.AppSettings["BaseUri"] = "http://agl-developer-test.azurewebsites.net"; ConfigurationManager.AppSettings["RetrievePetsUri"] = "/people.jso"; // Inject invalid resource uri _petsDataAccess = new PetsDataAccess(new RestClient()); //Act OwnerPetsData ownerPetsData = _petsDataAccess.RetrievePets(); // Assert Assert.IsTrue(ownerPetsData.Errors.Any(error => error.StatusCode == HttpStatusCode.NotFound && !string.IsNullOrEmpty(error.ErrorMessage))); }
/// <summary> /// Group pets by Owner's gender /// </summary> /// <param name="ownerPetsData"></param> /// <returns></returns> public Dictionary <string, List <List <Pet> > > GroupPetsByOwnerGender(OwnerPetsData ownerPetsData) { Dictionary <string, List <List <Pet> > > ownerpetsDic = new Dictionary <string, List <List <Pet> > >(); var ownerGroupedByGender = (from owner in ownerPetsData.Owners where owner.Pets != null group owner.Pets by owner.Gender into petsGrp select new { Gender = petsGrp.Key, Pets = petsGrp.ToList() }); foreach (var genderGrp in ownerGroupedByGender) { ownerpetsDic.Add(genderGrp.Gender, genderGrp.Pets); } return(ownerpetsDic); }
public void WhenCalled_APIRespondsOtherthanSuccess_ReturnsErrorsinResponse(HttpStatusCode statusCode, string errorMessage) { // Arrange var restResponse = new RestResponse <List <Owners> >() { StatusCode = statusCode, ErrorException = new Exception(errorMessage) }; _moqClient.Setup(m => m.Execute <List <Owners> >(It.IsAny <IRestRequest>())).Returns(restResponse); //Act OwnerPetsData ownerPetsData = _petsDataAccess.RetrievePets(); // Assert Assert.IsTrue(ownerPetsData.Errors.Any(error => error.StatusCode == statusCode && error.ErrorMessage == errorMessage)); }
/// <summary> /// Retrieve pets by calling the api /// </summary> /// <returns></returns> public OwnerPetsData RetrievePets() { OwnerPetsData ownerPetsData = new OwnerPetsData(); IRestRequest request; try { _client.BaseUrl = new Uri(PetsBaseUri); request = new RestRequest(ResourceUri, Method.GET); // call the api var restResponse = _client.Execute <List <Owners> >(request); // Api returns successful response if (restResponse.StatusCode == HttpStatusCode.OK) { ownerPetsData.Owners = restResponse.Data; } else { // Api returned invalid response, map the exception Error error = new Error(); error.ErrorMessage = restResponse.ErrorException.Message; error.StatusCode = restResponse.StatusCode; ownerPetsData.Errors.Add(error); } } //RestSharp.dll returns all the exceptions in the RestResponse.ErrorException object. // Hence handling only generic exceptions catch (Exception ex) { ownerPetsData.Errors.Add(new Error { ErrorMessage = ex.Message, StatusCode = HttpStatusCode.InternalServerError }); } return(ownerPetsData); }
public void RetrievePetByType_WhenErrorOccurredinDataAccess_ReturnErrorsInResponse() { // Arrange OwnerPetsData ownerPetsData = new OwnerPetsData { Errors = new List <Error> { new Error() { ErrorMessage = "The remote name could not be resolved: 'agl-developer-test.azurewebsites.net'", StatusCode = 0 } } }; _moqPetsDataAccess.Setup(m => m.RetrievePets()).Returns(ownerPetsData); // Act PetsByGenderResponse petsByGender = _petsBusinessLogic.RetreivePetsByType("Cat"); //Assert Assert.IsTrue(petsByGender.Errors.Any(error => error.ErrorMessage == "The remote name could not be resolved: 'agl-developer-test.azurewebsites.net'")); }
public PetsByGenderResponse RetreivePetsByType(string petType) { PetsByGenderResponse petsByGenderResponse = new PetsByGenderResponse(); List <PetsByGender> petsByGenderList = null; try { // Get data from Data Access OwnerPetsData ownerPetsData = _petsDataAccess.RetrievePets(); if (ownerPetsData != null && ownerPetsData?.Errors.Count == 0) { // Group pets by Owner gender Dictionary <string, List <List <Pet> > > petsGroupByOwnerGender = GroupPetsByOwnerGender(ownerPetsData); //Flatten pets under gender Dictionary <string, List <Pet> > flattenedPetsList = FlattenPetsByGenderList(petsGroupByOwnerGender); // Filter and sort pets by name petsByGenderList = FilterPetsByTypeandSortByName(flattenedPetsList, petType); petsByGenderResponse.PetsByGenderList = petsByGenderList; } else { // Map the errors to the response petsByGenderResponse.Errors = ownerPetsData.Errors; } } catch (Exception exception) { petsByGenderResponse.Errors.Add(new Error { ErrorMessage = exception.Message }); } return(petsByGenderResponse); }
public void WhenCalled_ApiReturnsValidResponse_ValidateValidIfResourceUriIsCalled() { // Arrange string resource = string.Empty; var Owners = new List <Owners>() { new Owners() { Age = 20, Gender = "Male", Name = "Sasank", Pets = new List <Pet>() { new Pet() { Name = "Tommy", Type = "Dog" } } } }; var restResponse = new RestResponse <List <Owners> >() { Data = Owners, StatusCode = HttpStatusCode.OK }; _moqClient.Setup(m => m.Execute <List <Owners> >(It.IsAny <IRestRequest>())).Returns(restResponse). Callback <IRestRequest>(rq => { resource = rq.Resource; }); //Act OwnerPetsData ownerPetsData = _petsDataAccess.RetrievePets(); // Assert Assert.AreEqual(_resourceUri, resource); }
public void GroupPetsByGender_WhenNoOwnerHasPets_ShouldNotContainAnyPetsInResponse() { // Arrange OwnerPetsData ownerPetsData = new OwnerPetsData(); ownerPetsData.Owners = new List <Owners>() { new Owners() { Age = 20, Gender = "Male", Name = "John", Pets = null }, new Owners() { Age = 30, Gender = "Female", Name = "John", Pets = null }, new Owners() { Age = 20, Gender = "Male", Name = "Johnny", Pets = null } }; // Act Dictionary <string, List <List <Pet> > > petsGroups = _petsBusinessLogic.GroupPetsByOwnerGender(ownerPetsData); // Assert Assert.AreEqual(0, petsGroups.Count, "Expected count of Owners is not Zero"); }