예제 #1
0
        public void WithNameAndPostCodeQueryParameterReturnsMatchingResident()
        {
            var person1 = DatabaseGatewayHelper.CreatePersonDatabaseEntity(firstName: "ciasom");

            var person2 = DatabaseGatewayHelper.CreatePersonDatabaseEntity(firstName: "wrong name");

            var person3 = DatabaseGatewayHelper.CreatePersonDatabaseEntity(firstName: "ciasom");

            DatabaseContext.Persons.Add(person1);
            DatabaseContext.Persons.Add(person2);
            DatabaseContext.Persons.Add(person3);
            DatabaseContext.SaveChanges();

            var address  = DatabaseGatewayHelper.CreateAddressDatabaseEntity(personId: person1.Id, postCode: "E8 1DY");
            var address2 = DatabaseGatewayHelper.CreateAddressDatabaseEntity(personId: person2.Id, postCode: "E8 1DY");
            var address3 = DatabaseGatewayHelper.CreateAddressDatabaseEntity(personId: person2.Id, postCode: "E8 5RT");

            DatabaseContext.Addresses.Add(address);
            DatabaseContext.Addresses.Add(address2);
            DatabaseContext.Addresses.Add(address3);
            DatabaseContext.SaveChanges();

            var(listOfPersons, _) = _classUnderTest.GetResidentsBySearchCriteria(cursor: 0, limit: 20, firstname: "ciasom", postcode: "E8 1DY");

            listOfPersons.Count.Should().Be(1);
            listOfPersons.First().MosaicId.Should().Be(person1.Id.ToString());
            listOfPersons.First().AddressList.Should().ContainEquivalentOf(address.ToResponse());
        }
        public void GetTeamByTeamIdAndGetAssociatedWorkers()
        {
            var workerOne =
                SaveWorkerToDatabase(
                    DatabaseGatewayHelper.CreateWorkerDatabaseEntity(1, "*****@*****.**"));
            var workerTwo =
                SaveWorkerToDatabase(
                    DatabaseGatewayHelper.CreateWorkerDatabaseEntity(2, "*****@*****.**"));
            var workerTeamOne =
                SaveWorkerTeamToDatabase(
                    DatabaseGatewayHelper.CreateWorkerTeamDatabaseEntity(id: 1, workerId: workerOne.Id,
                                                                         worker: workerOne));
            var workerTeamTwo =
                SaveWorkerTeamToDatabase(
                    DatabaseGatewayHelper.CreateWorkerTeamDatabaseEntity(id: 2, workerId: workerTwo.Id,
                                                                         worker: workerTwo));
            var workerTeams = new List <WorkerTeam> {
                workerTeamOne, workerTeamTwo
            };
            var team = SaveTeamToDatabase(DatabaseGatewayHelper.CreateTeamDatabaseEntity(workerTeams));

            var responseTeam = _teamGateway.GetTeamByTeamId(team.Id);

            responseTeam?.WorkerTeams.Count.Should().Be(2);

            var responseWorkerTeams = responseTeam?.WorkerTeams.ToList();
            var workerOneResponse   =
                responseWorkerTeams?.Find(workerTeam => workerTeam.Worker.Id == workerOne.Id)?.Worker;
            var workerTwoResponse =
                responseWorkerTeams?.Find(workerTeam => workerTeam.Worker.Id == workerTwo.Id)?.Worker;

            workerOneResponse.Should().BeEquivalentTo(workerOne);
            workerTwoResponse.Should().BeEquivalentTo(workerTwo);
        }
