Skip to content

Commit 5fb57a7

Browse files
ELI-406: no person_data, so error response (#293)
1 parent ee9e3a9 commit 5fb57a7

File tree

3 files changed

+34
-2
lines changed

3 files changed

+34
-2
lines changed

src/eligibility_signposting_api/repos/person_repo.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,9 @@ def get_eligibility_data(self, nhs_number: NHSNumber) -> Person:
4040
response = self.table.query(KeyConditionExpression=Key("NHS_NUMBER").eq(nhs_number))
4141
logger.debug("response %r for %r", response, nhs_number, extra={"response": response, "nhs_number": nhs_number})
4242

43-
if not (items := response.get("Items")):
43+
if not (items := response.get("Items")) or not next(
44+
(item for item in items if item.get("ATTRIBUTE_TYPE") == "PERSON"), None
45+
):
4446
message = f"Person not found with nhs_number {nhs_number}"
4547
raise NotFoundError(message)
4648

tests/integration/conftest.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -422,6 +422,25 @@ def persisted_person_pc_sw19(person_table: Any, faker: Faker) -> Generator[eligi
422422
person_table.delete_item(Key={"NHS_NUMBER": row["NHS_NUMBER"], "ATTRIBUTE_TYPE": row["ATTRIBUTE_TYPE"]})
423423

424424

425+
@pytest.fixture
426+
def persisted_person_with_no_person_attribute_type(
427+
person_table: Any, faker: Faker
428+
) -> Generator[eligibility_status.NHSNumber]:
429+
nhs_number = eligibility_status.NHSNumber(faker.nhs_number())
430+
date_of_birth = eligibility_status.DateOfBirth(faker.date_of_birth(minimum_age=18, maximum_age=65))
431+
432+
for row in (
433+
rows := person_rows_builder(nhs_number, date_of_birth=date_of_birth, postcode="hp1", cohorts=["cohort1"]).data
434+
):
435+
if row["ATTRIBUTE_TYPE"] != "PERSON":
436+
person_table.put_item(Item=row)
437+
438+
yield nhs_number
439+
440+
for row in rows:
441+
person_table.delete_item(Key={"NHS_NUMBER": row["NHS_NUMBER"], "ATTRIBUTE_TYPE": row["ATTRIBUTE_TYPE"]})
442+
443+
425444
@pytest.fixture(scope="session")
426445
def rules_bucket(s3_client: BaseClient) -> Generator[BucketName]:
427446
bucket_name = BucketName(os.getenv("RULES_BUCKET_NAME", "test-rules-bucket"))

tests/integration/repo/test_person_repo.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,22 @@ def test_person_found(person_table: Any, persisted_person: NHSNumber):
2828
)
2929

3030

31-
def test_person_not_found(person_table: Any, faker: Faker):
31+
def test_items_not_found_raises_error(person_table: Any, faker: Faker):
3232
# Given
3333
nhs_number = NHSNumber(faker.nhs_number())
3434
repo = PersonRepo(person_table)
3535

3636
# When, Then
3737
with pytest.raises(NotFoundError):
3838
repo.get_eligibility_data(nhs_number)
39+
40+
41+
def test_items_found_but_person_attribute_type_not_found_raises_error(
42+
person_table: Any, persisted_person_with_no_person_attribute_type: NHSNumber
43+
):
44+
# Given
45+
repo = PersonRepo(person_table)
46+
47+
## When, Then
48+
with pytest.raises(NotFoundError):
49+
repo.get_eligibility_data(persisted_person_with_no_person_attribute_type)

0 commit comments

Comments
 (0)