Skip to content

Commit 70fcb7a

Browse files
NRL-1050 Add tests and fix tests for type validation
1 parent aa6b26e commit 70fcb7a

File tree

5 files changed

+354
-7
lines changed

5 files changed

+354
-7
lines changed

api/producer/createDocumentReference/tests/test_create_document_reference.py

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import json
2+
from unittest.mock import patch
23

34
from freeze_uuid import freeze_uuid
45
from freezegun import freeze_time
@@ -412,6 +413,70 @@ def test_create_document_reference_invalid_pointer_type():
412413
result = handler(event, create_mock_context())
413414
body = result.pop("body")
414415

416+
assert result == {
417+
"statusCode": "400",
418+
"headers": default_response_headers(),
419+
"isBase64Encoded": False,
420+
}
421+
422+
parsed_body = json.loads(body)
423+
424+
assert parsed_body == {
425+
"resourceType": "OperationOutcome",
426+
"issue": [
427+
{
428+
"severity": "error",
429+
"code": "value",
430+
"details": {
431+
"coding": [
432+
{
433+
"code": "INVALID_RESOURCE",
434+
"display": "Invalid validation of resource",
435+
"system": "https://fhir.nhs.uk/ValueSet/Spine-ErrorOrWarningCode-1",
436+
}
437+
]
438+
},
439+
"diagnostics": "Invalid type code: invalid Type must be a member of the England-NRLRecordType value set (https://fhir.nhs.uk/England/CodeSystem/England-NRLRecordType)",
440+
"expression": ["type.coding[0].code"],
441+
},
442+
{
443+
"severity": "error",
444+
"code": "value",
445+
"details": {
446+
"coding": [
447+
{
448+
"code": "INVALID_RESOURCE",
449+
"display": "Invalid validation of resource",
450+
"system": "https://fhir.nhs.uk/ValueSet/Spine-ErrorOrWarningCode-1",
451+
}
452+
]
453+
},
454+
"diagnostics": "type (http://snomed.info/sct|invalid) does not map to the category: http://snomed.info/sct|734163000",
455+
"expression": ["type.coding[0]"],
456+
},
457+
],
458+
}
459+
460+
461+
@mock_aws
462+
@mock_repository
463+
@patch("nrlf.core.decorators.parse_permissions_file")
464+
def test_create_document_reference_pointer_type_not_allowed(
465+
parse_permissions_mock, repository: DocumentPointerRepository
466+
):
467+
doc_ref = load_document_reference("Y05868-736253002-Valid")
468+
469+
assert doc_ref.type and doc_ref.type.coding
470+
471+
event = create_test_api_gateway_event(
472+
headers=create_headers(),
473+
body=doc_ref.model_dump_json(exclude_none=True),
474+
)
475+
476+
parse_permissions_mock.return_value = ["invalid"]
477+
result = handler(event, create_mock_context())
478+
body = result.pop("body")
479+
415480
assert result == {
416481
"statusCode": "403",
417482
"headers": default_response_headers(),
@@ -757,6 +822,7 @@ def test_create_document_reference_invalid_relatesto_type(
757822

758823
assert doc_ref.type and doc_ref.type.coding
759824
doc_ref.type.coding[0].code = "861421000000109"
825+
doc_ref.type.coding[0].display = "End of Life Care Coordination Summary"
760826
doc_ref.relatesTo = [
761827
DocumentReferenceRelatesTo(
762828
code="transforms",

api/producer/updateDocumentReference/tests/test_update_document_reference.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -500,8 +500,8 @@ def test_update_document_reference_immutable_fields(repository):
500500
id=None,
501501
system="http://snomed.info/sct",
502502
version=None,
503-
code="1213324",
504-
display="Some Code",
503+
code="861421000000109",
504+
display="End of Life Care Coordination Summary",
505505
userSelected=None,
506506
)
507507
],

api/producer/upsertDocumentReference/tests/test_upsert_document_reference.py

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import json
2+
from unittest.mock import patch
23

34
from freezegun import freeze_time
45
from moto import mock_aws
@@ -538,6 +539,70 @@ def test_upsert_document_reference_invalid_pointer_type():
538539
result = handler(event, create_mock_context())
539540
body = result.pop("body")
540541

542+
assert result == {
543+
"statusCode": "400",
544+
"headers": default_response_headers(),
545+
"isBase64Encoded": False,
546+
}
547+
548+
parsed_body = json.loads(body)
549+
550+
assert parsed_body == {
551+
"resourceType": "OperationOutcome",
552+
"issue": [
553+
{
554+
"severity": "error",
555+
"code": "value",
556+
"details": {
557+
"coding": [
558+
{
559+
"code": "INVALID_RESOURCE",
560+
"display": "Invalid validation of resource",
561+
"system": "https://fhir.nhs.uk/ValueSet/Spine-ErrorOrWarningCode-1",
562+
}
563+
]
564+
},
565+
"diagnostics": "Invalid type code: invalid Type must be a member of the England-NRLRecordType value set (https://fhir.nhs.uk/England/CodeSystem/England-NRLRecordType)",
566+
"expression": ["type.coding[0].code"],
567+
},
568+
{
569+
"severity": "error",
570+
"code": "value",
571+
"details": {
572+
"coding": [
573+
{
574+
"code": "INVALID_RESOURCE",
575+
"display": "Invalid validation of resource",
576+
"system": "https://fhir.nhs.uk/ValueSet/Spine-ErrorOrWarningCode-1",
577+
}
578+
]
579+
},
580+
"diagnostics": "type (http://snomed.info/sct|invalid) does not map to the category: http://snomed.info/sct|734163000",
581+
"expression": ["type.coding[0]"],
582+
},
583+
],
584+
}
585+
586+
587+
@mock_aws
588+
@mock_repository
589+
@patch("nrlf.core.decorators.parse_permissions_file")
590+
def test_upsert_document_reference_pointer_type_not_allowed(
591+
parse_permissions_mock, repository: DocumentPointerRepository
592+
):
593+
doc_ref = load_document_reference("Y05868-736253002-Valid")
594+
595+
assert doc_ref.type and doc_ref.type.coding
596+
597+
event = create_test_api_gateway_event(
598+
headers=create_headers(),
599+
body=doc_ref.model_dump_json(exclude_none=True),
600+
)
601+
602+
parse_permissions_mock.return_value = ["invalid"]
603+
result = handler(event, create_mock_context())
604+
body = result.pop("body")
605+
541606
assert result == {
542607
"statusCode": "403",
543608
"headers": default_response_headers(),
@@ -848,6 +913,7 @@ def test_upsert_document_reference_invalid_relatesto_type(
848913

849914
assert doc_ref.type and doc_ref.type.coding
850915
doc_ref.type.coding[0].code = "861421000000109"
916+
doc_ref.type.coding[0].display = "End of Life Care Coordination Summary"
851917
doc_ref.relatesTo = [
852918
DocumentReferenceRelatesTo(
853919
code="transforms",

0 commit comments

Comments
 (0)