예제 #3
0
        public void WithAddressQueryParameterReturnsMatchingResident(string addressQuery)
        {
            var person1 = DatabaseGatewayHelper.CreatePersonDatabaseEntity();
            var person2 = DatabaseGatewayHelper.CreatePersonDatabaseEntity();

            DatabaseContext.Persons.Add(person1);
            DatabaseContext.Persons.Add(person2);
            DatabaseContext.SaveChanges();

            var address  = DatabaseGatewayHelper.CreateAddressDatabaseEntity(personId: person1.Id, address: "1 My Street, Hackney, London");
            var address2 = DatabaseGatewayHelper.CreateAddressDatabaseEntity(personId: person2.Id, address: "5 Another Street, Lambeth, London");

            DatabaseContext.Addresses.Add(address);
            DatabaseContext.Addresses.Add(address2);
            DatabaseContext.SaveChanges();

            var(listOfPersons, _) = _classUnderTest.GetResidentsBySearchCriteria(cursor: 0, limit: 20, address: addressQuery);

            listOfPersons.Count.Should().Be(1);

            listOfPersons
            .First(p => p.MosaicId.Equals(person1.Id.ToString()))
            .AddressList
            .Should().ContainEquivalentOf(address.ToDomain());
        }
        public void GetTeamByTeamIdReturnsTeamWithWorkers()
        {
            var team = SaveTeamToDatabase(
                DatabaseGatewayHelper.CreateTeamDatabaseEntity(new List <WorkerTeam>()));

            var response = _teamGateway.GetTeamByTeamId(team.Id);

            response.Should().BeEquivalentTo(team);
        }
        public void ExecuteGetReturnsGetPersonResponseWhenPersonIsFound()
        {
            var request = GetValidGetPersonRequest();
            var person  = DatabaseGatewayHelper.CreatePersonDatabaseEntity();

            _mockDataBaseGateway.Setup(x => x.GetPersonDetailsById(request.Id)).Returns(person);

            var response = _residentUseCase.GetResident(request);

            response.Should().BeOfType <GetPersonResponse>();
        }
예제 #6
0
        public void WildcardSearchWithNameQueryParametersReturnsMatchingResident()
        {
            var person = DatabaseGatewayHelper.CreatePersonDatabaseEntity(firstName: "ciasom", lastName: "Tessellate");

            DatabaseContext.Persons.Add(person);
            DatabaseContext.SaveChanges();

            var(listOfPersons, _) = _classUnderTest.GetResidentsBySearchCriteria(cursor: 0, limit: 20, firstname: "ciasom", lastname: "ssellat");
            listOfPersons.Count.Should().Be(1);
            listOfPersons.First().MosaicId.Should().Be(person.Id.ToString());
        }
예제 #7
0
        public void IfThereAreNoResidentPhoneNumbersWillReturnNullForPhoneNumbers()
        {
            var person = DatabaseGatewayHelper.CreatePersonDatabaseEntity();

            DatabaseContext.Persons.Add(person);
            DatabaseContext.SaveChanges();

            var(listOfPersons, _) = _classUnderTest.GetResidentsBySearchCriteria(cursor: 0, limit: 20, id: person.Id);

            listOfPersons.First().PhoneNumber.Should().BeNull();
        }
예제 #8
0
        public void WhenNoMatchingIDReturnsEmptyList()
        {
            var person = DatabaseGatewayHelper.CreatePersonDatabaseEntity();

            DatabaseContext.Persons.Add(person);
            DatabaseContext.SaveChanges();

            var response = _caseStatusGateway.GetCaseStatusesByPersonId(person.Id);

            response.Should().BeEmpty();
        }
        public void CanMapPhoneNumberFromDatabaseEntityToDomainObject()
        {
            dbPhoneNumber phoneNumber = DatabaseGatewayHelper.CreatePhoneNumberEntity(_faker.Random.Long());

            var expectedResponse = new PhoneNumber()
            {
                Number = phoneNumber.Number,
                Type   = phoneNumber.Type
            };

            phoneNumber.ToDomain().Should().BeEquivalentTo(expectedResponse);
        }
        public void CanMapPersonOtherNameFromDatabaseObjectToDomainObject()
        {
            PersonOtherName otherName = DatabaseGatewayHelper.CreatePersonOtherNameDatabaseEntity(_faker.Random.Long());

            var expectedResponse = new OtherName()
            {
                FirstName = otherName.FirstName,
                LastName  = otherName.LastName
            };

            otherName.ToDomain().Should().BeEquivalentTo(expectedResponse);
        }
        public void CanMapDbAddressToAddressDomain()
        {
            dbAddress address = DatabaseGatewayHelper.CreateAddressDatabaseEntity();

            AddressDomain expectedAddressDomain = new AddressDomain()
            {
                Address  = address.AddressLines,
                Postcode = address.PostCode,
                Uprn     = address.Uprn
            };

            EntityFactory.DbAddressToAddressDomain(address).Should().BeEquivalentTo(expectedAddressDomain);
        }
