Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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


Expand Down Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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


Expand Down Expand Up @@ -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,
Expand Down
23 changes: 16 additions & 7 deletions layer/nrlf/core/tests/test_validators.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
from nrlf.core.validators import (
DocumentReferenceValidator,
ValidationResult,
validate_type_system,
validate_type,
)
from nrlf.producer.fhir.r4.model import (
DocumentReference,
Expand All @@ -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():
Expand Down
11 changes: 2 additions & 9 deletions layer/nrlf/core/validators.py
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
Loading