|
2 | 2 | import logging |
3 | 3 | import uuid |
4 | 4 |
|
| 5 | +import pytest |
| 6 | + |
5 | 7 | from lambdas.tests.e2e.api.fhir.conftest import MTLS_ENDPOINT, create_mtls_session |
6 | 8 | from lambdas.tests.e2e.helpers.pdm_data_helper import PdmDataHelper |
7 | 9 |
|
8 | 10 | pdm_data_helper = PdmDataHelper() |
9 | 11 |
|
10 | 12 |
|
11 | | -def test_search_patient_details(test_data): |
12 | | - pdm_record = {} |
13 | | - test_data.append(pdm_record) |
14 | | - |
15 | | - pdm_record["id"] = str(uuid.uuid4()) |
16 | | - pdm_record["nhs_number"] = "9912003071" |
17 | | - pdm_record["data"] = io.BytesIO(b"Sample PDF Content") |
18 | | - |
19 | | - pdm_data_helper.create_metadata(pdm_record) |
20 | | - pdm_data_helper.create_resource(pdm_record) |
21 | | - |
22 | | - url = f"https://{MTLS_ENDPOINT}/DocumentReference?subject:identifier=https://fhir.nhs.uk/Id/nhs-number|{pdm_record['nhs_number']}" |
23 | | - headers = { |
24 | | - "Authorization": "Bearer 123", |
25 | | - "X-Correlation-Id": "1234", |
| 13 | +def build_pdm_record(nhs_number="9912003071", data=None, doc_status=None): |
| 14 | + """Helper to create a PDM record dictionary.""" |
| 15 | + record = { |
| 16 | + "id": str(uuid.uuid4()), |
| 17 | + "nhs_number": nhs_number, |
| 18 | + "data": data or io.BytesIO(b"Sample PDF Content"), |
26 | 19 | } |
27 | | - # Use mTLS |
28 | | - session = create_mtls_session() |
29 | | - response = session.get(url, headers=headers) |
30 | | - bundle = response.json() |
31 | | - logging.info(bundle) |
32 | | - |
33 | | - |
34 | | -def test_multiple_cancelled_search_patient_details(test_data): |
35 | | - pdm_record = {} |
36 | | - test_data.append(pdm_record) |
37 | | - |
38 | | - pdm_record["id"] = str(uuid.uuid4()) |
39 | | - pdm_record["nhs_number"] = "9912003071" |
40 | | - pdm_record["data"] = io.BytesIO(b"Sample PDF Content") |
41 | | - pdm_record["doc_status"] = "cancelled" |
42 | | - |
43 | | - pdm_data_helper.create_metadata(pdm_record) |
44 | | - pdm_data_helper.create_resource(pdm_record) |
45 | | - |
46 | | - second_pdm_record = {} |
47 | | - test_data.append(second_pdm_record) |
48 | | - |
49 | | - second_pdm_record["id"] = str(uuid.uuid4()) |
50 | | - second_pdm_record["nhs_number"] = "9912003071" |
51 | | - second_pdm_record["data"] = io.BytesIO(b"Sample PDF Content") |
52 | | - second_pdm_record["doc_status"] = "cancelled" |
| 20 | + if doc_status: |
| 21 | + record["doc_status"] = doc_status |
| 22 | + return record |
53 | 23 |
|
54 | | - pdm_data_helper.create_metadata(second_pdm_record) |
55 | | - pdm_data_helper.create_resource(second_pdm_record) |
56 | 24 |
|
57 | | - url = f"https://{MTLS_ENDPOINT}/DocumentReference?subject:identifier=https://fhir.nhs.uk/Id/nhs-number|{pdm_record['nhs_number']}" |
| 25 | +def search_document_reference(nhs_number): |
| 26 | + """Helper to perform search by NHS number.""" |
| 27 | + url = ( |
| 28 | + f"https://{MTLS_ENDPOINT}/DocumentReference?" |
| 29 | + f"subject:identifier=https://fhir.nhs.uk/Id/nhs-number|{nhs_number}" |
| 30 | + ) |
58 | 31 | headers = { |
59 | 32 | "Authorization": "Bearer 123", |
60 | 33 | "X-Correlation-Id": "1234", |
61 | 34 | } |
62 | | - # Use mTLS |
63 | 35 | session = create_mtls_session() |
64 | | - response = session.get(url, headers=headers) |
65 | | - assert response.status_code == 200 |
| 36 | + return session.get(url, headers=headers) |
66 | 37 |
|
67 | 38 |
|
68 | | -def test_no_records(): |
69 | | - pdm_record = {} |
70 | | - pdm_record["nhs_number"] = "9912003071" |
| 39 | +def create_and_store_record(test_data, nhs_number="9912003071", doc_status=None): |
| 40 | + """Helper to create metadata and resource for a record.""" |
| 41 | + record = build_pdm_record(nhs_number=nhs_number, doc_status=doc_status) |
| 42 | + test_data.append(record) |
| 43 | + pdm_data_helper.create_metadata(record) |
| 44 | + pdm_data_helper.create_resource(record) |
| 45 | + return record |
71 | 46 |
|
72 | | - url = f"https://{MTLS_ENDPOINT}/DocumentReference?subject:identifier=https://fhir.nhs.uk/Id/nhs-number|{pdm_record['nhs_number']}" |
73 | | - headers = { |
74 | | - "Authorization": "Bearer 123", |
75 | | - "X-Correlation-Id": "1234", |
76 | | - } |
77 | | - # Use mTLS |
78 | | - session = create_mtls_session() |
79 | | - response = session.get(url, headers=headers) |
80 | | - assert response.status_code == 404 |
81 | 47 |
|
| 48 | +def test_search_patient_details(test_data): |
| 49 | + """Search for a patient with one record.""" |
| 50 | + create_and_store_record(test_data) |
| 51 | + response = search_document_reference("9912003071") |
| 52 | + assert response.status_code == 200 |
| 53 | + bundle = response.json() |
| 54 | + logging.info(bundle) |
| 55 | + assert "entry" in bundle # Basic validation |
82 | 56 |
|
83 | | -def test_invalid_patient(): |
84 | | - pdm_record = {} |
85 | | - pdm_record["nhs_number"] = "9999999993" |
86 | 57 |
|
87 | | - url = f"https://{MTLS_ENDPOINT}/DocumentReference?subject:identifier=https://fhir.nhs.uk/Id/nhs-number|{pdm_record['nhs_number']}" |
88 | | - headers = { |
89 | | - "Authorization": "Bearer 123", |
90 | | - "X-Correlation-Id": "1234", |
91 | | - } |
92 | | - # Use mTLS |
93 | | - session = create_mtls_session() |
94 | | - response = session.get(url, headers=headers) |
95 | | - assert response.status_code == 400 |
| 58 | +def test_multiple_cancelled_search_patient_details(test_data): |
| 59 | + """Search for a patient with multiple cancelled records.""" |
| 60 | + create_and_store_record(test_data, doc_status="cancelled") |
| 61 | + create_and_store_record(test_data, doc_status="cancelled") |
| 62 | + response = search_document_reference("9912003071") |
| 63 | + assert response.status_code == 200 |
| 64 | + bundle = response.json() |
| 65 | + assert len(bundle.get("entry", [])) >= 2 |
| 66 | + |
| 67 | + |
| 68 | +@pytest.mark.parametrize( |
| 69 | + "nhs_number,expected_status", |
| 70 | + [ |
| 71 | + ("9912003071", 404), # No records |
| 72 | + ("9999999993", 400), # Invalid patient |
| 73 | + ], |
| 74 | +) |
| 75 | +def test_search_edge_cases(nhs_number, expected_status): |
| 76 | + """Test search for no records and invalid patient.""" |
| 77 | + response = search_document_reference(nhs_number) |
| 78 | + assert response.status_code == expected_status |
0 commit comments