예제 #12
0
        public void WildcardSearchWithLastNameQueryParameterReturnsMatchingResident()
        {
            var person1 = DatabaseGatewayHelper.CreatePersonDatabaseEntity(lastName: "tessellate");
            var person2 = DatabaseGatewayHelper.CreatePersonDatabaseEntity(lastName: "Tessellate");

            DatabaseContext.Persons.Add(person1);
            DatabaseContext.Persons.Add(person2);
            DatabaseContext.SaveChanges();

            var(listOfPersons, _) = _classUnderTest.GetResidentsBySearchCriteria(cursor: 0, limit: 20, lastname: "sell");
            listOfPersons.Count.Should().Be(2);
            listOfPersons.Should().ContainEquivalentOf(DatabaseContext.Persons.First(x => x.Id == person1.Id).ToResidentInformationResponse());
            listOfPersons.Should().ContainEquivalentOf(DatabaseContext.Persons.First(x => x.Id == person2.Id).ToResidentInformationResponse());
        }
예제 #13
0
        public void ReturnsTotalPersonCountForGivenFilterIgnoringPagingAndCursor()
        {
            var person1 = DatabaseGatewayHelper.CreatePersonDatabaseEntity(firstName: "foo");
            var person2 = DatabaseGatewayHelper.CreatePersonDatabaseEntity(firstName: "foobar");
            var person3 = DatabaseGatewayHelper.CreatePersonDatabaseEntity(firstName: "foobarbar");

            DatabaseContext.Persons.AddRange(new List <Person> {
                person1, person2, person3
            });
            DatabaseContext.SaveChanges();

            var(_, totalCount) = _classUnderTest.GetResidentsBySearchCriteria(cursor: 0, limit: 1, firstname: "foo");

            totalCount.Should().Be(3);
        }
예제 #14
0
        public void GetAllResidentsWithPostCodeQueryParameterReturnsEmptyListWhenNoMatchingResidentsWithPostcodeInDisplayAddressAreFound()
        {
            var person = DatabaseGatewayHelper.CreatePersonDatabaseEntity();

            DatabaseContext.Persons.Add(person);
            DatabaseContext.SaveChanges();

            var address = DatabaseGatewayHelper.CreateAddressDatabaseEntity(personId: person.Id, postCode: "E83 AS", isDisplayAddress: "N");

            DatabaseContext.Addresses.Add(address);
            DatabaseContext.SaveChanges();

            var(listOfPersons, _) = _classUnderTest.GetResidentsBySearchCriteria(cursor: 0, limit: 20, postcode: "E83 AS");

            listOfPersons.Should().BeEmpty();
        }
예제 #15
0
        public void IfThereAreResidentsWithGivenMosaicIdThenReturnsThem()
        {
            var person1 = DatabaseGatewayHelper.CreatePersonDatabaseEntity();
            var person2 = DatabaseGatewayHelper.CreatePersonDatabaseEntity();
            var person3 = DatabaseGatewayHelper.CreatePersonDatabaseEntity();

            DatabaseContext.Persons.AddRange(new List <Person> {
                person1, person2, person3
            });
            DatabaseContext.SaveChanges();

            var(listOfPersons, _) = _classUnderTest.GetResidentsBySearchCriteria(cursor: 0, limit: 20, id: person2.Id);

            listOfPersons.Count.Should().Be(1);
            listOfPersons.First().MosaicId.Should().Be(person2.Id.ToString());
        }
