From 3a5cb7e5c945fd7294221d01f2ca5504110eedc1 Mon Sep 17 00:00:00 2001 From: karthikeyannhs <174426205+Karthikeyannhs@users.noreply.github.com> Date: Tue, 12 Aug 2025 11:25:05 +0100 Subject: [PATCH] ELI-406: no person_data, so error response --- .../repos/person_repo.py | 4 +++- tests/integration/conftest.py | 19 +++++++++++++++++++ tests/integration/repo/test_person_repo.py | 13 ++++++++++++- 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/src/eligibility_signposting_api/repos/person_repo.py b/src/eligibility_signposting_api/repos/person_repo.py index 9867b2844..2149fab9d 100644 --- a/src/eligibility_signposting_api/repos/person_repo.py +++ b/src/eligibility_signposting_api/repos/person_repo.py @@ -40,7 +40,9 @@ def get_eligibility_data(self, nhs_number: NHSNumber) -> Person: response = self.table.query(KeyConditionExpression=Key("NHS_NUMBER").eq(nhs_number)) logger.debug("response %r for %r", response, nhs_number, extra={"response": response, "nhs_number": nhs_number}) - if not (items := response.get("Items")): + if not (items := response.get("Items")) or not next( + (item for item in items if item.get("ATTRIBUTE_TYPE") == "PERSON"), None + ): message = f"Person not found with nhs_number {nhs_number}" raise NotFoundError(message) diff --git a/tests/integration/conftest.py b/tests/integration/conftest.py index 59d696121..b7ee18261 100644 --- a/tests/integration/conftest.py +++ b/tests/integration/conftest.py @@ -422,6 +422,25 @@ def persisted_person_pc_sw19(person_table: Any, faker: Faker) -> Generator[eligi person_table.delete_item(Key={"NHS_NUMBER": row["NHS_NUMBER"], "ATTRIBUTE_TYPE": row["ATTRIBUTE_TYPE"]}) +@pytest.fixture +def persisted_person_with_no_person_attribute_type( + person_table: Any, faker: Faker +) -> Generator[eligibility_status.NHSNumber]: + nhs_number = eligibility_status.NHSNumber(faker.nhs_number()) + date_of_birth = eligibility_status.DateOfBirth(faker.date_of_birth(minimum_age=18, maximum_age=65)) + + for row in ( + rows := person_rows_builder(nhs_number, date_of_birth=date_of_birth, postcode="hp1", cohorts=["cohort1"]).data + ): + if row["ATTRIBUTE_TYPE"] != "PERSON": + person_table.put_item(Item=row) + + yield nhs_number + + for row in rows: + person_table.delete_item(Key={"NHS_NUMBER": row["NHS_NUMBER"], "ATTRIBUTE_TYPE": row["ATTRIBUTE_TYPE"]}) + + @pytest.fixture(scope="session") def rules_bucket(s3_client: BaseClient) -> Generator[BucketName]: bucket_name = BucketName(os.getenv("RULES_BUCKET_NAME", "test-rules-bucket")) diff --git a/tests/integration/repo/test_person_repo.py b/tests/integration/repo/test_person_repo.py index 25905e9cf..40d33f4b1 100644 --- a/tests/integration/repo/test_person_repo.py +++ b/tests/integration/repo/test_person_repo.py @@ -28,7 +28,7 @@ def test_person_found(person_table: Any, persisted_person: NHSNumber): ) -def test_person_not_found(person_table: Any, faker: Faker): +def test_items_not_found_raises_error(person_table: Any, faker: Faker): # Given nhs_number = NHSNumber(faker.nhs_number()) repo = PersonRepo(person_table) @@ -36,3 +36,14 @@ def test_person_not_found(person_table: Any, faker: Faker): # When, Then with pytest.raises(NotFoundError): repo.get_eligibility_data(nhs_number) + + +def test_items_found_but_person_attribute_type_not_found_raises_error( + person_table: Any, persisted_person_with_no_person_attribute_type: NHSNumber +): + # Given + repo = PersonRepo(person_table) + + ## When, Then + with pytest.raises(NotFoundError): + repo.get_eligibility_data(persisted_person_with_no_person_attribute_type)