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..21f2f5847cf6 --- /dev/null +++ b/openedx/core/djangoapps/courseware_api/tests/test_notes_visibility.py @@ -0,0 +1,36 @@ +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 +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 5ae28fe54dc7..325e81f4685f 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