Skip to content

Commit cb1375b

Browse files
authored
Merge pull request #766 from NHSDigital/feature/eema1-NRL-1202-permsNotCheckedForPointerTypeSearch
NRL-1202 validate type not just system
2 parents eed5022 + 3595c4f commit cb1375b

File tree

6 files changed

+26
-25
lines changed

6 files changed

+26
-25
lines changed

api/consumer/searchDocumentReference/search_document_reference.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from nrlf.core.logger import LogReference, logger
1010
from nrlf.core.model import ConnectionMetadata, ConsumerRequestParams
1111
from nrlf.core.response import Response, SpineErrorResponse
12-
from nrlf.core.validators import validate_category, validate_type_system
12+
from nrlf.core.validators import validate_category, validate_type
1313

1414

1515
@request_handler(params=ConsumerRequestParams)
@@ -46,8 +46,7 @@ def handler(
4646
base_url = f"https://{config.ENVIRONMENT}.api.service.nhs.uk/"
4747
self_link = f"{base_url}record-locator/consumer/FHIR/R4/DocumentReference?subject:identifier=https://fhir.nhs.uk/Id/nhs-number|{params.nhs_number}"
4848

49-
# TODO - Add checks for the type code as well as system
50-
if not validate_type_system(params.type, metadata.pointer_types):
49+
if not validate_type(params.type, metadata.pointer_types):
5150
logger.log(
5251
LogReference.CONSEARCH002,
5352
type=params.type,

api/consumer/searchPostDocumentReference/search_post_document_reference.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from nrlf.core.logger import LogReference, logger
1010
from nrlf.core.model import ConnectionMetadata, ConsumerRequestParams
1111
from nrlf.core.response import Response, SpineErrorResponse
12-
from nrlf.core.validators import validate_category, validate_type_system
12+
from nrlf.core.validators import validate_category, validate_type
1313

1414

1515
@request_handler(body=ConsumerRequestParams)
@@ -50,7 +50,7 @@ def handler(
5050
base_url = f"https://{config.ENVIRONMENT}.api.service.nhs.uk/"
5151
self_link = f"{base_url}record-locator/consumer/FHIR/R4/DocumentReference?subject:identifier=https://fhir.nhs.uk/Id/nhs-number|{body.nhs_number}"
5252

53-
if not validate_type_system(body.type, metadata.pointer_types):
53+
if not validate_type(body.type, metadata.pointer_types):
5454
logger.log(
5555
LogReference.CONPOSTSEARCH002,
5656
type=body.type,

api/producer/searchDocumentReference/search_document_reference.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from nrlf.core.logger import LogReference, logger
77
from nrlf.core.model import ConnectionMetadata, ProducerRequestParams
88
from nrlf.core.response import Response, SpineErrorResponse
9-
from nrlf.core.validators import validate_category, validate_type_system
9+
from nrlf.core.validators import validate_category, validate_type
1010
from nrlf.producer.fhir.r4.model import Bundle, DocumentReference
1111

1212

@@ -48,7 +48,7 @@ def handler(
4848
expression="subject:identifier",
4949
)
5050

51-
if not validate_type_system(params.type, metadata.pointer_types):
51+
if not validate_type(params.type, metadata.pointer_types):
5252
logger.log(
5353
LogReference.PROSEARCH002,
5454
type=params.type,

api/producer/searchPostDocumentReference/search_post_document_reference.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from nrlf.core.logger import LogReference, logger
77
from nrlf.core.model import ConnectionMetadata, ProducerRequestParams
88
from nrlf.core.response import Response, SpineErrorResponse
9-
from nrlf.core.validators import validate_category, validate_type_system
9+
from nrlf.core.validators import validate_category, validate_type
1010
from nrlf.producer.fhir.r4.model import Bundle, DocumentReference
1111

1212

@@ -42,7 +42,7 @@ def handler(
4242
expression="subject:identifier",
4343
)
4444

45-
if not validate_type_system(body.type, metadata.pointer_types):
45+
if not validate_type(body.type, metadata.pointer_types):
4646
logger.log(
4747
LogReference.PROPOSTSEARCH002,
4848
type=body.type,

layer/nrlf/core/tests/test_validators.py

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from nrlf.core.validators import (
1414
DocumentReferenceValidator,
1515
ValidationResult,
16-
validate_type_system,
16+
validate_type,
1717
)
1818
from nrlf.producer.fhir.r4.model import (
1919
DocumentReference,
@@ -23,28 +23,37 @@
2323
from nrlf.tests.data import load_document_reference_json
2424

2525

26-
def test_validate_type_system_valid():
26+
def test_validate_type_valid():
2727
type_ = RequestQueryType(root=PointerTypes.MENTAL_HEALTH_PLAN.value)
2828
pointer_types = [
2929
PointerTypes.MENTAL_HEALTH_PLAN.value,
3030
PointerTypes.EOL_CARE_PLAN.value,
3131
]
32-
assert validate_type_system(type_, pointer_types) is True
32+
assert validate_type(type_, pointer_types) is True
3333

3434

35-
def test_validate_type_system_invalid():
35+
def test_validate_type_invalid_system():
3636
type_ = RequestQueryType(root="http://snomed.info/invalid|736373009")
3737
pointer_types = [
3838
PointerTypes.EOL_CARE_PLAN.value,
3939
PointerTypes.EOL_CARE_PLAN.value,
4040
]
41-
assert validate_type_system(type_, pointer_types) is False
41+
assert validate_type(type_, pointer_types) is False
4242

4343

44-
def test_validate_type_system_empty():
44+
def test_validate_type_invalid_code():
45+
type_ = RequestQueryType(root=PointerTypes.MRA_UPPER_LIMB_ARTERY.value)
46+
pointer_types = [
47+
PointerTypes.MENTAL_HEALTH_PLAN.value,
48+
PointerTypes.EOL_CARE_PLAN.value,
49+
]
50+
assert validate_type(type_, pointer_types) is False
51+
52+
53+
def test_validate_type_empty():
4554
type_ = None
4655
pointer_types: list[str] = []
47-
assert validate_type_system(type_, pointer_types) is True
56+
assert validate_type(type_, pointer_types) is True
4857

4958

5059
def test_validation_result_reset():

layer/nrlf/core/validators.py

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,21 +24,14 @@
2424
from nrlf.producer.fhir.r4 import model as producer_model
2525

2626

27-
def validate_type_system(
28-
type_: Optional[RequestQueryType], pointer_types: List[str]
29-
) -> bool:
27+
def validate_type(type_: Optional[RequestQueryType], pointer_types: List[str]) -> bool:
3028
"""
3129
Validates if the given type system is present in the list of pointer types.
3230
"""
3331
if not type_:
3432
return True
3533

36-
type_system = type_.root.split("|", 1)[0]
37-
pointer_type_systems = [
38-
pointer_type.split("|", 1)[0] for pointer_type in pointer_types
39-
]
40-
41-
return type_system in pointer_type_systems
34+
return type_.root in pointer_types
4235

4336

4437
# TODO - Validate category is in set permissions once permissioning by category is done.

0 commit comments

Comments
 (0)