예제 #16
0
        public void IfThereAreMultipleAddressesReturnsTheUprnForTheCurrentAddress()
        {
            var person = DatabaseGatewayHelper.CreatePersonDatabaseEntity();

            DatabaseContext.Persons.Add(person);
            DatabaseContext.SaveChanges();

            var oldAddress     = DatabaseGatewayHelper.CreateAddressDatabaseEntity(personId: person.Id, endDate: DateTime.Now);
            var currentAddress = DatabaseGatewayHelper.CreateAddressDatabaseEntity(personId: person.Id);

            DatabaseContext.Addresses.Add(oldAddress);
            DatabaseContext.Addresses.Add(currentAddress);
            DatabaseContext.SaveChanges();

            var(response, _) = _classUnderTest.GetResidentsBySearchCriteria(0, 20);
            response.First().Uprn.Should().Be(currentAddress.Uprn.ToString());
        }
예제 #17
0
        public void IfThereAreResidentsWillReturnThem()
        {
            var person1 = DatabaseGatewayHelper.CreatePersonDatabaseEntity();
            var person2 = DatabaseGatewayHelper.CreatePersonDatabaseEntity();
            var person3 = DatabaseGatewayHelper.CreatePersonDatabaseEntity();

            DatabaseContext.Persons.AddRange(new List <Person>()
            {
                person1, person2, person3
            });
            DatabaseContext.SaveChanges();

            var(listOfPersons, _) = _classUnderTest.GetResidentsBySearchCriteria(cursor: 0, limit: 20);

            listOfPersons.Should().ContainEquivalentOf(DatabaseContext.Persons.First(x => x.Id == person1.Id).ToResidentInformationResponse());
            listOfPersons.Should().ContainEquivalentOf(DatabaseContext.Persons.First(x => x.Id == person2.Id).ToResidentInformationResponse());
            listOfPersons.Should().ContainEquivalentOf(DatabaseContext.Persons.First(x => x.Id == person3.Id).ToResidentInformationResponse());
        }
예제 #18
0
        public void WithPostCodeQueryParameterIgnoresFormatting(string postcode)
        {
            var person = DatabaseGatewayHelper.CreatePersonDatabaseEntity();

            DatabaseContext.Persons.Add(person);
            DatabaseContext.SaveChanges();

            var address = DatabaseGatewayHelper.CreateAddressDatabaseEntity(personId: person.Id, postCode: postcode);

            DatabaseContext.Addresses.Add(address);
            DatabaseContext.SaveChanges();

            var(listOfPersons, _) = _classUnderTest.GetResidentsBySearchCriteria(cursor: 0, limit: 20, postcode: "E8 1DY");

            listOfPersons.Count.Should().Be(1);
            listOfPersons.First().MosaicId.Should().Be(person.Id.ToString());
            listOfPersons.First().AddressList.Should().ContainEquivalentOf(address.ToResponse());
        }
예제 #19
0
        public void WithBirthdayQueryParameterReturnsMatchingResidents()
        {
            var person1 = DatabaseGatewayHelper.CreatePersonDatabaseEntity();
            var person2 = DatabaseGatewayHelper.CreatePersonDatabaseEntity();
            var person3 = DatabaseGatewayHelper.CreatePersonDatabaseEntity();

            person3.DateOfBirth = person1.DateOfBirth;

            DatabaseContext.Persons.AddRange(new List <Person> {
                person1, person2, person3
            });
            DatabaseContext.SaveChanges();

            var(listOfPersons, _) = _classUnderTest.GetResidentsBySearchCriteria(cursor: 0, limit: 20, dateOfBirth: person1.DateOfBirth.Value.ToString("yyyy-MM-dd"));  //Format passed by FE

            listOfPersons.Count.Should().Be(2);
            listOfPersons.Should().ContainEquivalentOf(DatabaseContext.Persons.First(x => x.Id == person1.Id).ToResidentInformationResponse());
            listOfPersons.Should().ContainEquivalentOf(DatabaseContext.Persons.First(x => x.Id == person3.Id).ToResidentInformationResponse());
        }
