diff --git a/api/consumer/searchDocumentReference/search_document_reference.py b/api/consumer/searchDocumentReference/search_document_reference.py index aee43c7ec..ae590e0f8 100644 --- a/api/consumer/searchDocumentReference/search_document_reference.py +++ b/api/consumer/searchDocumentReference/search_document_reference.py @@ -9,7 +9,7 @@ from nrlf.core.logger import LogReference, logger from nrlf.core.model import ConnectionMetadata, ConsumerRequestParams from nrlf.core.response import Response, SpineErrorResponse -from nrlf.core.validators import validate_category, validate_type_system +from nrlf.core.validators import validate_category, validate_type @request_handler(params=ConsumerRequestParams) @@ -46,8 +46,7 @@ def handler( base_url = f"https://{config.ENVIRONMENT}.api.service.nhs.uk/" self_link = f"{base_url}record-locator/consumer/FHIR/R4/DocumentReference?subject:identifier=https://fhir.nhs.uk/Id/nhs-number|{params.nhs_number}" - # TODO - Add checks for the type code as well as system - if not validate_type_system(params.type, metadata.pointer_types): + if not validate_type(params.type, metadata.pointer_types): logger.log( LogReference.CONSEARCH002, type=params.type, diff --git a/api/consumer/searchPostDocumentReference/search_post_document_reference.py b/api/consumer/searchPostDocumentReference/search_post_document_reference.py index 39964f608..35f91366c 100644 --- a/api/consumer/searchPostDocumentReference/search_post_document_reference.py +++ b/api/consumer/searchPostDocumentReference/search_post_document_reference.py @@ -9,7 +9,7 @@ from nrlf.core.logger import LogReference, logger from nrlf.core.model import ConnectionMetadata, ConsumerRequestParams from nrlf.core.response import Response, SpineErrorResponse -from nrlf.core.validators import validate_category, validate_type_system +from nrlf.core.validators import validate_category, validate_type @request_handler(body=ConsumerRequestParams) @@ -50,7 +50,7 @@ def handler( base_url = f"https://{config.ENVIRONMENT}.api.service.nhs.uk/" self_link = f"{base_url}record-locator/consumer/FHIR/R4/DocumentReference?subject:identifier=https://fhir.nhs.uk/Id/nhs-number|{body.nhs_number}" - if not validate_type_system(body.type, metadata.pointer_types): + if not validate_type(body.type, metadata.pointer_types): logger.log( LogReference.CONPOSTSEARCH002, type=body.type, diff --git a/api/producer/searchDocumentReference/search_document_reference.py b/api/producer/searchDocumentReference/search_document_reference.py index 403d22b8e..eb980f80c 100644 --- a/api/producer/searchDocumentReference/search_document_reference.py +++ b/api/producer/searchDocumentReference/search_document_reference.py @@ -6,7 +6,7 @@ from nrlf.core.logger import LogReference, logger from nrlf.core.model import ConnectionMetadata, ProducerRequestParams from nrlf.core.response import Response, SpineErrorResponse -from nrlf.core.validators import validate_category, validate_type_system +from nrlf.core.validators import validate_category, validate_type from nrlf.producer.fhir.r4.model import Bundle, DocumentReference @@ -48,7 +48,7 @@ def handler( expression="subject:identifier", ) - if not validate_type_system(params.type, metadata.pointer_types): + if not validate_type(params.type, metadata.pointer_types): logger.log( LogReference.PROSEARCH002, type=params.type, diff --git a/api/producer/searchPostDocumentReference/search_post_document_reference.py b/api/producer/searchPostDocumentReference/search_post_document_reference.py index 2c1159653..fc6d8b535 100644 --- a/api/producer/searchPostDocumentReference/search_post_document_reference.py +++ b/api/producer/searchPostDocumentReference/search_post_document_reference.py @@ -6,7 +6,7 @@ from nrlf.core.logger import LogReference, logger from nrlf.core.model import ConnectionMetadata, ProducerRequestParams from nrlf.core.response import Response, SpineErrorResponse -from nrlf.core.validators import validate_category, validate_type_system +from nrlf.core.validators import validate_category, validate_type from nrlf.producer.fhir.r4.model import Bundle, DocumentReference @@ -42,7 +42,7 @@ def handler( expression="subject:identifier", ) - if not validate_type_system(body.type, metadata.pointer_types): + if not validate_type(body.type, metadata.pointer_types): logger.log( LogReference.PROPOSTSEARCH002, type=body.type, diff --git a/layer/nrlf/core/tests/test_validators.py b/layer/nrlf/core/tests/test_validators.py index 169e4af2c..f41e45c2c 100644 --- a/layer/nrlf/core/tests/test_validators.py +++ b/layer/nrlf/core/tests/test_validators.py @@ -13,7 +13,7 @@ from nrlf.core.validators import ( DocumentReferenceValidator, ValidationResult, - validate_type_system, + validate_type, ) from nrlf.producer.fhir.r4.model import ( DocumentReference, @@ -23,28 +23,37 @@ from nrlf.tests.data import load_document_reference_json -def test_validate_type_system_valid(): +def test_validate_type_valid(): type_ = RequestQueryType(root=PointerTypes.MENTAL_HEALTH_PLAN.value) pointer_types = [ PointerTypes.MENTAL_HEALTH_PLAN.value, PointerTypes.EOL_CARE_PLAN.value, ] - assert validate_type_system(type_, pointer_types) is True + assert validate_type(type_, pointer_types) is True -def test_validate_type_system_invalid(): +def test_validate_type_invalid_system(): type_ = RequestQueryType(root="http://snomed.info/invalid|736373009") pointer_types = [ PointerTypes.EOL_CARE_PLAN.value, PointerTypes.EOL_CARE_PLAN.value, ] - assert validate_type_system(type_, pointer_types) is False + assert validate_type(type_, pointer_types) is False -def test_validate_type_system_empty(): +def test_validate_type_invalid_code(): + type_ = RequestQueryType(root=PointerTypes.MRA_UPPER_LIMB_ARTERY.value) + pointer_types = [ + PointerTypes.MENTAL_HEALTH_PLAN.value, + PointerTypes.EOL_CARE_PLAN.value, + ] + assert validate_type(type_, pointer_types) is False + + +def test_validate_type_empty(): type_ = None pointer_types: list[str] = [] - assert validate_type_system(type_, pointer_types) is True + assert validate_type(type_, pointer_types) is True def test_validation_result_reset(): diff --git a/layer/nrlf/core/validators.py b/layer/nrlf/core/validators.py index fa1743013..bef650299 100644 --- a/layer/nrlf/core/validators.py +++ b/layer/nrlf/core/validators.py @@ -24,21 +24,14 @@ from nrlf.producer.fhir.r4 import model as producer_model -def validate_type_system( - type_: Optional[RequestQueryType], pointer_types: List[str] -) -> bool: +def validate_type(type_: Optional[RequestQueryType], pointer_types: List[str]) -> bool: """ Validates if the given type system is present in the list of pointer types. """ if not type_: return True - type_system = type_.root.split("|", 1)[0] - pointer_type_systems = [ - pointer_type.split("|", 1)[0] for pointer_type in pointer_types - ] - - return type_system in pointer_type_systems + return type_.root in pointer_types # TODO - Validate category is in set permissions once permissioning by category is done.