@@ -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
855882def 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
887944def test_load_v2_connection_metadata_allow_all_types (mocker : MockerFixture ):
0 commit comments