diff --git a/openedx/core/djangoapps/schedules/management/commands/__init__.py b/openedx/core/djangoapps/schedules/management/commands/__init__.py index 8c71e049d6..ed7b737386 100644 --- a/openedx/core/djangoapps/schedules/management/commands/__init__.py +++ b/openedx/core/djangoapps/schedules/management/commands/__init__.py @@ -9,6 +9,7 @@ from openedx.core.djangoapps.schedules.utils import PrefixedDebugLoggerMixin class SendEmailBaseCommand(PrefixedDebugLoggerMixin, BaseCommand): async_send_task = None # define in subclass + offsets = () # define in subclass def add_arguments(self, parser): parser.add_argument( @@ -37,9 +38,6 @@ class SendEmailBaseCommand(PrefixedDebugLoggerMixin, BaseCommand): override_recipient_email = options.get('override_recipient_email') self.send_emails(site, current_date, override_recipient_email) - def send_emails(self, *args, **kwargs): - raise NotImplementedError - def enqueue(self, day_offset, site, current_date, override_recipient_email=None): self.async_send_task.enqueue( site, @@ -47,3 +45,7 @@ class SendEmailBaseCommand(PrefixedDebugLoggerMixin, BaseCommand): day_offset, override_recipient_email, ) + + def send_emails(self, *args, **kwargs): + for offset in self.offsets: + self.enqueue(offset, *args, **kwargs) diff --git a/openedx/core/djangoapps/schedules/management/commands/send_course_update.py b/openedx/core/djangoapps/schedules/management/commands/send_course_update.py index fa8e0d230e..87da49ba36 100644 --- a/openedx/core/djangoapps/schedules/management/commands/send_course_update.py +++ b/openedx/core/djangoapps/schedules/management/commands/send_course_update.py @@ -5,7 +5,4 @@ from openedx.core.djangoapps.schedules.tasks import ScheduleCourseUpdate class Command(SendEmailBaseCommand): async_send_task = ScheduleCourseUpdate log_prefix = 'Course Update' - - def send_emails(self, *args, **kwargs): - for day_offset in xrange(-7, -77, -7): - self.enqueue(day_offset, *args, **kwargs) + offsets = xrange(-7, -77, -7) diff --git a/openedx/core/djangoapps/schedules/management/commands/send_recurring_nudge.py b/openedx/core/djangoapps/schedules/management/commands/send_recurring_nudge.py index 373039f9db..c1c9cf521d 100644 --- a/openedx/core/djangoapps/schedules/management/commands/send_recurring_nudge.py +++ b/openedx/core/djangoapps/schedules/management/commands/send_recurring_nudge.py @@ -5,7 +5,4 @@ from openedx.core.djangoapps.schedules.tasks import ScheduleRecurringNudge class Command(SendEmailBaseCommand): async_send_task = ScheduleRecurringNudge log_prefix = 'Scheduled Nudge' - - def send_emails(self, *args, **kwargs): - for day_offset in (-3, -10): - self.enqueue(day_offset, *args, **kwargs) + offsets = (-3, -10) diff --git a/openedx/core/djangoapps/schedules/management/commands/send_upgrade_reminder.py b/openedx/core/djangoapps/schedules/management/commands/send_upgrade_reminder.py index 6e717d3b9e..d8d0a6156d 100644 --- a/openedx/core/djangoapps/schedules/management/commands/send_upgrade_reminder.py +++ b/openedx/core/djangoapps/schedules/management/commands/send_upgrade_reminder.py @@ -5,6 +5,4 @@ from openedx.core.djangoapps.schedules.tasks import ScheduleUpgradeReminder class Command(SendEmailBaseCommand): async_send_task = ScheduleUpgradeReminder log_prefix = 'Upgrade Reminder' - - def send_emails(self, *args, **kwargs): - self.enqueue(2, *args, **kwargs) + offsets = (2,) diff --git a/openedx/core/djangoapps/schedules/management/commands/tests/test_base.py b/openedx/core/djangoapps/schedules/management/commands/tests/test_base.py index 3a53dbbd8a..ff60ed1fd5 100644 --- a/openedx/core/djangoapps/schedules/management/commands/tests/test_base.py +++ b/openedx/core/djangoapps/schedules/management/commands/tests/test_base.py @@ -4,7 +4,7 @@ from unittest import skipUnless import ddt import pytz from django.conf import settings -from mock import patch +from mock import patch, DEFAULT, Mock from openedx.core.djangoapps.schedules.management.commands import SendEmailBaseCommand from openedx.core.djangoapps.site_configuration.tests.factories import SiteFactory, SiteConfigurationFactory @@ -29,3 +29,18 @@ class TestSendEmailBaseCommand(CacheIsolationTestCase): datetime.datetime(2017, 9, 29, tzinfo=pytz.UTC), None ) + + def test_send_emails(self): + with patch.multiple( + self.command, + offsets=(1, 3, 5), + enqueue=DEFAULT, + ): + arg = Mock(name='arg') + kwarg = Mock(name='kwarg') + self.command.send_emails(arg, kwarg=kwarg) + self.assertFalse(arg.called) + self.assertFalse(kwarg.called) + + for offset in self.command.offsets: + self.command.enqueue.assert_any_call(offset, arg, kwarg=kwarg)