diff --git a/lms/djangoapps/discussion/rest_api/tests/test_utils.py b/lms/djangoapps/discussion/rest_api/tests/test_utils.py index 655e786702..ef02b474cd 100644 --- a/lms/djangoapps/discussion/rest_api/tests/test_utils.py +++ b/lms/djangoapps/discussion/rest_api/tests/test_utils.py @@ -240,7 +240,7 @@ class TestSendResponseNotifications(ForumsEnableMixin, CommentsServiceMockMixin, expected_context = { 'replier_name': self.user_3.username, 'post_title': self.thread.title, - 'author_name': 'dummy', + 'author_name': 'dummy\'s', 'course_name': self.course.display_name, } self.assertDictEqual(args_comment.context, expected_context) @@ -311,6 +311,36 @@ class TestSendResponseNotifications(ForumsEnableMixin, CommentsServiceMockMixin, self.assertEqual(args_comment.app_name, 'discussion') +class TestSendCommentNotification(ForumsEnableMixin, CommentsServiceMockMixin, ModuleStoreTestCase): + """ + Test case to send new_comment notification + """ + def setUp(self): + super().setUp() + httpretty.reset() + httpretty.enable() + + self.course = CourseFactory.create() + self.user_1 = UserFactory.create() + self.user_2 = UserFactory.create() + + def test_new_comment_notification(self): + handler = Mock() + USER_NOTIFICATION_REQUESTED.connect(handler) + + thread = ThreadMock(thread_id=1, creator=self.user_1, title='test thread') + response = ThreadMock(thread_id=2, creator=self.user_2, title='test response') + self.register_get_comment_response({ + 'id': response.id, + 'thread_id': 'abc', + 'user_id': response.user_id + }) + send_response_notifications(thread, self.course, self.user_2, parent_id=response.id) + handler.assert_called_once() + context = handler.call_args[1]['notification_data'].context + self.assertEqual(context['author_name'], 'their') + + @ddt.ddt class TestBlackoutDates(ForumsEnableMixin, CommentsServiceMockMixin, ModuleStoreTestCase): """ diff --git a/lms/djangoapps/discussion/rest_api/utils.py b/lms/djangoapps/discussion/rest_api/utils.py index 26904c9f45..8ec6eeb987 100644 --- a/lms/djangoapps/discussion/rest_api/utils.py +++ b/lms/djangoapps/discussion/rest_api/utils.py @@ -9,6 +9,7 @@ from django.conf import settings from django.contrib.auth.models import User # lint-amnesty, pylint: disable=imported-auth-user from django.core.paginator import Paginator from django.db.models.functions import Length +from django.utils.translation import gettext_lazy as _ from common.djangoapps.student.models import CourseEnrollment from common.djangoapps.student.roles import CourseStaffRole, CourseInstructorRole @@ -502,19 +503,32 @@ class DiscussionNotificationSender: """ return int(self.parent_response.user_id) == int(self.thread.user_id) + def _response_and_comment_has_same_creator(self): + return int(self.parent_response.attributes['user_id']) == self.creator.id + def send_new_comment_notification(self): """ Send notification to parent thread creator i.e. comment on the response. """ - # if ( self.parent_response and self.creator.id != int(self.thread.user_id) ): # use your if author of response is same as author of post. - author_name = "your" if self._response_and_thread_has_same_creator() else self.parent_response.username + # use 'their' if comment author is also response author. + author_name = ( + # Translators: Replier commented on "your" response to your post + _("your") + if self._response_and_thread_has_same_creator() + else ( + # Translators: Replier commented on "their" response to your post + _("their") + if self._response_and_comment_has_same_creator() + else f"{self.parent_response.username}'s" + ) + ) context = { - "author_name": author_name, + "author_name": str(author_name), } self._send_notification([self.thread.user_id], "new_comment", extra_context=context) diff --git a/openedx/core/djangoapps/notifications/base_notification.py b/openedx/core/djangoapps/notifications/base_notification.py index fb5350dae6..ec3018c007 100644 --- a/openedx/core/djangoapps/notifications/base_notification.py +++ b/openedx/core/djangoapps/notifications/base_notification.py @@ -25,7 +25,7 @@ COURSE_NOTIFICATION_TYPES = { 'notification_app': 'discussion', 'name': 'new_comment', 'is_core': True, - 'content_template': _('<{p}><{strong}>{replier_name} commented on <{strong}>{author_name}\'s' + 'content_template': _('<{p}><{strong}>{replier_name} commented on <{strong}>{author_name}' ' response to your post <{strong}>{post_title}'), 'content_context': { 'post_title': 'Post title',