public void IfPostcodeQueryIsInvalidExecuteWillReturnBadRequest()
        {
            var postcode         = "E8881DY";
            var stubbedResidents = _fixture.CreateMany <ResidentInformation>(7);

            _mockhousingGateway.Setup(x =>
                                      x.GetAllResidents(null, 10, null, null, null, null, postcode, false))
            .Returns(Task.Run(() => stubbedResidents.ToList()));
            _mockPostcodeValidator.Setup(x => x.Execute(postcode)).Returns(false);

            var rqp = new ResidentQueryParam
            {
                HouseReference      = "000011",
                FirstName           = "ciasom",
                LastName            = "tessellate",
                Address             = "1 Montage street",
                Postcode            = postcode,
                ActiveTenanciesOnly = false
            };

            Func <Task <ResidentInformationList> > testDelegate = async() => await _classUnderTest.Execute(rqp, null, 10).ConfigureAwait(false);

            testDelegate.Should().Throw <InvalidQueryParameterException>()
            .WithMessage("The Postcode given does not have a valid format");
        }
        public static string BuildQueryDictionary(ResidentQueryParam rqp)
        {
            var queryDictionary = new Dictionary <string, string>();

            if (!string.IsNullOrEmpty(rqp.FirstName))
            {
                queryDictionary.Add("first_name", rqp.FirstName);
            }
            if (!string.IsNullOrEmpty(rqp.LastName))
            {
                queryDictionary.Add("last_name", rqp.LastName);
            }
            if (!string.IsNullOrEmpty(rqp.Address))
            {
                queryDictionary.Add("address", rqp.Address);
            }
            if (!string.IsNullOrEmpty(rqp.Postcode))
            {
                queryDictionary.Add("postcode", rqp.Postcode);
            }

            var rqpString = new FormUrlEncodedContent(queryDictionary).ReadAsStringAsync().Result;

            return(rqpString);
        }
        public async Task ListRecordsTest()
        {
            var residentInfo = new List <ResidentInformation>()
            {
                new ResidentInformation()
                {
                    Uprn        = "123456789",
                    FirstName   = "test",
                    LastName    = "test",
                    DateOfBirth = "01/01/2020"
                }
            };

            var residentInformationList = new ResidentInformationList()
            {
                Residents = residentInfo
            };

            var rqp = new ResidentQueryParam
            {
                FirstName = "Ciasom",
                LastName  = "Tessellate",
            };

            _mockGetAllResidentsUseCase.Setup(x => x.Execute(rqp, null, 10)).Returns(Task.Run(() => residentInformationList));
            var response = await _classUnderTest.ListRecords(rqp, null, 10).ConfigureAwait(false) as OkObjectResult;

            response.Should().NotBeNull();
            response.StatusCode.Should().Be(200);
            response.Value.Should().BeEquivalentTo(residentInformationList);
        }
        public void ListRecordsTest()
        {
            var residentInfo = new List <ResidentResponse>()
            {
                new ResidentResponse()
                {
                    Id          = 1234,
                    FirstName   = "test",
                    LastName    = "test",
                    DateOfBirth = new DateTime()
                }
            };

            var residentInformationList = new ResidentResponseList()
            {
                Residents = residentInfo
            };

            var rqp = new ResidentQueryParam
            {
                FirstName = "Ciasom",
                LastName  = "Tessellate",
            };

            _mockGetAllUseCase.Setup(x => x.Execute(rqp)).Returns(residentInformationList);
            var response = _classUnderTest.ListContacts(rqp) as OkObjectResult;

            response.Should().NotBeNull();
            response.StatusCode.Should().Be(200);
            response.Value.Should().BeEquivalentTo(residentInformationList);
        }
