From 7d8d9d67c1f794986920ae24f1bb22b413e45088 Mon Sep 17 00:00:00 2001 From: muhammadadeeltajamul Date: Fri, 11 Apr 2025 12:51:19 +0500 Subject: [PATCH] feat: prevent sending course update, recurring nudge and upgrade reminder email to disabled users --- openedx/core/djangoapps/schedules/tasks.py | 3 ++ .../djangoapps/schedules/tests/test_tasks.py | 47 ++++++++++++++++++- 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/openedx/core/djangoapps/schedules/tasks.py b/openedx/core/djangoapps/schedules/tasks.py index 55288d63f1a8..6a999d3dd8ed 100644 --- a/openedx/core/djangoapps/schedules/tasks.py +++ b/openedx/core/djangoapps/schedules/tasks.py @@ -276,6 +276,9 @@ def _schedule_send(msg_str, site_id, delivery_config_var, log_prefix): # lint-a msg = Message.from_string(msg_str) user = User.objects.get(id=msg.recipient.lms_user_id) + if not user.has_usable_password(): + LOG.info(f'{delivery_config_var} Scheduled email User is disabled {user.username}') + return with emulate_http_request(site=site, user=user): _annonate_send_task_for_monitoring(msg) LOG.debug('%s: Sending message = %s', log_prefix, msg_str) diff --git a/openedx/core/djangoapps/schedules/tests/test_tasks.py b/openedx/core/djangoapps/schedules/tests/test_tasks.py index 412a62521733..99f790e35b01 100644 --- a/openedx/core/djangoapps/schedules/tests/test_tasks.py +++ b/openedx/core/djangoapps/schedules/tests/test_tasks.py @@ -9,9 +9,13 @@ import ddt from django.conf import settings +from django.test import TestCase +from edx_ace.recipient import Recipient +from common.djangoapps.student.tests.factories import UserFactory +from openedx.core.djangoapps.schedules.message_types import InstructorLedCourseUpdate from openedx.core.djangoapps.schedules.resolvers import DEFAULT_NUM_BINS -from openedx.core.djangoapps.schedules.tasks import BinnedScheduleMessageBaseTask +from openedx.core.djangoapps.schedules.tasks import BinnedScheduleMessageBaseTask, _schedule_send from openedx.core.djangoapps.schedules.tests.factories import ScheduleConfigFactory from openedx.core.djangoapps.site_configuration.tests.factories import SiteFactory from openedx.core.djangolib.testing.utils import CacheIsolationTestCase, skip_unless_lms @@ -73,3 +77,44 @@ def test_is_enqueue_enabled(self, enabled): self.schedule_config.enqueue_recurring_nudge = enabled self.schedule_config.save() assert self.basetask.is_enqueue_enabled(self.site) == enabled + + +@ddt.ddt +@skip_unless_lms +class TestScheduleSendForDisabledUser(TestCase): + """ + Tests email send for disabled users + """ + + def setUp(self): + super().setUp() + self.user = UserFactory() + self.site = SiteFactory.create() + ScheduleConfigFactory.create( + site=self.site, + enqueue_recurring_nudge=True, deliver_recurring_nudge=True, + enqueue_upgrade_reminder=True, deliver_upgrade_reminder=True, + enqueue_course_update=True, deliver_course_update=True, + ) + + @ddt.data(True, False) + @patch('openedx.core.djangoapps.schedules.tasks.ace.send') + def test_email_not_sent_to_disable_users(self, user_enabled, mock_send): + """ + Tests email not send for disabled users + """ + if user_enabled: + self.user.set_password("12345678") + else: + self.user.set_unusable_password() + self.user.save() + msg = InstructorLedCourseUpdate().personalize( + Recipient( + self.user.id, + self.user.email, + ), + "en", + {}, + ) + _schedule_send(str(msg), self.site.id, "deliver_course_update", "Course Update") + assert mock_send.called is user_enabled