From f65a98bc6293ec856944d7b0191865ed76c06cb4 Mon Sep 17 00:00:00 2001 From: vandavv Date: Fri, 28 Jul 2023 12:48:03 +0200 Subject: [PATCH 1/2] Add test and fix the view logic --- .../tests/test_notes_visibility.py | 39 +++++++++++++++++++ .../core/djangoapps/courseware_api/views.py | 8 +++- 2 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 openedx/core/djangoapps/courseware_api/tests/test_notes_visibility.py diff --git a/openedx/core/djangoapps/courseware_api/tests/test_notes_visibility.py b/openedx/core/djangoapps/courseware_api/tests/test_notes_visibility.py new file mode 100644 index 000000000000..26f9297b3633 --- /dev/null +++ b/openedx/core/djangoapps/courseware_api/tests/test_notes_visibility.py @@ -0,0 +1,39 @@ +""" +Unit tests for courseware context_processor +""" +from unittest.mock import Mock, patch # lint-amnesty, pylint: disable=wrong-import-order +from lms.djangoapps.courseware.tests.factories import StudentInfoFactory +from lms.djangoapps.courseware.tests.helpers import LoginEnrollmentTestCase +from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase # lint-amnesty, pylint: disable=wrong-import-order +from xmodule.modulestore.tests.factories import CourseFactory # lint-amnesty, pylint: disable=wrong-import-order + + +class NotesVisibilityTestCase(ModuleStoreTestCase, LoginEnrollmentTestCase): + """ + Unit test for courseware notes visibility + """ + + def setUp(self): + super().setUp() + + self.setup_user() + self.request = Mock() + self.request.user = self.user + self.course = CourseFactory.create(metadata={'edxnotes': True}) + self.enroll(self.course) + + def test_notes_disabled_on_user_preferece(self): + StudentInfoFactory.create(field_name='edxnotes_visibility', value=False, student=self.user) + response = self.client.get(f'/api/courseware/course/{self.course.id}') + + assert response.status_code == 200 + assert response.json()["notes"]["enabled"] + assert not response.json()["notes"]["visible"] + + def test_notes_enabled_on_user_preferece(self): + StudentInfoFactory.create(field_name='edxnotes_visibility', value=True, student=self.user) + response = self.client.get(f'/api/courseware/course/{self.course.id}') + + assert response.status_code == 200 + assert response.json()["notes"]["enabled"] + assert response.json()["notes"]["visible"] diff --git a/openedx/core/djangoapps/courseware_api/views.py b/openedx/core/djangoapps/courseware_api/views.py index 20c2b7918080..df883c36c020 100644 --- a/openedx/core/djangoapps/courseware_api/views.py +++ b/openedx/core/djangoapps/courseware_api/views.py @@ -39,7 +39,7 @@ setup_masquerade, is_masquerading_as_non_audit_enrollment, ) -from lms.djangoapps.courseware.models import LastSeenCoursewareTimezone +from lms.djangoapps.courseware.models import LastSeenCoursewareTimezone, XModuleStudentInfoField from lms.djangoapps.courseware.block_render import get_block_by_usage_id from lms.djangoapps.courseware.toggles import course_exit_page_is_active, learning_assistant_is_active from lms.djangoapps.courseware.views.views import get_cert_data @@ -136,9 +136,13 @@ def notes(self): """ Return whether edxnotes is enabled and visible. """ + visibility = XModuleStudentInfoField.objects\ + .filter(student=self.effective_user, field_name="edxnotes_visibility").first() + + user_preference = visibility.value.lower() == "true" if visibility is not None else True return { 'enabled': is_feature_enabled(self.overview, self.effective_user), - 'visible': self.overview.edxnotes_visibility, + 'visible': self.overview.edxnotes_visibility and user_preference } @property From de1f98b183b968323040c70daf64a9090ee92198 Mon Sep 17 00:00:00 2001 From: vandavv Date: Fri, 28 Jul 2023 15:03:06 +0200 Subject: [PATCH 2/2] remove unused import --- .../djangoapps/courseware_api/tests/test_notes_visibility.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/openedx/core/djangoapps/courseware_api/tests/test_notes_visibility.py b/openedx/core/djangoapps/courseware_api/tests/test_notes_visibility.py index 26f9297b3633..21f2f5847cf6 100644 --- a/openedx/core/djangoapps/courseware_api/tests/test_notes_visibility.py +++ b/openedx/core/djangoapps/courseware_api/tests/test_notes_visibility.py @@ -1,7 +1,4 @@ -""" -Unit tests for courseware context_processor -""" -from unittest.mock import Mock, patch # lint-amnesty, pylint: disable=wrong-import-order +from unittest.mock import Mock # lint-amnesty, pylint: disable=wrong-import-order from lms.djangoapps.courseware.tests.factories import StudentInfoFactory from lms.djangoapps.courseware.tests.helpers import LoginEnrollmentTestCase from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase # lint-amnesty, pylint: disable=wrong-import-order