Esempio n. 5
0
        public void DoesNotCallGetResidentsBySearchCriteriaMethodWhenMosaicIdIsProvided()
        {
            var request = new ResidentQueryParam()
            {
                MosaicId = "43"
            };

            _mockDatabaseGateway.Setup(x => x.GetResidentsBySearchCriteria(0, 10, null, null, null, null, null, null, null))
            .Returns((new List <ResidentInformation>(), 0));

            _mockDatabaseGateway.Setup(x => x.GetPersonIdsByEmergencyId(It.IsAny <string>())).Returns(new List <long>());

            _residentUseCase.GetResidentsByQuery(request, cursor: 0, limit: 4);

            _mockDatabaseGateway.Verify(x => x.GetResidentsBySearchCriteria(
                                            It.IsAny <int>(),
                                            It.IsAny <int>(),
                                            It.IsAny <long>(),
                                            It.IsAny <string>(),
                                            It.IsAny <string>(),
                                            It.IsAny <string>(),
                                            It.IsAny <string>(),
                                            It.IsAny <string>(),
                                            It.IsAny <string>()),
                                        Times.Never);
        }
Esempio n. 6
0
        public async Task ExecuteReturnsContactInformationResponse()
        {
            var stubbedAcademyClaimant = _fixture.Create <AcademyClaimantInformation>();
            var stubbedHousingResident = _fixture.Create <HousingResidentInformation>();
            var stubbedMosaicResident  = _fixture.Create <MosaicResidentInformation>();

            var expectedResult = new List <ResidentInformationResult>();

            expectedResult.Add(new ResidentInformationResult
            {
                System    = "Academy",
                SystemId  = stubbedAcademyClaimant.ClaimId.ToString(),
                SystemUrl = new Uri(_academyUrl + $"api/v1/claimants/claim/{stubbedAcademyClaimant.ClaimId}/person/{stubbedAcademyClaimant.PersonRef}"),
                Data      = stubbedAcademyClaimant.ToResponse()
            });
            expectedResult.Add(new ResidentInformationResult
            {
                System    = "Housing",
                SystemId  = stubbedHousingResident.HouseReference,
                SystemUrl = new Uri(_housingUrl + $"api/v1/households/{stubbedHousingResident.HouseReference}/people/{stubbedHousingResident.PersonNumber}"),
                Data      = stubbedHousingResident.ToResponse()
            });
            expectedResult.Add(new ResidentInformationResult
            {
                System    = "Mosaic",
                SystemId  = stubbedMosaicResident.MosaicId,
                SystemUrl = new Uri(_mosaicUrl + $"api/v1/residents/{stubbedMosaicResident.MosaicId}"),
                Data      = stubbedMosaicResident.ToResponse()
            });

            var rqp = new ResidentQueryParam()
            {
                FirstName = "ciasom",
                LastName  = "tessellate",
                Postcode  = "E8 1DY",
                Address   = "1 Montage Street"
            };

            _mockAcademyGateway.Setup(x =>
                                      x.GetClaimantInformation(rqp))
            .Returns(Task.FromResult(new List <AcademyClaimantInformation> {
                stubbedAcademyClaimant
            }));
            _mockHousingGateway.Setup(x =>
                                      x.GetResidentInformation(rqp))
            .Returns(Task.FromResult(new List <HousingResidentInformation> {
                stubbedHousingResident
            }));
            _mockMosaicGateway.Setup(x =>
                                     x.GetResidentInformation(rqp))
            .Returns(Task.FromResult(new List <MosaicResidentInformation> {
                stubbedMosaicResident
            }));

            var response = await _classUnderTest.Execute(rqp).ConfigureAwait(true);

            response.Should().NotBeNull();
            response.Results.Should().BeEquivalentTo(expectedResult);
        }
        public async Task GetResidentInformationThrowsErrorIfAPIReturnsBadRequest()
        {
            var rqp = new ResidentQueryParam();

            TestHelper.SetUpMessageHandlerToReturnErrorCode(_messageHandler);
            Func <Task <List <MosaicResidentInformation> > > testFunction = () => _classUnderTest.GetResidentInformation(rqp);

            await testFunction.Should().ThrowAsync <HttpRequestException>().ConfigureAwait(true);
        }
        public async Task ApiTokenSuccessfullyCalled()
        {
            var rqp = new ResidentQueryParam();

            TestHelper.SetUpMessageHandlerToReturnJson(_messageHandler, "residents", expectedJsonString: "{residents: []}", expectedApiToken: "secretKey");
            await _classUnderTest.GetResidentInformation(rqp).ConfigureAwait(true);

            _messageHandler.Verify();
        }
        public async Task GetResidentInformationReturnsEmptyArrayIfNoResultsFound()
        {
            var rqp = new ResidentQueryParam();

            TestHelper.SetUpMessageHandlerToReturnJson(_messageHandler, "residents", expectedJsonString: "{residents: []}");
            var received = await _classUnderTest.GetResidentInformation(rqp).ConfigureAwait(true);

            received.Should().BeEmpty();
            received.Should().NotBeNull();
        }
