Skip to content

Commit b8820d0

Browse files
NRL-1986 Add allow_all_types consumer test and v2 enums
1 parent b128293 commit b8820d0

14 files changed

Lines changed: 190 additions & 69 deletions

File tree

api/consumer/readDocumentReference/tests/test_read_document_reference_consumer.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from moto import mock_aws
55

66
from api.consumer.readDocumentReference.read_document_reference import handler
7+
from nrlf.core.constants import CLIENT_RP_DETAILS, V2Headers
78
from nrlf.core.dynamodb.repository import DocumentPointer, DocumentPointerRepository
89
from nrlf.tests.data import load_document_reference
910
from nrlf.tests.dynamodb import mock_repository
@@ -54,11 +55,11 @@ def test_read_document_reference_happy_path_v2(
5455

5556
v2_headers = create_headers(
5657
additional_headers={
57-
"nhsd-end-user-organisation-ods": "Y05868",
58-
"nhsd-nrl-app-id": "Y05868-TestApp-12345678",
58+
V2Headers.NHSD_END_USER_ORGANISATION_ODS: "Y05868",
59+
V2Headers.NHSD_NRL_APP_ID: "Y05868-TestApp-12345678",
5960
}
6061
)
61-
v2_headers.pop("nhsd-client-rp-details")
62+
v2_headers.pop(CLIENT_RP_DETAILS)
6263

6364
get_pointer_permissions_mock.return_value = {
6465
"access_controls": [],
@@ -213,8 +214,8 @@ def test_read_document_reference_unauthorised_for_type_v2(
213214

214215
headers = create_headers(
215216
additional_headers={
216-
"nhsd-end-user-organisation-ods": "Y05868",
217-
"nhsd-nrl-app-id": "Y05868-TestApp-12345678",
217+
V2Headers.NHSD_END_USER_ORGANISATION_ODS: "Y05868",
218+
V2Headers.NHSD_NRL_APP_ID: "Y05868-TestApp-12345678",
218219
}
219220
)
220221
headers.pop("nhsd-client-rp-details")

api/consumer/searchDocumentReference/tests/test_search_document_reference_consumer.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,11 @@
77
from nrlf.consumer.fhir.r4.model import CodeableConcept, Identifier
88
from nrlf.core.constants import (
99
CATEGORY_ATTRIBUTES,
10+
CLIENT_RP_DETAILS,
1011
TYPE_ATTRIBUTES,
1112
Categories,
1213
PointerTypes,
14+
V2Headers,
1315
)
1416
from nrlf.core.dynamodb.repository import DocumentPointer, DocumentPointerRepository
1517
from nrlf.tests.data import load_document_reference
@@ -75,11 +77,11 @@ def test_search_document_reference_happy_path_v2(
7577

7678
v2_headers = create_headers(
7779
additional_headers={
78-
"nhsd-end-user-organisation-ods": "Y05868",
79-
"nhsd-nrl-app-id": "Y05868-TestApp-12345678",
80+
V2Headers.NHSD_END_USER_ORGANISATION_ODS: "Y05868",
81+
V2Headers.NHSD_NRL_APP_ID: "Y05868-TestApp-12345678",
8082
}
8183
)
82-
v2_headers.pop("nhsd-client-rp-details")
84+
v2_headers.pop(CLIENT_RP_DETAILS)
8385

8486
get_pointer_permissions_mock.return_value = {
8587
"access_controls": [],
@@ -742,11 +744,11 @@ def test_search_document_reference_invalid_type_v2(
742744
):
743745
v2_headers = create_headers(
744746
additional_headers={
745-
"nhsd-end-user-organisation-ods": "Y05868",
746-
"nhsd-nrl-app-id": "Y05868-TestApp-12345678",
747+
V2Headers.NHSD_END_USER_ORGANISATION_ODS: "Y05868",
748+
V2Headers.NHSD_NRL_APP_ID: "Y05868-TestApp-12345678",
747749
}
748750
)
749-
v2_headers.pop("nhsd-client-rp-details")
751+
v2_headers.pop(CLIENT_RP_DETAILS)
750752

751753
get_pointer_permissions_mock.return_value = {
752754
"access_controls": [],

api/consumer/searchPostDocumentReference/tests/test_search_post_document_reference_consumer.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,11 @@
88
)
99
from nrlf.core.constants import (
1010
CATEGORY_ATTRIBUTES,
11+
CLIENT_RP_DETAILS,
1112
TYPE_ATTRIBUTES,
1213
Categories,
1314
PointerTypes,
15+
V2Headers,
1416
)
1517
from nrlf.core.dynamodb.repository import DocumentPointer, DocumentPointerRepository
1618
from nrlf.tests.data import load_document_reference
@@ -78,11 +80,11 @@ def test_search_post_document_reference_happy_path_v2(
7880

7981
v2_headers = create_headers(
8082
additional_headers={
81-
"nhsd-end-user-organisation-ods": "Y05868",
82-
"nhsd-nrl-app-id": "Y05868-TestApp-12345678",
83+
V2Headers.NHSD_END_USER_ORGANISATION_ODS: "Y05868",
84+
V2Headers.NHSD_NRL_APP_ID: "Y05868-TestApp-12345678",
8385
}
8486
)
85-
v2_headers.pop("nhsd-client-rp-details")
87+
v2_headers.pop(CLIENT_RP_DETAILS)
8688

8789
get_pointer_permissions_mock.return_value = {
8890
"access_controls": [],
@@ -500,11 +502,11 @@ def test_search_post_document_reference_invalid_type_v2(
500502
):
501503
v2_headers = create_headers(
502504
additional_headers={
503-
"nhsd-end-user-organisation-ods": "Y05868",
504-
"nhsd-nrl-app-id": "Y05868-TestApp-12345678",
505+
V2Headers.NHSD_END_USER_ORGANISATION_ODS: "Y05868",
506+
V2Headers.NHSD_NRL_APP_ID: "Y05868-TestApp-12345678",
505507
}
506508
)
507-
v2_headers.pop("nhsd-client-rp-details")
509+
v2_headers.pop(CLIENT_RP_DETAILS)
508510

509511
get_pointer_permissions_mock.return_value = {
510512
"access_controls": [],

api/producer/createDocumentReference/tests/test_create_document_reference.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
_set_create_time_fields,
1111
handler,
1212
)
13-
from nrlf.core.constants import SNOMED_SYSTEM_URL
13+
from nrlf.core.constants import CLIENT_RP_DETAILS, SNOMED_SYSTEM_URL, V2Headers
1414
from nrlf.core.dynamodb.repository import DocumentPointer, DocumentPointerRepository
1515
from nrlf.producer.fhir.r4.model import (
1616
DocumentReferenceRelatesTo,
@@ -743,11 +743,11 @@ def test_create_document_reference_happy_path_v2(
743743

744744
v2_headers = create_headers(
745745
additional_headers={
746-
"nhsd-end-user-organisation-ods": "Y05868",
747-
"nhsd-nrl-app-id": "Y05868-TestApp-12345678",
746+
V2Headers.NHSD_END_USER_ORGANISATION_ODS: "Y05868",
747+
V2Headers.NHSD_NRL_APP_ID: "Y05868-TestApp-12345678",
748748
}
749749
)
750-
v2_headers.pop("nhsd-client-rp-details")
750+
v2_headers.pop(CLIENT_RP_DETAILS)
751751

752752
get_pointer_permissions_mock.return_value = {
753753
"access_controls": [],
@@ -803,8 +803,8 @@ def test_create_document_reference_pointer_type_not_allowed_v2(
803803

804804
headers = create_headers(
805805
additional_headers={
806-
"nhsd-end-user-organisation-ods": "Y05868",
807-
"nhsd-nrl-app-id": "Y05868-TestApp-12345678",
806+
V2Headers.NHSD_END_USER_ORGANISATION_ODS: "Y05868",
807+
V2Headers.NHSD_NRL_APP_ID: "Y05868-TestApp-12345678",
808808
}
809809
)
810810
headers.pop("nhsd-client-rp-details")

api/producer/searchDocumentReference/tests/test_search_document_reference_producer.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@
66
from api.producer.searchDocumentReference.search_document_reference import handler
77
from nrlf.core.constants import (
88
CATEGORY_ATTRIBUTES,
9+
CLIENT_RP_DETAILS,
910
TYPE_ATTRIBUTES,
1011
Categories,
1112
PointerTypes,
13+
V2Headers,
1214
)
1315
from nrlf.core.dynamodb.repository import DocumentPointer, DocumentPointerRepository
1416
from nrlf.tests.data import load_document_reference
@@ -68,11 +70,11 @@ def test_search_document_reference_happy_path_v2(
6870

6971
v2_headers = create_headers(
7072
additional_headers={
71-
"nhsd-end-user-organisation-ods": "Y05868",
72-
"nhsd-nrl-app-id": "Y05868-TestApp-12345678",
73+
V2Headers.NHSD_END_USER_ORGANISATION_ODS: "Y05868",
74+
V2Headers.NHSD_NRL_APP_ID: "Y05868-TestApp-12345678",
7375
}
7476
)
75-
v2_headers.pop("nhsd-client-rp-details")
77+
v2_headers.pop(CLIENT_RP_DETAILS)
7678

7779
get_pointer_permissions_mock.return_value = {
7880
"access_controls": [],
@@ -533,11 +535,11 @@ def test_search_document_reference_filters_by_pointer_types_v2(
533535

534536
v2_headers = create_headers(
535537
additional_headers={
536-
"nhsd-end-user-organisation-ods": "Y05868",
537-
"nhsd-nrl-app-id": "Y05868-TestApp-12345678",
538+
V2Headers.NHSD_END_USER_ORGANISATION_ODS: "Y05868",
539+
V2Headers.NHSD_NRL_APP_ID: "Y05868-TestApp-12345678",
538540
}
539541
)
540-
v2_headers.pop("nhsd-client-rp-details")
542+
v2_headers.pop(CLIENT_RP_DETAILS)
541543

542544
get_pointer_permissions_mock.return_value = {
543545
"access_controls": [],

api/producer/searchPostDocumentReference/tests/test_search_post_document_reference_producer.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,11 @@
88
)
99
from nrlf.core.constants import (
1010
CATEGORY_ATTRIBUTES,
11+
CLIENT_RP_DETAILS,
1112
TYPE_ATTRIBUTES,
1213
Categories,
1314
PointerTypes,
15+
V2Headers,
1416
)
1517
from nrlf.core.dynamodb.repository import DocumentPointer, DocumentPointerRepository
1618
from nrlf.tests.data import load_document_reference
@@ -72,11 +74,11 @@ def test_search_post_document_reference_happy_path_v2(
7274

7375
v2_headers = create_headers(
7476
additional_headers={
75-
"nhsd-end-user-organisation-ods": "Y05868",
76-
"nhsd-nrl-app-id": "Y05868-TestApp-12345678",
77+
V2Headers.NHSD_END_USER_ORGANISATION_ODS: "Y05868",
78+
V2Headers.NHSD_NRL_APP_ID: "Y05868-TestApp-12345678",
7779
}
7880
)
79-
v2_headers.pop("nhsd-client-rp-details")
81+
v2_headers.pop(CLIENT_RP_DETAILS)
8082

8183
get_pointer_permissions_mock.return_value = {
8284
"access_controls": [],
@@ -552,11 +554,11 @@ def test_search_post_document_reference_filters_by_pointer_types_v2(
552554

553555
v2_headers = create_headers(
554556
additional_headers={
555-
"nhsd-end-user-organisation-ods": "Y05868",
556-
"nhsd-nrl-app-id": "Y05868-TestApp-12345678",
557+
V2Headers.NHSD_END_USER_ORGANISATION_ODS: "Y05868",
558+
V2Headers.NHSD_NRL_APP_ID: "Y05868-TestApp-12345678",
557559
}
558560
)
559-
v2_headers.pop("nhsd-client-rp-details")
561+
v2_headers.pop(CLIENT_RP_DETAILS)
560562

561563
get_pointer_permissions_mock.return_value = {
562564
"access_controls": [],

api/producer/upsertDocumentReference/tests/test_upsert_document_reference.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,11 @@
99
_set_upsert_time_fields,
1010
handler,
1111
)
12-
from nrlf.core.constants import PERMISSION_SUPERSEDE_IGNORE_DELETE_FAIL
12+
from nrlf.core.constants import (
13+
CLIENT_RP_DETAILS,
14+
PERMISSION_SUPERSEDE_IGNORE_DELETE_FAIL,
15+
V2Headers,
16+
)
1317
from nrlf.core.dynamodb.repository import DocumentPointer, DocumentPointerRepository
1418
from nrlf.producer.fhir.r4.model import (
1519
DocumentReferenceRelatesTo,
@@ -97,11 +101,11 @@ def test_upsert_document_reference_happy_path_v2(
97101

98102
v2_headers = create_headers(
99103
additional_headers={
100-
"nhsd-end-user-organisation-ods": "Y05868",
101-
"nhsd-nrl-app-id": "Y05868-TestApp-12345678",
104+
V2Headers.NHSD_END_USER_ORGANISATION_ODS: "Y05868",
105+
V2Headers.NHSD_NRL_APP_ID: "Y05868-TestApp-12345678",
102106
}
103107
)
104-
v2_headers.pop("nhsd-client-rp-details")
108+
v2_headers.pop(CLIENT_RP_DETAILS)
105109

106110
get_pointer_permissions_mock.return_value = {
107111
"access_controls": [],
@@ -818,11 +822,11 @@ def test_upsert_document_reference_pointer_type_not_allowed_v2(
818822

819823
v2_headers = create_headers(
820824
additional_headers={
821-
"nhsd-end-user-organisation-ods": "Y05868",
822-
"nhsd-nrl-app-id": "Y05868-TestApp-12345678",
825+
V2Headers.NHSD_END_USER_ORGANISATION_ODS: "Y05868",
826+
V2Headers.NHSD_NRL_APP_ID: "Y05868-TestApp-12345678",
823827
}
824828
)
825-
v2_headers.pop("nhsd-client-rp-details")
829+
v2_headers.pop(CLIENT_RP_DETAILS)
826830

827831
get_pointer_permissions_mock.return_value = {
828832
"access_controls": [],

layer/nrlf/core/constants.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,31 @@ class Source(Enum):
3939
}
4040
CLIENT_RP_DETAILS = "nhsd-client-rp-details"
4141
CONNECTION_METADATA = "nhsd-connection-metadata"
42+
43+
44+
class V2Headers(str, Enum):
45+
NHSD_END_USER_ORGANISATION_ODS = "nhsd-end-user-organisation-ods"
46+
NHSD_NRL_APP_ID = "nhsd-nrl-app-id"
47+
48+
4249
PERMISSION_AUDIT_DATES_FROM_PAYLOAD = "audit-dates-from-payload"
4350
PERMISSION_SUPERSEDE_IGNORE_DELETE_FAIL = "supersede-ignore-delete-fail"
4451
PERMISSION_ALLOW_ALL_POINTER_TYPES = "allow-all-pointer-types"
4552

4653

54+
class AccessControls(Enum):
55+
ALLOW_FULL_ACCESS = "allow_full_access"
56+
ALLOW_ALL_TYPES = "allow_all_types"
57+
ALLOW_ALL_SUPPLIER_INTERACTIONS = "allow_all_supplier_interactions"
58+
ALLOW_PRODUCE_FOR_ANY_AUTHOR = "allow_produce_for_any_author"
59+
ALLOW_PRODUCE_FOR_ANY_CUSTODIAN = "allow_produce_for_any_custodian"
60+
ALLOW_OVERRIDE_CREATION_DATETIME = "allow_override_creation_datetime"
61+
62+
@staticmethod
63+
def list():
64+
return [control.value for control in AccessControls]
65+
66+
4767
NHSD_REQUEST_ID_HEADER = "NHSD-Request-Id"
4868
NHSD_CORRELATION_ID_HEADER = "NHSD-Correlation-Id"
4969
X_REQUEST_ID_HEADER = "X-Request-Id"

layer/nrlf/core/request.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from pydantic import BaseModel, ValidationError
55

66
from nrlf.core.codes import SpineErrorConcept
7-
from nrlf.core.constants import CLIENT_RP_DETAILS, CONNECTION_METADATA
7+
from nrlf.core.constants import CLIENT_RP_DETAILS, CONNECTION_METADATA, V2Headers
88
from nrlf.core.errors import OperationOutcomeError, ParseError
99
from nrlf.core.json_duplicate_checker import check_duplicate_keys
1010
from nrlf.core.logger import LogReference, logger
@@ -15,15 +15,15 @@ def _fetch_ods_app_id_headers(headers: dict[str, str]):
1515

1616
case_insensitive_headers = {key.lower(): value for key, value in headers.items()}
1717

18-
ods_code = case_insensitive_headers.get("nhsd-end-user-organisation-ods")
18+
ods_code = case_insensitive_headers.get(V2Headers.NHSD_END_USER_ORGANISATION_ODS)
1919

2020
if not ods_code or len(ods_code.strip()) == 0:
2121
logger.log(
2222
LogReference.HANDLER003a,
2323
headers_names=list(case_insensitive_headers.keys()),
2424
)
2525

26-
nrl_app_id = case_insensitive_headers.get("nhsd-nrl-app-id")
26+
nrl_app_id = case_insensitive_headers.get(V2Headers.NHSD_NRL_APP_ID)
2727
if not nrl_app_id or len(nrl_app_id.strip()) == 0:
2828
logger.log(
2929
LogReference.HANDLER003b,

layer/nrlf/core/tests/test_decorators.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
PERMISSION_ALLOW_ALL_POINTER_TYPES,
1414
X_REQUEST_ID_HEADER,
1515
PointerTypes,
16+
V2Headers,
1617
)
1718
from nrlf.core.decorators import (
1819
deprecated,
@@ -818,8 +819,8 @@ def test_request_load_connection_with_missing_headers_gets_v2_permissions(
818819
):
819820
headers = create_headers(
820821
additional_headers={
821-
"nhsd-end-user-organisation-ods": "Y05868",
822-
"nhsd-nrl-app-id": "Y05868-TestApp-12345678",
822+
V2Headers.NHSD_END_USER_ORGANISATION_ODS: "Y05868",
823+
V2Headers.NHSD_NRL_APP_ID: "Y05868-TestApp-12345678",
823824
}
824825
)
825826
for header_name in headers_missing_from_request:
@@ -838,8 +839,8 @@ def _create_v2_headers() -> dict:
838839
"""Create headers that trigger the v2 permissions model (missing nhsd-client-rp-details)."""
839840
headers = create_headers(
840841
additional_headers={
841-
"nhsd-end-user-organisation-ods": "Y05868",
842-
"nhsd-nrl-app-id": "Y05868-TestApp-12345678",
842+
V2Headers.NHSD_END_USER_ORGANISATION_ODS: "Y05868",
843+
V2Headers.NHSD_NRL_APP_ID: "Y05868-TestApp-12345678",
843844
}
844845
)
845846
headers.pop("nhsd-client-rp-details")

0 commit comments

Comments
 (0)