Skip to content

Commit 05b4fc0

Browse files
authored
[NDR-289] E2E tests for Raw data field. (#857)
1 parent 3829756 commit 05b4fc0

11 files changed

+176
-142
lines changed

lambdas/tests/e2e/api/fhir/conftest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import pytest
88
import requests
99

10-
from lambdas.tests.e2e.helpers.pdm_data_helper import PdmDataHelper
10+
from lambdas.tests.e2e.helpers.data_helper import PdmDataHelper
1111

1212
pdm_data_helper = PdmDataHelper()
1313

lambdas/tests/e2e/api/fhir/test_retrieve_document_fhir_api.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
import pytest
66
import requests
7-
from tests.e2e.helpers.pdm_data_helper import PdmDataHelper
7+
from tests.e2e.helpers.data_helper import PdmDataHelper
88

99
from lambdas.tests.e2e.api.fhir.conftest import (
1010
MTLS_ENDPOINT,

lambdas/tests/e2e/api/fhir/test_search_patient_fhir_api.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
create_mtls_session,
1111
)
1212
from lambdas.tests.e2e.conftest import APIM_ENDPOINT
13-
from lambdas.tests.e2e.helpers.pdm_data_helper import PdmDataHelper
13+
from lambdas.tests.e2e.helpers.data_helper import PdmDataHelper
1414

1515
pdm_data_helper = PdmDataHelper()
1616

@@ -41,7 +41,9 @@ def search_document_reference(nhs_number):
4141
return session.get(url, headers=headers)
4242

4343

44-
def create_and_store_record(test_data, nhs_number="9912003071", doc_status=None):
44+
def create_and_store_record(
45+
test_data, nhs_number="9912003071", doc_status: str | None = None
46+
):
4547
"""Helper to create metadata and resource for a record."""
4648
record = build_pdm_record(nhs_number=nhs_number, doc_status=doc_status)
4749
test_data.append(record)
@@ -61,7 +63,7 @@ def test_search_patient_details(test_data):
6163

6264
attachment_url = bundle["entry"][0]["resource"]["content"][0]["attachment"]["url"]
6365
assert (
64-
f"https://{APIM_ENDPOINT}/national-document-repository/DocumentReference/{PDM_SNOMED}~"
66+
f"https://{APIM_ENDPOINT}/national-document-repository/FHIR/R4/DocumentReference/{PDM_SNOMED}~"
6567
in attachment_url
6668
)
6769

lambdas/tests/e2e/api/fhir/test_upload_document_fhir_api.py

Lines changed: 51 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,10 @@
1212
create_mtls_session,
1313
fetch_with_retry_mtls,
1414
)
15+
from lambdas.tests.e2e.helpers.data_helper import PdmDataHelper
1516

1617

17-
def create_upload_payload(pdm_record):
18+
def create_upload_payload(record):
1819
"""Helper to build DocumentReference payload."""
1920
payload = {
2021
"resourceType": "DocumentReference",
@@ -30,21 +31,21 @@ def create_upload_payload(pdm_record):
3031
"subject": {
3132
"identifier": {
3233
"system": "https://fhir.nhs.uk/Id/nhs-number",
33-
"value": pdm_record["nhs_number"],
34+
"value": record["nhs_number"],
3435
}
3536
},
3637
"author": [
3738
{
3839
"identifier": {
3940
"system": "https://fhir.nhs.uk/Id/ods-organization-code",
40-
"value": pdm_record["ods"],
41+
"value": record["ods"],
4142
}
4243
}
4344
],
4445
"custodian": {
4546
"identifier": {
4647
"system": "https://fhir.nhs.uk/Id/ods-organization-code",
47-
"value": pdm_record["ods"],
48+
"value": record["ods"],
4849
}
4950
},
5051
"content": [
@@ -53,13 +54,13 @@ def create_upload_payload(pdm_record):
5354
"creation": "2023-01-01",
5455
"contentType": "application/pdf",
5556
"language": "en-GB",
56-
"title": "1of1_pdm_record_[Paula Esme VESEY]_[9730153973]_[22-01-1960].pdf",
57+
"title": "1of1_record_[Paula Esme VESEY]_[9730153973]_[22-01-1960].pdf",
5758
}
5859
}
5960
],
6061
}
61-
if "data" in pdm_record:
62-
payload["content"][0]["attachment"]["data"] = pdm_record["data"]
62+
if "data" in record:
63+
payload["content"][0]["attachment"]["data"] = record["data"]
6364
return json.dumps(payload)
6465

6566

@@ -84,15 +85,15 @@ def retrieve_document_with_retry(session, doc_id, condition):
8485

8586

