diff --git a/cms/djangoapps/contentstore/tests/test_course_listing.py b/cms/djangoapps/contentstore/tests/test_course_listing.py index 3c9705fdf2..9baa1c044f 100644 --- a/cms/djangoapps/contentstore/tests/test_course_listing.py +++ b/cms/djangoapps/contentstore/tests/test_course_listing.py @@ -315,24 +315,24 @@ class TestCourseListing(ModuleStoreTestCase): all of them. """ org_course_one = self.store.make_course_key('AwesomeOrg', 'Course1', 'RunBabyRun') - CourseFactory.create( + course_1 = CourseFactory.create( org=org_course_one.org, number=org_course_one.course, run=org_course_one.run ) + CourseOverviewFactory.create(id=course_1.id, org='AwesomeOrg') org_course_two = self.store.make_course_key('AwesomeOrg', 'Course2', 'RunBabyRun') - CourseFactory.create( + course_2 = CourseFactory.create( org=org_course_two.org, number=org_course_two.course, run=org_course_two.run ) + CourseOverviewFactory.create(id=course_2.id, org='AwesomeOrg') # Two types of org-wide roles have edit permissions: staff and instructor. We test both role.add_users(self.user) - with self.assertRaises(AccessListFallback): - _accessible_courses_list_from_groups(self.request) courses_list, __ = get_courses_accessible_to_user(self.request) # Verify fetched accessible courses list is a list of CourseSummery instances and test expacted @@ -340,6 +340,17 @@ class TestCourseListing(ModuleStoreTestCase): self.assertEqual(len(list(courses_list)), 2) self.assertTrue(all(isinstance(course, CourseOverview) for course in courses_list)) + @ddt.data(OrgStaffRole(), OrgInstructorRole()) + def test_course_listing_org_permissions_exception(self, role): + """ + Create roles with no course_id neither org to make sure AccessListFallback is raised for + platform-wide permissions + """ + role.add_users(self.user) + + with self.assertRaises(AccessListFallback): + _accessible_courses_list_from_groups(self.request) + def test_course_listing_with_actions_in_progress(self): sourse_course_key = CourseLocator('source-Org', 'source-Course', 'source-Run') diff --git a/cms/djangoapps/contentstore/views/course.py b/cms/djangoapps/contentstore/views/course.py index 10b78596ae..b8db950d74 100644 --- a/cms/djangoapps/contentstore/views/course.py +++ b/cms/djangoapps/contentstore/views/course.py @@ -483,10 +483,20 @@ def _accessible_courses_list_from_groups(request): courses_list = [] course_keys = {} + user_global_orgs = set() for course_access in all_courses: - if course_access.course_id is None: + if course_access.course_id is not None: + course_keys[course_access.course_id] = course_access.course_id + elif course_access.org: + user_global_orgs.add(course_access.org) + else: raise AccessListFallback - course_keys[course_access.course_id] = course_access.course_id + + if user_global_orgs: + # Getting courses from user global orgs + overviews = CourseOverview.get_all_courses(orgs=list(user_global_orgs)) + overviews_course_keys = {overview.id: overview.id for overview in overviews} + course_keys.update(overviews_course_keys) course_keys = list(course_keys.values())