Esempio n. 10
0
        public void CallsGetResidentsBySearchCriteriaMethodWhenMosaicIdIsNotProvided()
        {
            var request = new ResidentQueryParam();

            _mockDatabaseGateway.Setup(x => x.GetResidentsBySearchCriteria(0, 10, null, null, null, null, null, null, null))
            .Returns((new List <ResidentInformation>(), 0)).Verifiable();

            _residentUseCase.GetResidentsByQuery(request, cursor: 0, limit: 4);

            _mockDatabaseGateway.Verify();
        }
Esempio n. 11
0
 public async Task <IActionResult> ListRecords([FromQuery] ResidentQueryParam rqp, string cursor = null, int?limit = 20)
 {
     try
     {
         return(Ok(await _getAllResidentsUseCase.Execute(rqp, cursor, (int)limit).ConfigureAwait(false)));
     }
     catch (InvalidQueryParameterException e)
     {
         return(BadRequest(e.Message));
     }
 }
        public void ListContactsReturns200WhenSuccessful()
        {
            var residentInformationList = _fixture.Create <ResidentInformationList>();
            var residentQueryParam      = new ResidentQueryParam();

            _mockResidentUseCase
            .Setup(x => x.GetResidentsByQuery(residentQueryParam, 2, 3))
            .Returns(residentInformationList);

            var response = _residentController.ListContacts(residentQueryParam, 2, 3) as OkObjectResult;

            response?.StatusCode.Should().Be(200);
            response?.Value.Should().BeEquivalentTo(residentInformationList);
        }
Esempio n. 13
0
        public void ReturnsTotalCountOfResultsInReturnObject()
        {
            var request = new ResidentQueryParam()
            {
                FirstName = "foo"
            };
            var totalCount = 3;

            _mockDatabaseGateway.Setup(x => x.GetResidentsBySearchCriteria(0, 10, null, request.FirstName, null, null, null, null, null)).Returns((new List <ResidentInformation>(), totalCount));

            var response = _residentUseCase.GetResidentsByQuery(request, 0, 1);

            response.TotalCount.Should().Be(totalCount);
        }
Esempio n. 14
0
        public ResidentResponseList Execute(ResidentQueryParam rqp)
        {
            var limit = rqp.Limit < 10 ? 10 : rqp.Limit;

            limit = rqp.Limit > 100 ? 100 : limit;

            var residents = _residentGateway
                            .GetResidents(limit, rqp.Cursor, rqp.FirstName, rqp.LastName).ToResponse();

            return(new ResidentResponseList
            {
                Residents = residents,
                NextCursor = GetNextCursor(residents, limit)
            });
        }
Esempio n. 15
0
        public void ReturnsEmptyListWhenMosaicIdIsProvidedInLettersOnlyFormat()
        {
            var request = new ResidentQueryParam()
            {
                MosaicId = "nonNumeric"
            };

            _residentUseCase
            .GetResidentsByQuery(request, cursor: 0, limit: 20)
            .Should()
            .BeEquivalentTo(new ResidentInformationList()
            {
                Residents = new List <ResidentInformation>()
            });
        }
        public async Task GetResidentInformationReturnsArrayOfResidentInformationObjects()
        {
            var rqp = new ResidentQueryParam {
                Address = "Address Line 1"
            };
            var expected     = _fixture.CreateMany <MosaicResidentInformation>();
            var expectedJson = JsonConvert.SerializeObject(expected);

            TestHelper.SetUpMessageHandlerToReturnJson(_messageHandler, "residents", "?address=" + rqp.Address, "{residents: " + expectedJson + "}");

            var received = await _classUnderTest.GetResidentInformation(rqp).ConfigureAwait(true);

            _messageHandler.Verify();
            received.Should().BeEquivalentTo(expected);
        }
        public async Task <IActionResult> ListContactsAsync([FromQuery] ResidentQueryParam rqp)
        {
            try
            {
                var response = await _listContactsUseCase.Execute(rqp).ConfigureAwait(true);

                return(Ok(response));
            }
            catch (InvalidQueryParameterException e)
            {
                return(BadRequest(e.Message));
            }
            catch (HttpRequestException e)
            {
                return(BadRequest(e.Message));
            }
        }