예제 #20
0
        public void DoesNotReturnPersonRecordsMarkedForDeletion()
        {
            var person1 = DatabaseGatewayHelper.CreatePersonDatabaseEntity();
            var person2 = DatabaseGatewayHelper.CreatePersonDatabaseEntity(markedForDeletion: true);
            var person3 = DatabaseGatewayHelper.CreatePersonDatabaseEntity();

            DatabaseContext.Persons.AddRange(new List <Person> {
                person1, person2, person3
            });
            DatabaseContext.SaveChanges();

            var(response, _) = _classUnderTest.GetResidentsBySearchCriteria(cursor: 0, limit: 20);

            response.Count.Should().Be(2);

            response.Any(x => x.MosaicId == person1.Id.ToString()).Should().BeTrue();
            response.Any(x => x.MosaicId == person2.Id.ToString()).Should().BeFalse();
            response.Any(x => x.MosaicId == person3.Id.ToString()).Should().BeTrue();
        }
예제 #21
0
        public void ReturnsResidentsUprn()
        {
            var person = DatabaseGatewayHelper.CreatePersonDatabaseEntity();

            DatabaseContext.Persons.Add(person);
            DatabaseContext.SaveChanges();

            var address = DatabaseGatewayHelper.CreateAddressDatabaseEntity(personId: person.Id);

            DatabaseContext.Addresses.Add(address);
            DatabaseContext.SaveChanges();


            var(listOfPersons, _) = _classUnderTest.GetResidentsBySearchCriteria(0, 20);

            listOfPersons
            .First(p => p.MosaicId.Equals(person.Id.ToString()))
            .Uprn
            .Should().Be(address.Uprn.ToString());
        }
예제 #22
0
        public void IfThereAreResidentPhoneNumbersWillReturnThem()
        {
            var person = DatabaseGatewayHelper.CreatePersonDatabaseEntity();

            DatabaseContext.Persons.Add(person);
            DatabaseContext.SaveChanges();

            var phoneNumber = DatabaseGatewayHelper.CreatePhoneNumberEntity(personId: person.Id);

            DatabaseContext.PhoneNumbers.Add(phoneNumber);
            DatabaseContext.SaveChanges();

            var(listOfPersons, _) = _classUnderTest.GetResidentsBySearchCriteria(0, 20);

            listOfPersons
            .Where(p => p.MosaicId.Equals(phoneNumber.Person.Id.ToString()))
            .First()
            .PhoneNumber
            .Should().ContainEquivalentOf(phoneNumber.ToResponse());
        }
예제 #23
0
        public void IfThereAreResidentAddressesWillReturnThem()
        {
            var person = DatabaseGatewayHelper.CreatePersonDatabaseEntity();

            DatabaseContext.Persons.Add(person);
            DatabaseContext.SaveChanges();

            var address = DatabaseGatewayHelper.CreateAddressDatabaseEntity(personId: person.Id);

            DatabaseContext.Addresses.Add(address);
            DatabaseContext.SaveChanges();

            var(listOfPersons, _) = _classUnderTest.GetResidentsBySearchCriteria(cursor: 0, limit: 20);

            listOfPersons
            .Where(p => p.MosaicId.Equals(person.Id.ToString()))
            .First()
            .AddressList
            .Should().ContainEquivalentOf(address.ToResponse());
        }
