From 4de5d0e85a64c4f8f1d42f5793a7b1191e020727 Mon Sep 17 00:00:00 2001 From: shadinaif Date: Tue, 14 Jan 2025 10:30:19 +0300 Subject: [PATCH] fix: roles cache organization case-insensitive --- common/djangoapps/student/roles.py | 2 +- common/djangoapps/student/tests/test_roles.py | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/common/djangoapps/student/roles.py b/common/djangoapps/student/roles.py index 971433c9c523..33daa377c792 100644 --- a/common/djangoapps/student/roles.py +++ b/common/djangoapps/student/roles.py @@ -167,7 +167,7 @@ def has_role(self, role, course_id, org): course_id_string = get_role_cache_key_for_course(course_id) course_roles = self._roles_by_course_id.get(course_id_string, []) return any( - access_role.role in self.get_roles(role) and access_role.org == org + access_role.role in self.get_roles(role) and access_role.org.lower() == org.lower() for access_role in course_roles ) diff --git a/common/djangoapps/student/tests/test_roles.py b/common/djangoapps/student/tests/test_roles.py index da1aad19a803..ed9e281ead34 100644 --- a/common/djangoapps/student/tests/test_roles.py +++ b/common/djangoapps/student/tests/test_roles.py @@ -232,6 +232,17 @@ def test_only_in_role(self, role, target): else: assert not cache.has_role(*other_target) + @ddt.data(IN_KEY.org, 'edx', 'EDX', 'EdX') + def test_org_case_insensitive(self, compare_to_org): + org_role = OrgStaffRole(self.IN_KEY.org) + course_role = CourseInstructorRole(self.IN_KEY) + org_role.add_users(self.user) + course_role.add_users(self.user) + + role_cache = RoleCache(self.user) + assert role_cache.has_role('staff', None, compare_to_org) + assert role_cache.has_role('instructor', self.IN_KEY, compare_to_org) + @ddt.data(*ROLES) @ddt.unpack def test_empty_cache(self, role, target): # lint-amnesty, pylint: disable=unused-argument