Esempio n. 18
0
        public async Task <List <MosaicResidentInformation> > GetResidentInformation(ResidentQueryParam rqp)
        {
            var rqpString = DictionaryBuilder.BuildQueryDictionary(rqp);
            var builder   = new UriBuilder();

            builder.Query = rqpString;
            var response = await _client.GetAsync(new Uri("api/v1/residents" + builder.Query, UriKind.Relative)).ConfigureAwait(true);

            //throw exception if not 200
            response.EnsureSuccessStatusCode();

            var content = await response.Content.ReadAsStringAsync().ConfigureAwait(true);

            var results = JsonConvert.DeserializeObject <MosaicResidentResponse>(content);

            return(results.Residents);
        }
        public async Task <ResidentInformationResponse> Execute(ResidentQueryParam rqp)
        {
            var academyClaimants = await _academyGateway.GetClaimantInformation(rqp).ConfigureAwait(true);

            var housingResidents = await _housingGateway.GetResidentInformation(rqp).ConfigureAwait(true);

            var mosaicResidents = await _mosaicGateway.GetResidentInformation(rqp).ConfigureAwait(true);

            var academyUrl = Environment.GetEnvironmentVariable("ACADEMY_API_URL");
            var housingUrl = Environment.GetEnvironmentVariable("HOUSING_API_URL");
            var mosaicUrl  = Environment.GetEnvironmentVariable("MOSAIC_API_URL");

            var academyResults = academyClaimants.Select(x =>
                                                         new ResidentInformationResult
            {
                System    = "Academy",
                SystemId  = x.ClaimId.ToString(),
                SystemUrl = new Uri(academyUrl + $"api/v1/claimants/claim/{x.ClaimId}/person/{x.PersonRef}"),
                Data      = x.ToResponse()
            });

            var housingResults = housingResidents.Select(x =>
                                                         new ResidentInformationResult
            {
                System    = "Housing",
                SystemId  = x.HouseReference.ToString(),
                SystemUrl = new Uri(housingUrl + $"api/v1/households/{x.HouseReference}/people/{x.PersonNumber}"),
                Data      = x.ToResponse()
            });

            var mosaicResults = mosaicResidents.Select(x =>
                                                       new ResidentInformationResult
            {
                System    = "Mosaic",
                SystemId  = x.MosaicId.ToString(),
                SystemUrl = new Uri(mosaicUrl + $"api/v1/residents/{x.MosaicId}"),
                Data      = x.ToResponse()
            });

            var allResults = academyResults.Concat(housingResults.Concat(mosaicResults));

            return(new ResidentInformationResponse
            {
                Results = allResults.ToList()
            });
        }