예제 #24
0
        public void GetAllResidentsWithPostCodeQueryParameterReturnsOnlyResidentsWithPostcodeInDisplayAddress()
        {
            var person1 = DatabaseGatewayHelper.CreatePersonDatabaseEntity();
            var person2 = DatabaseGatewayHelper.CreatePersonDatabaseEntity();

            DatabaseContext.Persons.Add(person1);
            DatabaseContext.Persons.Add(person2);
            DatabaseContext.SaveChanges();

            var address1 = DatabaseGatewayHelper.CreateAddressDatabaseEntity(personId: person1.Id, postCode: "E83 AS");
            var address2 = DatabaseGatewayHelper.CreateAddressDatabaseEntity(personId: person2.Id, postCode: "E83 AS", isDisplayAddress: "N");

            DatabaseContext.Addresses.Add(address1);
            DatabaseContext.Addresses.Add(address2);
            DatabaseContext.SaveChanges();

            var(listOfPersons, _) = _classUnderTest.GetResidentsBySearchCriteria(cursor: 0, limit: 20, postcode: "E83 AS");

            listOfPersons.Count.Should().Be(1);
            listOfPersons.First().MosaicId.Should().Be(person1.Id.ToString());
        }
예제 #25
0
        public void WithPostCodeQueryParameterReturnsPhoneNumberWithResidentInformation()
        {
            var person = DatabaseGatewayHelper.CreatePersonDatabaseEntity();

            DatabaseContext.Persons.Add(person);
            DatabaseContext.SaveChanges();

            var address     = DatabaseGatewayHelper.CreateAddressDatabaseEntity(personId: person.Id, postCode: "E8 1DY");
            var phoneNumber = DatabaseGatewayHelper.CreatePhoneNumberEntity(person.Id);

            DatabaseContext.Addresses.Add(address);
            DatabaseContext.PhoneNumbers.Add(phoneNumber);
            DatabaseContext.SaveChanges();

            var(listOfPersons, _) = _classUnderTest.GetResidentsBySearchCriteria(cursor: 0, limit: 20, postcode: "E8 1DY");

            var personUnderTest = listOfPersons
                                  .First(p => p.MosaicId.Equals(person.Id.ToString()));

            personUnderTest.PhoneNumber.Should().ContainEquivalentOf(phoneNumber.ToResponse());
        }
예제 #26
0
        public void GetAllResidentsWithPostCodeQueryParameterReturnsMatchingResident()
        {
            var person = DatabaseGatewayHelper.CreatePersonDatabaseEntity();

            DatabaseContext.Persons.Add(person);
            DatabaseContext.SaveChanges();

            var address1 = DatabaseGatewayHelper.CreateAddressDatabaseEntity(personId: person.Id, postCode: "E8 1DY");
            var address2 = DatabaseGatewayHelper.CreateAddressDatabaseEntity(personId: person.Id, postCode: "E8 5TG");

            DatabaseContext.Addresses.Add(address1);
            DatabaseContext.Addresses.Add(address2);
            DatabaseContext.SaveChanges();

            var(listOfPersons, _) = _classUnderTest.GetResidentsBySearchCriteria(cursor: 0, limit: 20, postcode: "E8 1DY");

            listOfPersons.Count.Should().Be(1);

            listOfPersons
            .First(p => p.MosaicId.Equals(address1.Person.Id.ToString()))
            .AddressList
            .Should().ContainEquivalentOf(address1.ToDomain());
        }
예제 #27
0
        public void WithPostCodeQueryParameterWhenAPersonHasTwoAddressesReturnsOneRecordWithAListOfAddresses()
        {
            var person1 = DatabaseGatewayHelper.CreatePersonDatabaseEntity();
            var person2 = DatabaseGatewayHelper.CreatePersonDatabaseEntity();

            DatabaseContext.Persons.Add(person1);
            DatabaseContext.Persons.Add(person2);
            DatabaseContext.SaveChanges();

            var address  = DatabaseGatewayHelper.CreateAddressDatabaseEntity(personId: person1.Id, postCode: "E8 1DY");
            var address2 = DatabaseGatewayHelper.CreateAddressDatabaseEntity(personId: person1.Id, postCode: "E8 1DY");

            DatabaseContext.Addresses.Add(address);
            DatabaseContext.Addresses.Add(address2);
            DatabaseContext.SaveChanges();

            var(listOfPersons, _) = _classUnderTest.GetResidentsBySearchCriteria(cursor: 0, limit: 20, postcode: "E8 1DY");
            listOfPersons.Count.Should().Be(1);
            listOfPersons
            .First(p => p.MosaicId.Equals(person1.Id.ToString()))
            .AddressList.Count
            .Should().Be(2);
        }
