Skip to content

Commit d2fd995

Browse files
NRL-1050 Add tests and fix tests for type validation
1 parent dbe1fff commit d2fd995

File tree

5 files changed

+353
-7
lines changed

5 files changed

+353
-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
@@ -397,6 +398,70 @@ def test_create_document_reference_invalid_pointer_type():
397398
result = handler(event, create_mock_context())
398399
body = result.pop("body")
399400

401+
assert result == {
402+
"statusCode": "400",
403+
"headers": default_response_headers(),
404+
"isBase64Encoded": False,
405+
}
406+
407+
parsed_body = json.loads(body)
408+
409+
assert parsed_body == {
410+
"resourceType": "OperationOutcome",
411+
"issue": [
412+
{
413+
"severity": "error",
414+
"code": "value",
415+
"details": {
416+
"coding": [
417+
{
418+
"code": "INVALID_RESOURCE",
419+
"display": "Invalid validation of resource",
420+
"system": "https://fhir.nhs.uk/ValueSet/Spine-ErrorOrWarningCode-1",
421+
}
422+
]
423+
},
424+
"diagnostics": "Invalid type code: invalid Type must be a member of the England-NRLRecordType value set (https://fhir.nhs.uk/England/CodeSystem/England-NRLRecordType)",
425+
"expression": ["type.coding[0].code"],
426+
},
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": "type (http://snomed.info/sct|invalid) does not map to the category: http://snomed.info/sct|734163000",
440+
"expression": ["type.coding[0]"],
441+
},
442+
],
443+
}
444+
445+
446+
@mock_aws
447+
@mock_repository
448+
@patch("nrlf.core.decorators.parse_permissions_file")
449+
def test_create_document_reference_pointer_type_not_allowed(
450+
parse_permissions_mock, repository: DocumentPointerRepository
451+
):
452+
doc_ref = load_document_reference("Y05868-736253002-Valid")
453+
454+
assert doc_ref.type and doc_ref.type.coding
455+
456+
event = create_test_api_gateway_event(
457+
headers=create_headers(),
458+
body=doc_ref.model_dump_json(exclude_none=True),
459+
)
460+
461+
parse_permissions_mock.return_value = ["invalid"]
462+
result = handler(event, create_mock_context())
463+
body = result.pop("body")
464+
400465
assert result == {
401466
"statusCode": "403",
402467
"headers": default_response_headers(),
@@ -742,6 +807,7 @@ def test_create_document_reference_invalid_relatesto_type(
742807

743808
assert doc_ref.type and doc_ref.type.coding
744809
doc_ref.type.coding[0].code = "861421000000109"
810+
doc_ref.type.coding[0].display = "End of Life Care Coordination Summary"
745811
doc_ref.relatesTo = [
746812
DocumentReferenceRelatesTo(
747813
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
@@ -485,8 +485,8 @@ def test_update_document_reference_immutable_fields(repository):
485485
id=None,
486486
system="http://snomed.info/sct",
487487
version=None,
488-
code="1213324",
489-
display="Some Code",
488+
code="861421000000109",
489+
display="End of Life Care Coordination Summary",
490490
userSelected=None,
491491
)
492492
],

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
@@ -523,6 +524,70 @@ def test_upsert_document_reference_invalid_pointer_type():
523524
result = handler(event, create_mock_context())
524525
body = result.pop("body")
525526

527+
assert result == {
528+
"statusCode": "400",
529+
"headers": default_response_headers(),
530+
"isBase64Encoded": False,
531+
}
532+
533+
parsed_body = json.loads(body)
534+
535+
assert parsed_body == {
536+
"resourceType": "OperationOutcome",
537+
"issue": [
538+
{
539+
"severity": "error",
540+
"code": "value",
541+
"details": {
542+
"coding": [
543+
{
544+
"code": "INVALID_RESOURCE",
545+
"display": "Invalid validation of resource",
546+
"system": "https://fhir.nhs.uk/ValueSet/Spine-ErrorOrWarningCode-1",
547+
}
548+
]
549+
},
550+
"diagnostics": "Invalid type code: invalid Type must be a member of the England-NRLRecordType value set (https://fhir.nhs.uk/England/CodeSystem/England-NRLRecordType)",
551+
"expression": ["type.coding[0].code"],
552+
},
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": "type (http://snomed.info/sct|invalid) does not map to the category: http://snomed.info/sct|734163000",
566+
"expression": ["type.coding[0]"],
567+
},
568+
],
569+
}
570+
571+
572+
@mock_aws
573+
@mock_repository
574+
@patch("nrlf.core.decorators.parse_permissions_file")
575+
def test_upsert_document_reference_pointer_type_not_allowed(
576+
parse_permissions_mock, repository: DocumentPointerRepository
577+
):
578+
doc_ref = load_document_reference("Y05868-736253002-Valid")
579+
580+
assert doc_ref.type and doc_ref.type.coding
581+
582+
event = create_test_api_gateway_event(
583+
headers=create_headers(),
584+
body=doc_ref.model_dump_json(exclude_none=True),
585+
)
586+
587+
parse_permissions_mock.return_value = ["invalid"]
588+
result = handler(event, create_mock_context())
589+
body = result.pop("body")
590+
526591
assert result == {
527592
"statusCode": "403",
528593
"headers": default_response_headers(),
@@ -833,6 +898,7 @@ def test_upsert_document_reference_invalid_relatesto_type(
833898

834899
assert doc_ref.type and doc_ref.type.coding
835900
doc_ref.type.coding[0].code = "861421000000109"
901+
doc_ref.type.coding[0].display = "End of Life Care Coordination Summary"
836902
doc_ref.relatesTo = [
837903
DocumentReferenceRelatesTo(
838904
code="transforms",

0 commit comments

Comments
 (0)