Esempio n. 20
0
        public void CallsGetPersonDetailsByIdWhenMosaicIdIsProvidedWithoutZeroPrefix(string mosaicId)
        {
            var request = new ResidentQueryParam()
            {
                MosaicId = mosaicId
            };

            _mockDatabaseGateway.Setup(x => x.GetPersonIdsByEmergencyId(It.IsAny <string>())).Returns(new List <long> {
                1, 2
            });
            _mockDatabaseGateway.Setup(x => x.GetPersonsByListOfIds(It.IsAny <List <long> >())).Returns(new List <Person>()
            {
                TestHelpers.CreatePerson()
            });

            _residentUseCase.GetResidentsByQuery(request, cursor: 0, limit: 4);

            _mockDatabaseGateway.Verify(x => x.GetPersonDetailsById(Convert.ToInt64(request.MosaicId)));
        }
        public async Task ExecuteCallsTheGatewayWithPostcodeQueryParameter()
        {
            var postcode         = _fixture.Create <string>();
            var stubbedResidents = _fixture.CreateMany <ResidentInformation>();

            _mockhousingGateway.Setup(x =>
                                      x.GetAllResidents(null, 10, null, null, null, null, postcode, false))
            .Returns(Task.Run(() => stubbedResidents.ToList()));

            var rqp = new ResidentQueryParam
            {
                Postcode            = postcode,
                ActiveTenanciesOnly = false
            };

            await _classUnderTest.Execute(rqp, null, 10).ConfigureAwait(false);

            _mockhousingGateway.Verify();
        }
Esempio n. 22
0
        public void DoesNotCallGetPersonDetailsByIdWhenMosaicIdContainsLeadingZeros(string mosaicId)
        {
            var request = new ResidentQueryParam()
            {
                MosaicId = mosaicId
            };

            _mockDatabaseGateway.Setup(x => x.GetPersonIdsByEmergencyId(It.IsAny <string>())).Returns(new List <long> {
                1, 2
            });
            _mockDatabaseGateway.Setup(x => x.GetPersonsByListOfIds(It.IsAny <List <long> >())).Returns(new List <Person>()
            {
                TestHelpers.CreatePerson()
            });

            _residentUseCase.GetResidentsByQuery(request, cursor: 0, limit: 4);

            _mockDatabaseGateway.Verify(x => x.GetPersonDetailsById(It.IsAny <long>()), Times.Never);
        }
Esempio n. 23
0
        public async Task <ResidentInformationList> Execute(ResidentQueryParam rqp, string cursor, int limit)
        {
            limit = limit < 10 ? 10 : limit;
            limit = limit > 100 ? 100 : limit;

            CheckPostcodeValid(rqp.Postcode);

            var residentsGwResult = await _housingGateway.GetAllResidents(cursor, limit, rqp.HouseReference, rqp.FirstName,
                                                                          rqp.LastName, rqp.Address, rqp.Postcode, rqp.ActiveTenanciesOnly).ConfigureAwait(false);

            var residents    = residentsGwResult.ToResponse();
            var lastResident = residents.LastOrDefault();
            var nextCursor   = residents.Count == limit ? $"{lastResident.HouseReference}{lastResident.PersonNumber}" : "";

            return(new ResidentInformationList
            {
                Residents = residents,
                NextCursor = nextCursor
            });
        }
Esempio n. 24
0
        public void ReturnsResidentInformationList()
        {
            var stubbedResidents = _fixture
                                   .Build <ResidentDomain>()
                                   .Without(contact => contact.Contacts)
                                   .CreateMany();

            SetupMockGatewayToExpectParameters(firstNameQuery: "ciasom", lastNameQuery: "tessellate",
                                               stubbedResidents: stubbedResidents.ToList());

            var rqp = new ResidentQueryParam
            {
                FirstName = "ciasom",
                LastName  = "tessellate"
            };

            var response = _classUnderTest.Execute(rqp);

            response.Should().NotBeNull();
            response.Residents.Should().BeEquivalentTo(stubbedResidents.ToResponse());
        }
Esempio n. 25
0
        public void CallsGetPersonsByListOfIdsWhenMatchingEmergencyIdsFound(string mosaicId)
        {
            var request = new ResidentQueryParam()
            {
                MosaicId = mosaicId
            };

            var listOfMatchingIds = new List <long> {
                1, 2
            };

            _mockDatabaseGateway.Setup(x => x.GetPersonIdsByEmergencyId(It.IsAny <string>())).Returns(listOfMatchingIds);
            _mockDatabaseGateway.Setup(x => x.GetPersonsByListOfIds(It.IsAny <List <long> >())).Returns(new List <Person>()
            {
                TestHelpers.CreatePerson()
            });

            _residentUseCase.GetResidentsByQuery(request, cursor: 0, limit: 4);

            _mockDatabaseGateway.Verify(x => x.GetPersonsByListOfIds(listOfMatchingIds));
        }
