Skip to content

Commit 95f1ad6

Browse files
authored
[NDR-293] Use EICAR file in virus test (#899)
1 parent 309d15c commit 95f1ad6

File tree

5 files changed

+32
-23
lines changed

5 files changed

+32
-23
lines changed

.github/workflows/ndr-e2e-test-sandbox.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ jobs:
3232
sandbox: ${{ inputs.sandbox }}
3333
secrets:
3434
AWS_ASSUME_ROLE: ${{ secrets.AWS_ASSUME_ROLE }}
35-
35+
3636
services-fhir-api-e2etest:
3737
uses: ./.github/workflows/base-e2e-fhir-backendtest.yml
3838
with:

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

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -95,25 +95,25 @@ def test_create_document_virus(test_data):
9595
"ods": "H81109",
9696
"nhs_number": "9730154260",
9797
}
98+
99+
# Attach EICAR data
100+
eicar_string = r"X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*"
101+
record["data"] = base64.b64encode(eicar_string.encode()).decode()
98102
payload = pdm_data_helper.create_upload_payload(record)
99103

100104
raw_upload_response = upload_document(payload)
101105
assert raw_upload_response.status_code == 200
102-
record["id"] = raw_upload_response.json()["id"].split("~")[1]
103-
test_data.append(record)
104-
105-
# Presigned upload
106106
upload_response = raw_upload_response.json()
107-
presign_uri = upload_response["content"][0]["attachment"]["url"]
108-
del upload_response["content"][0]["attachment"]["url"]
109-
sample_pdf_path = os.path.join(os.path.dirname(__file__), "files", "dummy.pdf")
110-
with open(sample_pdf_path, "rb") as f:
111-
presign_response = requests.put(presign_uri, files={"file": f})
112-
assert presign_response.status_code == 200
107+
record["id"] = upload_response["id"].split("~")[1]
108+
test_data.append(record)
113109

110+
# Poll until processing/scan completes
114111
def condition(response_json):
115112
logging.info(response_json)
116-
return response_json.get("docStatus", False) == "cancelled"
113+
return response_json.get("docStatus") in (
114+
"cancelled",
115+
"final",
116+
)
117117

118118
raw_retrieve_response = retrieve_document_with_retry(
119119
upload_response["id"], condition

lambdas/tests/e2e/api/test_upload_document_api.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,10 @@ def test_create_document_virus(test_data, snapshot_json):
164164

165165
lloyd_george_record["nhs_number"] = "9730154260"
166166

167+
# Attach EICAR data
168+
eicar_string = r"X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*"
169+
lloyd_george_record["data"] = base64.b64encode(eicar_string.encode()).decode()
170+
167171
payload = create_upload_payload(lloyd_george_record)
168172
url = f"https://{API_ENDPOINT}/FhirDocumentReference"
169173
headers = {"Authorization": "Bearer 123", "X-Api-Key": API_KEY}
@@ -172,27 +176,23 @@ def test_create_document_virus(test_data, snapshot_json):
172176
upload_response = retrieve_response.json()
173177
lloyd_george_record["id"] = upload_response["id"].split("~")[1]
174178
test_data.append(lloyd_george_record)
175-
presign_uri = upload_response["content"][0]["attachment"]["url"]
176-
del upload_response["content"][0]["attachment"]["url"]
177-
178-
sample_pdf_path = os.path.join(os.path.dirname(__file__), "files", "dummy.pdf")
179-
with open(sample_pdf_path, "rb") as f:
180-
files = {"file": f}
181-
presign_response = requests.put(presign_uri, files=files)
182-
assert presign_response.status_code == 200
183179

184180
retrieve_url = (
185181
f"https://{API_ENDPOINT}/FhirDocumentReference/{upload_response['id']}"
186182
)
187183

184+
# Poll until processing/scan completes
188185
def condition(response_json):
189186
logging.info(response_json)
190-
return response_json.get("docStatus", False) == "cancelled"
187+
return response_json.get("docStatus") in (
188+
"cancelled",
189+
"final",
190+
)
191191

192192
raw_retrieve_response = fetch_with_retry(retrieve_url, condition)
193193
retrieve_response = raw_retrieve_response.json()
194194

195-
assert upload_response == snapshot_json(exclude=paths("id", "date"))
195+
assert upload_response == snapshot_json(exclude=paths("id", "date", "content.0.attachment.url"))
196196
assert retrieve_response == snapshot_json(exclude=paths("id", "date"))
197197

198198

lambdas/tests/e2e/conftest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
LG_UNSTITCHED_TABLE = os.environ.get("LG_UNSTITCHED_TABLE")
1616
BULK_REPORT_TABLE = os.environ.get("BULK_REPORT_TABLE")
1717
LLOYD_GEORGE_S3_BUCKET = data_helper.s3_bucket
18-
APIM_ENDPOINT = "internal-dev.api.service.nhs.uk"
18+
APIM_ENDPOINT = data_helper.apim_url
1919
PDM_SNOMED = 717391000000106
2020
MTLS_ENDPOINT = os.environ.get("MTLS_ENDPOINT")
2121
CLIENT_CERT_PATH = os.environ.get("CLIENT_CERT_PATH")

lambdas/tests/e2e/helpers/data_helper.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ def __init__(
2424
self.record_type = record_type
2525
self.dynamo_service = DynamoDBService()
2626
self.s3_service = S3Service()
27+
self.apim_url = None
2728

2829
self.build_env(table_name, bucket_name)
2930

@@ -33,6 +34,14 @@ def build_env(self, table_name, bucket_name):
3334
self.dynamo_table = f"{self.workspace}_{table_name}"
3435
self.s3_bucket = f"{self.workspace}-{bucket_name}"
3536

37+
apim_map = {
38+
"pre-prod": "int.api.service.nhs.uk",
39+
"ndr-test": "internal-qa.api.service.nhs.uk",
40+
"ndr-dev": "internal-dev.api.service.nhs.uk",
41+
}
42+
self.apim_url = apim_map.get(str(self.workspace), "internal-dev.api.service.nhs.uk")
43+
44+
3645
def build_record(
3746
self, nhs_number="9912003071", data=None, doc_status=None, size=None
3847
):

0 commit comments

Comments
 (0)