From d1741f88caf8e921d67d224206c54356506dbe8a Mon Sep 17 00:00:00 2001 From: Jillian Vogel Date: Tue, 2 Nov 2021 19:34:14 +1030 Subject: [PATCH] test: Adds a test to verify the bug introduced by the previous change This bug occurs when get_module_system_for_user is called more than once per request, for blocks with different values for the requires_per_student_anonymous_id property. --- .../courseware/tests/test_module_render.py | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/lms/djangoapps/courseware/tests/test_module_render.py b/lms/djangoapps/courseware/tests/test_module_render.py index ffb06d35ca..bc19f06e83 100644 --- a/lms/djangoapps/courseware/tests/test_module_render.py +++ b/lms/djangoapps/courseware/tests/test_module_render.py @@ -2576,6 +2576,7 @@ class LmsModuleSystemShimTest(SharedModuleStoreTestCase): super().setUpClass() cls.course = CourseFactory.create() cls.descriptor = ItemFactory(category="vertical", parent=cls.course) + cls.problem_descriptor = ItemFactory(category="problem", parent=cls.course) def setUp(self): """ @@ -2637,6 +2638,40 @@ class LmsModuleSystemShimTest(SharedModuleStoreTestCase): ) assert runtime.anonymous_student_id == anonymous_id_for_user(self.user, self.course.id) + def test_anonymous_student_id_bug(self): + """ + Verifies that subsequent calls to get_module_system_for_user have no effect on each block runtime's + anonymous_student_id value. + """ + problem_runtime, _ = render.get_module_system_for_user( + self.user, + self.student_data, + self.problem_descriptor, + self.course.id, + self.track_function, + self.xqueue_callback_url_prefix, + self.request_token, + course=self.course, + ) + # Ensure the problem block returns a per-user anonymous id + assert problem_runtime.anonymous_student_id == anonymous_id_for_user(self.user, None) + + vertical_runtime, _ = render.get_module_system_for_user( + self.user, + self.student_data, + self.descriptor, + self.course.id, + self.track_function, + self.xqueue_callback_url_prefix, + self.request_token, + course=self.course, + ) + # Ensure the vertical block returns a per-course+user anonymous id + assert vertical_runtime.anonymous_student_id == anonymous_id_for_user(self.user, self.course.id) + + # Ensure the problem runtime's anonymous student ID is unchanged after the above call. + assert problem_runtime.anonymous_student_id == anonymous_id_for_user(self.user, None) + def test_user_service_with_anonymous_user(self): runtime, _ = render.get_module_system_for_user( AnonymousUser(),