Skip to content

Commit ee8eeae

Browse files
feat: prevent sending course update, recurring nudge and upgrade reminder email to disabled users (openedx#36514)
1 parent b14ff9e commit ee8eeae

2 files changed

Lines changed: 49 additions & 1 deletion

File tree

openedx/core/djangoapps/schedules/tasks.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,9 @@ def _schedule_send(msg_str, site_id, delivery_config_var, log_prefix): # lint-a
276276
msg = Message.from_string(msg_str)
277277

278278
user = User.objects.get(id=msg.recipient.lms_user_id)
279+
if not user.has_usable_password():
280+
LOG.info(f'{delivery_config_var} Scheduled email User is disabled {user.username}')
281+
return
279282
with emulate_http_request(site=site, user=user):
280283
_annonate_send_task_for_monitoring(msg)
281284
LOG.debug('%s: Sending message = %s', log_prefix, msg_str)

openedx/core/djangoapps/schedules/tests/test_tasks.py

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,13 @@
99

1010
import ddt
1111
from django.conf import settings
12+
from django.test import TestCase
13+
from edx_ace.recipient import Recipient
1214

15+
from common.djangoapps.student.tests.factories import UserFactory
16+
from openedx.core.djangoapps.schedules.message_types import InstructorLedCourseUpdate
1317
from openedx.core.djangoapps.schedules.resolvers import DEFAULT_NUM_BINS
14-
from openedx.core.djangoapps.schedules.tasks import BinnedScheduleMessageBaseTask
18+
from openedx.core.djangoapps.schedules.tasks import BinnedScheduleMessageBaseTask, _schedule_send
1519
from openedx.core.djangoapps.schedules.tests.factories import ScheduleConfigFactory
1620
from openedx.core.djangoapps.site_configuration.tests.factories import SiteFactory
1721
from openedx.core.djangolib.testing.utils import CacheIsolationTestCase, skip_unless_lms
@@ -73,3 +77,44 @@ def test_is_enqueue_enabled(self, enabled):
7377
self.schedule_config.enqueue_recurring_nudge = enabled
7478
self.schedule_config.save()
7579
assert self.basetask.is_enqueue_enabled(self.site) == enabled
80+
81+
82+
@ddt.ddt
83+
@skip_unless_lms
84+
class TestScheduleSendForDisabledUser(TestCase):
85+
"""
86+
Tests email send for disabled users
87+
"""
88+
89+
def setUp(self):
90+
super().setUp()
91+
self.user = UserFactory()
92+
self.site = SiteFactory.create()
93+
ScheduleConfigFactory.create(
94+
site=self.site,
95+
enqueue_recurring_nudge=True, deliver_recurring_nudge=True,
96+
enqueue_upgrade_reminder=True, deliver_upgrade_reminder=True,
97+
enqueue_course_update=True, deliver_course_update=True,
98+
)
99+
100+
@ddt.data(True, False)
101+
@patch('openedx.core.djangoapps.schedules.tasks.ace.send')
102+
def test_email_not_sent_to_disable_users(self, user_enabled, mock_send):
103+
"""
104+
Tests email not send for disabled users
105+
"""
106+
if user_enabled:
107+
self.user.set_password("12345678")
108+
else:
109+
self.user.set_unusable_password()
110+
self.user.save()
111+
msg = InstructorLedCourseUpdate().personalize(
112+
Recipient(
113+
self.user.id,
114+
self.user.email,
115+
),
116+
"en",
117+
{},
118+
)
119+
_schedule_send(str(msg), self.site.id, "deliver_course_update", "Course Update")
120+
assert mock_send.called is user_enabled

0 commit comments

Comments
 (0)