예제 #28
0
        public void WithContextFlagQueryParameterReturnsMatchingResidents()
        {
            var person1 = DatabaseGatewayHelper.CreatePersonDatabaseEntity();

            person1.AgeContext = "A";
            var person2 = DatabaseGatewayHelper.CreatePersonDatabaseEntity();

            person2.AgeContext = "C";
            var person3 = DatabaseGatewayHelper.CreatePersonDatabaseEntity();

            person3.AgeContext = "A";

            DatabaseContext.Persons.AddRange(new List <Person> {
                person1, person2, person3
            });
            DatabaseContext.SaveChanges();

            var(listOfPersons, _) = _classUnderTest.GetResidentsBySearchCriteria(cursor: 0, limit: 20, contextflag: "A");

            listOfPersons.Count.Should().Be(2);
            listOfPersons.Should().ContainEquivalentOf(DatabaseContext.Persons.First(x => x.Id == person1.Id).ToResidentInformationResponse());
            listOfPersons.Should().ContainEquivalentOf(DatabaseContext.Persons.First(x => x.Id == person3.Id).ToResidentInformationResponse());
        }
예제 #29
0
        public void OnlyReturnsTheMatchingResidentsForGivenLimitAndCursor()
        {
            var person1 = DatabaseGatewayHelper.CreatePersonDatabaseEntity(personId: 1);
            var person2 = DatabaseGatewayHelper.CreatePersonDatabaseEntity(personId: 2);
            var person3 = DatabaseGatewayHelper.CreatePersonDatabaseEntity(personId: 3);
            var person4 = DatabaseGatewayHelper.CreatePersonDatabaseEntity(personId: 4);
            var person5 = DatabaseGatewayHelper.CreatePersonDatabaseEntity(personId: 5);

            DatabaseContext.Persons.AddRange(new List <Person>()
            {
                person1, person2, person3, person4, person5
            });
            DatabaseContext.SaveChanges();

            var(listOfPersons, _) = _classUnderTest.GetResidentsBySearchCriteria(cursor: 2, limit: 3);

            listOfPersons.Count.Should().Be(3);
            listOfPersons
            .Select(p => p.MosaicId)
            .Should().BeEquivalentTo(new List <string> {
                "3", "4", "5"
            });
        }
        public void SetsTheMarkedForDeletionFlagToFalseForPersonAndRelatedEntitiesAndRemovesTheRecordFromDeletedPersonRecordTable()
        {
            //person to be restored, new master record and relationship
            var(deletedPerson, newMasterPersonRecord, personalRelationship, personalRelationshipType, _) = PersonalRelationshipsHelper.SavePersonWithPersonalRelationshipToDatabase(DatabaseContext);

            //address
            var address = DatabaseGatewayHelper.CreateAddressDatabaseEntity(personId: deletedPerson.Id);

            address.MarkedForDeletion = true;
            DatabaseContext.Addresses.Add(address);

            //telephone numbers
            var telephoneNumber = DatabaseGatewayHelper.CreatePhoneNumberEntity(personId: deletedPerson.Id);

            address.MarkedForDeletion = true;
            DatabaseContext.PhoneNumbers.Add(telephoneNumber);

            //other names
            var otherName = DatabaseGatewayHelper.CreatePersonOtherNameDatabaseEntity(personId: deletedPerson.Id);

            otherName.MarkedForDeletion = true;
            DatabaseContext.PersonOtherNames.Add(otherName);

            //allocations
            var allocation = TestHelpers.CreateAllocation(personId: (int)deletedPerson.Id);

            allocation.MarkedForDeletion = true;
            DatabaseContext.Allocations.Add(allocation);

            //warning notes
            var warningNote = TestHelpers.CreateWarningNote(personId: deletedPerson.Id);

            warningNote.MarkedForDeletion = true;
            DatabaseContext.WarningNotes.Add(warningNote);

            //inverse relationship (type not handled for simplicity)
            var inversePersonalRelationship = PersonalRelationshipsHelper.CreatePersonalRelationship(newMasterPersonRecord, deletedPerson, personalRelationshipType);

            inversePersonalRelationship.MarkedForDeletion = true;
            DatabaseContext.PersonalRelationships.Add(inversePersonalRelationship);

            //record marked as soft deleted
            DatabaseContext.DeletedPersonRecords.Add(new DeletedPersonRecord()
            {
                DeletedId = deletedPerson.Id,
                MasterId  = newMasterPersonRecord.Id
            });

            DatabaseContext.SaveChanges();

            //TODO: wrap into transaction when running manually (BEGIN; <SCRIPT> END;)
            //TODO: this is designed to be run against individual IDs. Replace the {deletedPerson.Id} with appropriate MosaicId (long)
            DatabaseContext.Database.ExecuteSqlInterpolated($@"
                   UPDATE dbo.dm_persons SET marked_for_deletion = false WHERE person_id = {deletedPerson.Id};
                   UPDATE dbo.dm_addresses SET marked_for_deletion = false WHERE person_id = {deletedPerson.Id};
                   UPDATE dbo.dm_telephone_numbers SET marked_for_deletion = false WHERE person_id = {deletedPerson.Id};
                   UPDATE dbo.sccv_person_other_name SET marked_for_deletion = false WHERE person_id = {deletedPerson.Id};
                   UPDATE dbo.sccv_allocations_combined SET marked_for_deletion = false WHERE mosaic_id = {deletedPerson.Id};
                   UPDATE dbo.sccv_warning_note SET marked_for_deletion = false WHERE person_id = {deletedPerson.Id};
                   UPDATE dbo.sccv_personal_relationship SET marked_for_deletion = false WHERE fk_person_id = {deletedPerson.Id};
                   UPDATE dbo.sccv_personal_relationship SET marked_for_deletion = false WHERE fk_other_person_id = {deletedPerson.Id};
                   DELETE from dbo.sccv_deleted_person_record where deleted_person_id = {deletedPerson.Id};
            ");

            DatabaseContext.Persons.First(x => x.Id == deletedPerson.Id).MarkedForDeletion.Should().BeFalse();
            DatabaseContext.Addresses.First(x => x.PersonId == deletedPerson.Id).MarkedForDeletion.Should().BeFalse();
            DatabaseContext.PhoneNumbers.First(x => x.PersonId == deletedPerson.Id).MarkedForDeletion.Should().BeFalse();
            DatabaseContext.PersonOtherNames.First(x => x.PersonId == deletedPerson.Id).MarkedForDeletion.Should().BeFalse();
            DatabaseContext.Allocations.First(x => x.PersonId == deletedPerson.Id).MarkedForDeletion.Should().BeFalse();
            DatabaseContext.WarningNotes.First(x => x.PersonId == deletedPerson.Id).MarkedForDeletion.Should().BeFalse();
            DatabaseContext.PersonalRelationships.First(x => x.PersonId == deletedPerson.Id).MarkedForDeletion.Should().BeFalse();
            DatabaseContext.PersonalRelationships.First(x => x.OtherPersonId == newMasterPersonRecord.Id).MarkedForDeletion.Should().BeFalse();

            DatabaseContext.DeletedPersonRecords.Any(x => x.DeletedId == deletedPerson.Id).Should().BeFalse();
        }