@@ -957,9 +957,12 @@ def setUp(self):
957957 def stub_get_libraries_queryset (_ , allowed_pairs = None , search = "" ): # pylint: disable=unused-argument
958958 qs = ContentLibrary .objects
959959 if allowed_pairs is not None :
960- qs = qs .filter (
961- reduce (operator .or_ , (Q (org__short_name = org , slug = slug ) for org , slug in allowed_pairs ), Q ())
962- )
960+ if not allowed_pairs :
961+ qs = qs .none ()
962+ else :
963+ qs = qs .filter (
964+ reduce (operator .or_ , (Q (org__short_name = org , slug = slug ) for org , slug in allowed_pairs ))
965+ )
963966 return qs .annotate (
964967 scope_id = Cast ("slug" , output_field = CharField ()),
965968 org_name = Cast ("org__short_name" , output_field = CharField ()),
@@ -1214,6 +1217,23 @@ def test_manage_permission_filters_libraries_for_non_staff(self):
12141217 self .assertIn ("lib:Org3:LIB3" , external_keys )
12151218 self .assertNotIn (self .LIBRARY_ORG1 , external_keys )
12161219
1220+ def test_empty_allowed_library_pairs_returns_no_libraries (self ):
1221+ """When a non-staff user has no allowed libraries, no libraries are returned.
1222+
1223+ Regression test: an empty allowed_pairs set must not bypass the filter
1224+ and return all libraries (reduce with Q() default was a no-op).
1225+ """
1226+ # regular_9 has no library permissions, only a course role.
1227+ user = User .objects .get (username = "regular_9" )
1228+ self .client .force_authenticate (user = user )
1229+ self .build_qs_patcher .stop ()
1230+
1231+ response = self .client .get (self .url , {"type" : "library" })
1232+
1233+ self .build_qs_patcher .start ()
1234+ self .assertEqual (response .status_code , status .HTTP_200_OK )
1235+ self .assertEqual (response .data ["count" ], 0 )
1236+
12171237 def test_manage_permission_only_uses_manage_permission (self ):
12181238 """management_permission_only=true calls get_admin_manage_permission, not get_admin_view_permission."""
12191239 user = User .objects .get (username = "regular_1" )
0 commit comments