Skip to content

Commit 517a10f

Browse files
NRL-2015 unit tests for all cases now that I'm out of the soup
1 parent e49fd0e commit 517a10f

File tree

1 file changed

+88
-31
lines changed

1 file changed

+88
-31
lines changed

layer/nrlf/core/tests/test_decorators.py

Lines changed: 88 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -807,49 +807,76 @@ def test_request_load_connection_metadata_with_no_permission_lookup_or_file():
807807
assert expected_metadata.pointer_types == []
808808

809809

810-
missing_headers = [
811-
["nhsd-connection-metadata"],
812-
["nhsd-connection-metadata", "nhsd-client-rp-details"],
813-
["nhsd-client-rp-details"],
814-
]
815-
816-
817-
@pytest.mark.parametrize("headers_missing_from_request", missing_headers)
818-
def test_request_load_connection_with_missing_headers_gets_v2_permissions(
819-
headers_missing_from_request, mocker
820-
):
821-
mocker.patch(
822-
"nrlf.core.decorators.get_pointer_permissions_v2",
823-
return_value={"types": ["http://snomed.info/sct|736253001"]},
824-
)
810+
def _create_v2_headers() -> dict:
811+
"""Create headers that trigger the v2 permissions model (missing nhsd-client-rp-details)."""
825812
headers = create_headers(
826813
additional_headers={
827814
V2Headers.NHSD_END_USER_ORGANISATION_ODS: "Y05868",
828815
V2Headers.NHSD_NRL_APP_ID: "Y05868-TestApp-12345678",
829816
}
830817
)
831-
for header_name in headers_missing_from_request:
832-
headers.pop(header_name)
818+
headers.pop("nhsd-client-rp-details")
819+
return headers
833820

834-
expected_metadata = load_connection_metadata(
835-
headers=headers, config=Config(), path="/producer/DocumentReference"
821+
822+
def test_load_connection_metadata_v2_happy_path(
823+
mocker,
824+
):
825+
mocker.patch(
826+
"nrlf.core.decorators.get_pointer_permissions_v2",
827+
return_value={
828+
"types": [
829+
"http://snomed.info/sct|749001000000101",
830+
"https://nicip.nhs.uk|MAULR",
831+
]
832+
},
836833
)
837834

838-
assert expected_metadata.pointer_types == []
839-
assert expected_metadata.ods_code == "Y05868"
840-
assert expected_metadata.nrl_app_id == "Y05868-TestApp-12345678"
835+
metadata = load_connection_metadata(
836+
headers=_create_v2_headers(),
837+
config=Config(),
838+
path="/producer/DocumentReference",
839+
)
841840

841+
assert metadata.nrl_permissions_policy.types == [
842+
"http://snomed.info/sct|749001000000101",
843+
"https://nicip.nhs.uk|MAULR",
844+
]
845+
assert metadata.pointer_types == [] # no v1 permissions
846+
assert metadata.ods_code == "Y05868"
847+
assert metadata.nrl_app_id == "Y05868-TestApp-12345678"
842848

843-
def _create_v2_headers() -> dict:
844-
"""Create headers that trigger the v2 permissions model (missing nhsd-client-rp-details)."""
845-
headers = create_headers(
849+
850+
def test_load_connection_metadata_gets_v2_permissions_when_v1_headers_also_provided(
851+
mocker,
852+
):
853+
v1_permissions = [
854+
"http://snomed.info/sct|749001000000101",
855+
"https://nicip.nhs.uk|MAULR",
856+
]
857+
mocker.patch(
858+
"nrlf.core.decorators.parse_permissions_file",
859+
return_value=v1_permissions,
860+
)
861+
v2_permissions = {"access_controls": [AccessControls.ALLOW_ALL_TYPES.value]}
862+
mocker.patch(
863+
"nrlf.core.decorators.get_pointer_permissions_v2",
864+
return_value=v2_permissions,
865+
)
866+
867+
v1_plus_v2_headers = create_headers(
846868
additional_headers={
847869
V2Headers.NHSD_END_USER_ORGANISATION_ODS: "Y05868",
848870
V2Headers.NHSD_NRL_APP_ID: "Y05868-TestApp-12345678",
849871
}
850872
)
851-
headers.pop("nhsd-client-rp-details")
852-
return headers
873+
874+
metadata = load_connection_metadata(
875+
headers=v1_plus_v2_headers, config=Config(), path="/producer/DocumentReference"
876+
)
877+
878+
assert metadata.nrl_permissions_policy.types == PointerTypes.list()
879+
assert metadata.pointer_types == [] # no v1 permissions
853880

854881

855882
def test_load_connection_metadata_gets_v1_permissions_when_v2_permission_file_missing(
@@ -875,13 +902,43 @@ def test_load_connection_metadata_gets_v1_permissions_when_v2_permission_file_mi
875902
}
876903
)
877904

878-
expected_metadata = load_connection_metadata(
905+
metadata = load_connection_metadata(
879906
headers=v1_plus_v2_headers, config=Config(), path="/producer/DocumentReference"
880907
)
881908

882-
assert expected_metadata.pointer_types == v1_permissions
883-
assert expected_metadata.ods_code == "Y05868"
884-
assert expected_metadata.nrl_app_id == "Y05868-TestApp-12345678"
909+
assert metadata.pointer_types == v1_permissions
910+
assert metadata.nrl_permissions_policy == None # no v2 permissions
911+
912+
913+
def test_load_connection_metadata_gets_v1_permissions_when_v2_headers_missing(
914+
mocker,
915+
):
916+
v1_permissions = [
917+
"http://snomed.info/sct|749001000000101",
918+
"https://nicip.nhs.uk|MAULR",
919+
]
920+
mocker.patch(
921+
"nrlf.core.decorators.parse_permissions_file",
922+
return_value=v1_permissions,
923+
)
924+
v2_permissions = {"access_controls": [AccessControls.ALLOW_ALL_TYPES.value]}
925+
mocker.patch(
926+
"nrlf.core.decorators.get_pointer_permissions_v2",
927+
return_value=v2_permissions,
928+
)
929+
930+
v1_headers_only = create_headers(
931+
additional_headers={
932+
V2Headers.NHSD_END_USER_ORGANISATION_ODS: "Y05868",
933+
}
934+
)
935+
936+
metadata = load_connection_metadata(
937+
headers=v1_headers_only, config=Config(), path="/producer/DocumentReference"
938+
)
939+
940+
assert metadata.pointer_types == v1_permissions
941+
assert metadata.nrl_permissions_policy == None # no v2 permissions
885942

886943

887944
def test_load_v2_connection_metadata_allow_all_types(mocker: MockerFixture):

0 commit comments

Comments
 (0)