8687
def test_create_document_base64(test_data):
87-
pdm_record = {
88+
record = {
8889
"ods": "H81109",
8990
"nhs_number": "9912003071",
9091
}
9192

9293
sample_pdf_path = os.path.join(os.path.dirname(__file__), "files", "dummy.pdf")
9394
with open(sample_pdf_path, "rb") as f:
94-
pdm_record["data"] = base64.b64encode(f.read()).decode("utf-8")
95-
payload = create_upload_payload(pdm_record)
95+
record["data"] = base64.b64encode(f.read()).decode("utf-8")
96+
payload = create_upload_payload(record)
9697

9798
session = create_mtls_session()
9899
raw_upload_response = upload_document(session, payload)
@@ -103,8 +104,8 @@ def test_create_document_base64(test_data):
103104
attachment_url = upload_response["content"][0]["attachment"]["url"]
104105
assert f"/DocumentReference/{PDM_SNOMED}~" in attachment_url
105106

106-
pdm_record["id"] = raw_upload_response.json()["id"].split("~")[1]
107-
test_data.append(pdm_record)
107+
record["id"] = raw_upload_response.json()["id"].split("~")[1]
108+
test_data.append(record)
108109

109110
def condition(response_json):
110111
logging.info(response_json)
@@ -121,15 +122,15 @@ def condition(response_json):
121122

122123

123124
def test_create_document_presign_fails():
124-
pdm_record = {
125+
record = {
125126
"ods": "H81109",
126127
"nhs_number": "9912003071",
127128
}
128129

129130
sample_pdf_path = os.path.join(os.path.dirname(__file__), "files", "big-dummy.pdf")
130131
with open(sample_pdf_path, "rb") as f:
131-
pdm_record["data"] = base64.b64encode(f.read()).decode("utf-8")
132-
payload = create_upload_payload(pdm_record)
132+
record["data"] = base64.b64encode(f.read()).decode("utf-8")
133+
payload = create_upload_payload(record)
133134

134135
session = create_mtls_session()
135136
upload_response = upload_document(session, payload)
@@ -138,18 +139,18 @@ def test_create_document_presign_fails():
138139

139140

140141
def test_create_document_virus(test_data):
141-
pdm_record = {
142+
record = {
142143
"ods": "H81109",
143144
"nhs_number": "9730154260",
144145
}
145-
payload = create_upload_payload(pdm_record)
146+
payload = create_upload_payload(record)
146147
session = create_mtls_session()
147148

148149
retrieve_response = upload_document(session, payload)
149150
upload_response = retrieve_response.json()
150151

151-
pdm_record["id"] = upload_response["id"].split("~")[1]
152-
test_data.append(pdm_record)
152+
record["id"] = upload_response["id"].split("~")[1]
153+
test_data.append(record)
153154

154155
# Presigned upload
155156
presign_uri = upload_response["content"][0]["attachment"]["url"]
@@ -191,15 +192,15 @@ def condition(response_json):
191192
def test_search_edge_cases(
192193
nhs_number, expected_status, expected_code, expected_diagnostics
193194
):
194-
pdm_record = {
195+
record = {
195196
"ods": "H81109",
196197
"nhs_number": f"{nhs_number}",
197198
}
198199

199200
sample_pdf_bytes = b"Sample PDF Content"
200-
pdm_record["data"] = base64.b64encode(sample_pdf_bytes).decode("utf-8")
201+
record["data"] = base64.b64encode(sample_pdf_bytes).decode("utf-8")
201202

202-
payload = create_upload_payload(pdm_record)
203+
payload = create_upload_payload(record)
203204
session = create_mtls_session()
204205
response = upload_document(session, payload)
205206
assert response.status_code == expected_status
@@ -213,15 +214,15 @@ def test_search_edge_cases(
213214

214215

215216
def test_forbidden_with_invalid_cert(temp_cert_and_key):
216-
pdm_record = {
217+
record = {
217218
"ods": "H81109",
218219
"nhs_number": "9912003071",
219220
}
220221

221222
sample_pdf_bytes = b"Sample PDF Content"
222-
pdm_record["data"] = base64.b64encode(sample_pdf_bytes).decode("utf-8")
223+
record["data"] = base64.b64encode(sample_pdf_bytes).decode("utf-8")
223224

224-
payload = create_upload_payload(pdm_record)
225+
payload = create_upload_payload(record)
225226

226227
# Use an invalid cert that is trusted by TLS but fails truststore validation
227228
cert_path, key_path = temp_cert_and_key
@@ -234,3 +235,28 @@ def test_forbidden_with_invalid_cert(temp_cert_and_key):
234235
body = response.json()
235236
assert response.status_code == 403
236237
assert body["message"] == "Forbidden"
238+
239+
240+
def test_create_document_saves_raw(test_data):
241+
record = {
242+
"ods": "H81109",
243+
"nhs_number": "9912003071",
244+
}
245+
246+
sample_pdf_path = os.path.join(os.path.dirname(__file__), "files", "dummy.pdf")
247+
with open(sample_pdf_path, "rb") as f:
248+
record["data"] = base64.b64encode(f.read()).decode("utf-8")
249+
payload = create_upload_payload(record)
250+
251+
session = create_mtls_session()
252+
raw_upload_response = upload_document(session, payload)
253+
assert raw_upload_response.status_code == 200
254+
255+
json_response = raw_upload_response.json()
256+
record["id"] = json_response.get("id")
257+
pdm_data_helper = PdmDataHelper()
258+
doc_ref = pdm_data_helper.retrieve_document_reference(record=record)
259+
assert "Item" in doc_ref
260+
assert "RawRequest" in doc_ref["Item"]
261+
assert doc_ref["Item"]["RawRequest"]
262+
assert doc_ref["Item"]["RawRequest"] == payload

lambdas/tests/e2e/api/test_retrieve_document_api.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
LLOYD_GEORGE_S3_BUCKET,
1010
LLOYD_GEORGE_SNOMED,
1111
)
12-
from tests.e2e.helpers.lloyd_george_data_helper import LloydGeorgeDataHelper
12+
from tests.e2e.helpers.data_helper import LloydGeorgeDataHelper
1313

1414
data_helper = LloydGeorgeDataHelper()
1515

lambdas/tests/e2e/api/test_search_patient_api.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import requests
66
from syrupy.filters import paths
77
from tests.e2e.conftest import API_ENDPOINT, API_KEY, APIM_ENDPOINT, LLOYD_GEORGE_SNOMED
8-
from tests.e2e.helpers.lloyd_george_data_helper import LloydGeorgeDataHelper
8+
from tests.e2e.helpers.data_helper import LloydGeorgeDataHelper
99

1010
data_helper = LloydGeorgeDataHelper()
1111

@@ -33,7 +33,7 @@ def test_search_patient_details(test_data, snapshot_json):
3333

3434
attachment_url = bundle["entry"][0]["resource"]["content"][0]["attachment"]["url"]
3535
assert (
36-
f"https://{APIM_ENDPOINT}/national-document-repository/DocumentReference/{LLOYD_GEORGE_SNOMED}~"
36+
f"https://{APIM_ENDPOINT}/national-document-repository/FHIR/R4/DocumentReference/{LLOYD_GEORGE_SNOMED}~"
3737
in attachment_url
3838
)
3939

lambdas/tests/e2e/api/test_upload_document_api.py

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
LLOYD_GEORGE_SNOMED,
1414
fetch_with_retry,
1515
)
16-
from tests.e2e.helpers.lloyd_george_data_helper import LloydGeorgeDataHelper
16+
from tests.e2e.helpers.data_helper import LloydGeorgeDataHelper
1717

1818
data_helper = LloydGeorgeDataHelper()
1919

@@ -97,7 +97,7 @@ def condition(response_json):
9797

9898
attachment_url = upload_response["content"][0]["attachment"]["url"]
9999
assert (
100-
f"https://{APIM_ENDPOINT}/national-document-repository/DocumentReference/{LLOYD_GEORGE_SNOMED}~"
100+
f"https://{APIM_ENDPOINT}/national-document-repository/FHIR/R4/DocumentReference/{LLOYD_GEORGE_SNOMED}~"
101101
in attachment_url
102102
)
103103

@@ -194,3 +194,25 @@ def condition(response_json):
194194

195195
assert upload_response == snapshot_json(exclude=paths("id", "date"))
196196
assert retrieve_response == snapshot_json(exclude=paths("id", "date"))
197+
198+
199+
def test_create_document_does_not_save_raw(test_data):
200+
lloyd_george_record = {}
201+
lloyd_george_record["ods"] = "H81109"
202+
lloyd_george_record["nhs_number"] = "9449303304"
203+
204+
sample_pdf_path = os.path.join(os.path.dirname(__file__), "files", "dummy.pdf")
205+
with open(sample_pdf_path, "rb") as f:
206+
lloyd_george_record["data"] = base64.b64encode(f.read()).decode("utf-8")
207+
payload = create_upload_payload(lloyd_george_record)
208+
209+
url = f"https://{API_ENDPOINT}/FhirDocumentReference"
210+
headers = {"Authorization": "Bearer 123", "X-Api-Key": API_KEY}
211+
212+
retrieve_response = requests.post(url, headers=headers, data=payload)
213+
json_response = retrieve_response.json()
214+
215+
lloyd_george_record["id"] = json_response.get("id")
216+
doc_ref = data_helper.retrieve_document_reference(record=lloyd_george_record)
217+
assert "Item" in doc_ref
218+
assert "RawRequest" not in doc_ref["Item"]

lambdas/tests/e2e/conftest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import pytest
55
import requests
66
from syrupy.extensions.json import JSONSnapshotExtension
7-
from tests.e2e.helpers.lloyd_george_data_helper import LloydGeorgeDataHelper
7+
from tests.e2e.helpers.data_helper import LloydGeorgeDataHelper
88

99
data_helper = LloydGeorgeDataHelper()
1010

0 commit comments

Comments
 (0)