feat: prevent sending course update, recurring nudge and upgrade reminder email to disabled users (#36514)

This commit is contained in:
Muhammad Adeel Tajamul
2025-04-14 18:11:01 +05:00
committed by GitHub
parent b14ff9ea8d
commit ee8eeae55c
2 changed files with 49 additions and 1 deletions

View File

@@ -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)

View File

@@ -9,9 +9,13 @@ from unittest.mock import DEFAULT, Mock, patch
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 @@ class TestBinnedScheduleMessageBaseTask(CacheIsolationTestCase): # lint-amnesty
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