Esempio n. 26
0
        public async Task ListContactsReturnsAResponse()
        {
            var stubbedContactInformation = new ResidentInformationResponse()
            {
                Results = _fixture.Build <ResidentInformationResult>().With(x => x.Data, _fixture.Create <AcademyClaimantInformation>()).CreateMany().ToList()
            };

            var rqp = new ResidentQueryParam()
            {
                FirstName = "ciasom",
                LastName  = "tessellate",
                Postcode  = "E8 1DY",
                Address   = "1 Montage Street"
            };

            _mockListContactsUseCase.Setup(x => x.Execute(rqp)).Returns(Task.FromResult(stubbedContactInformation));
            var response = await _classUnderTest.ListContactsAsync(rqp).ConfigureAwait(true) as OkObjectResult;

            response.Should().NotBeNull();
            response.StatusCode.Should().Be(200);
            response.Value.Should().BeEquivalentTo(stubbedContactInformation);
        }
        public async Task ReturnsResidentInformationList()
        {
            var stubbedResidents = _fixture.CreateMany <ResidentInformation>();

            _mockhousingGateway.Setup(x =>
                                      x.GetAllResidents(null, 10, "000011", "ciasom", "tessellate", "1 Montage street", "E8 1DY", false))
            .Returns(Task.Run(() => stubbedResidents.ToList()));
            var rqp = new ResidentQueryParam
            {
                HouseReference      = "000011",
                FirstName           = "ciasom",
                LastName            = "tessellate",
                Address             = "1 Montage street",
                Postcode            = "E8 1DY",
                ActiveTenanciesOnly = false
            };

            var response = await _classUnderTest.Execute(rqp, null, 10).ConfigureAwait(false);

            response.Should().NotBeNull();
            response.Residents.Should().BeEquivalentTo(stubbedResidents.ToResponse());
        }
Esempio n. 28
0
        public void CallsGetPersonIdsByEmergencyIdWithLettersRemovedLeavingLeadingZerosWhenMosaicIdIsProvided(string mosaicId)
        {
            var request = new ResidentQueryParam()
            {
                MosaicId = mosaicId
            };

            _mockDatabaseGateway.Setup(x => x.GetPersonIdsByEmergencyId(It.IsAny <string>())).Returns(new List <long>()
            {
                1, 2
            });
            _mockDatabaseGateway.Setup(x => x.GetPersonsByListOfIds(It.IsAny <List <long> >())).Returns(new List <Person>()
            {
                TestHelpers.CreatePerson()
            });

            _residentUseCase.GetResidentsByQuery(request, cursor: 0, limit: 4);

            var expectedIdParameter = Regex.Replace(mosaicId, "[^0-9.]", "");

            _mockDatabaseGateway.Verify(x => x.GetPersonIdsByEmergencyId(expectedIdParameter));
        }
Esempio n. 29
0
        public void SetsTotalCountWhenMosaicIdIsProvided()
        {
            var request = new ResidentQueryParam()
            {
                MosaicId = "123"
            };
            var totalCount = 3;
            var listOfIds  = new List <long> {
                1, 2, 3
            };

            _mockDatabaseGateway.Setup(x => x.GetResidentsBySearchCriteria(0, 10, null, null, null, null, null, null, null))
            .Returns((new List <ResidentInformation>(), totalCount));

            _mockDatabaseGateway.Setup(x => x.GetPersonIdsByEmergencyId(It.IsAny <string>())).Returns(listOfIds);
            _mockDatabaseGateway.Setup(x => x.GetPersonsByListOfIds(listOfIds)).Returns(new List <Person>()
            {
                new Person(), new Person(), new Person()
            });

            var result = _residentUseCase.GetResidentsByQuery(request, cursor: 0, limit: 10);

            result.TotalCount.Should().Be(totalCount);
        }
 public IActionResult ListContacts([FromQuery] ResidentQueryParam rqp)
 {
     return(Ok(_getAllUseCase.Execute(rqp)));
 }