Skip to content

Commit dd15515

Browse files
NRL-1050 Add tests and fix tests for type validation
1 parent 966c856 commit dd15515

File tree

5 files changed

+336
-10
lines changed

5 files changed

+336
-10
lines changed

api/producer/createDocumentReference/tests/test_create_document_reference.py

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from freezegun import freeze_time
55
from moto import mock_aws
66
from pytest import mark
7+
from unittest.mock import patch
78

89
from api.producer.createDocumentReference.create_document_reference import (
910
_set_create_time_fields,
@@ -397,6 +398,67 @@ 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+
@mock_aws
446+
@mock_repository
447+
@patch('nrlf.core.decorators.parse_permissions_file')
448+
def test_create_document_reference_pointer_type_not_allowed(parse_permissions_mock, repository: DocumentPointerRepository):
449+
doc_ref = load_document_reference("Y05868-736253002-Valid")
450+
451+
assert doc_ref.type and doc_ref.type.coding
452+
453+
event = create_test_api_gateway_event(
454+
headers=create_headers(),
455+
body=doc_ref.model_dump_json(exclude_none=True),
456+
)
457+
458+
parse_permissions_mock.return_value = ["invalid"]
459+
result = handler(event, create_mock_context())
460+
body = result.pop("body")
461+
400462
assert result == {
401463
"statusCode": "403",
402464
"headers": default_response_headers(),
@@ -742,6 +804,7 @@ def test_create_document_reference_invalid_relatesto_type(
742804

743805
assert doc_ref.type and doc_ref.type.coding
744806
doc_ref.type.coding[0].code = "861421000000109"
807+
doc_ref.type.coding[0].display = "End of Life Care Coordination Summary"
745808
doc_ref.relatesTo = [
746809
DocumentReferenceRelatesTo(
747810
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: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from freezegun import freeze_time
44
from moto import mock_aws
55
from pytest import mark
6+
from unittest.mock import patch
67

78
from api.producer.upsertDocumentReference.upsert_document_reference import (
89
_set_upsert_time_fields,
@@ -523,6 +524,67 @@ 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+
@mock_aws
572+
@mock_repository
573+
@patch('nrlf.core.decorators.parse_permissions_file')
574+
def test_upsert_document_reference_pointer_type_not_allowed(parse_permissions_mock, repository: DocumentPointerRepository):
575+
doc_ref = load_document_reference("Y05868-736253002-Valid")
576+
577+
assert doc_ref.type and doc_ref.type.coding
578+
579+
event = create_test_api_gateway_event(
580+
headers=create_headers(),
581+
body=doc_ref.model_dump_json(exclude_none=True),
582+
)
583+
584+
parse_permissions_mock.return_value = ["invalid"]
585+
result = handler(event, create_mock_context())
586+
body = result.pop("body")
587+
526588
assert result == {
527589
"statusCode": "403",
528590
"headers": default_response_headers(),
@@ -833,6 +895,7 @@ def test_upsert_document_reference_invalid_relatesto_type(
833895

834896
assert doc_ref.type and doc_ref.type.coding
835897
doc_ref.type.coding[0].code = "861421000000109"
898+
doc_ref.type.coding[0].display = "End of Life Care Coordination Summary"
836899
doc_ref.relatesTo = [
837900
DocumentReferenceRelatesTo(
838901
code="transforms",

0 commit comments

Comments
 (0)