diff options
-rw-r--r-- | askbot/conf/email.py | 12 | ||||
-rw-r--r-- | askbot/management/commands/send_unanswered_question_reminders.py | 15 | ||||
-rw-r--r-- | askbot/tests/email_alert_tests.py | 61 |
3 files changed, 73 insertions, 15 deletions
diff --git a/askbot/conf/email.py b/askbot/conf/email.py index 953aac3d..5ef6b866 100644 --- a/askbot/conf/email.py +++ b/askbot/conf/email.py @@ -93,6 +93,18 @@ settings.register( ) settings.register( + livesettings.IntegerValue( + EMAIL, + 'MAX_UNANSWERED_REMINDERS', + default = 5, + description = _( + 'Max. number of reminders to send ' + 'about unanswered questions' + ) + ) +) + +settings.register( livesettings.BooleanValue( EMAIL, 'EMAIL_VALIDATION', diff --git a/askbot/management/commands/send_unanswered_question_reminders.py b/askbot/management/commands/send_unanswered_question_reminders.py index da071dcf..936917e0 100644 --- a/askbot/management/commands/send_unanswered_question_reminders.py +++ b/askbot/management/commands/send_unanswered_question_reminders.py @@ -20,14 +20,22 @@ class Command(NoArgsCommand): wait_period = datetime.timedelta( askbot_settings.DAYS_BEFORE_SENDING_UNANSWERED_REMINDER ) - cutoff_date = datetime.datetime.now() - wait_period + start_cutoff_date = datetime.datetime.now() - wait_period + + recurrence_delay = datetime.timedelta( + askbot_settings.UNANSWERED_REMINDER_FREQUENCY + ) + max_emails = askbot_settings.MAX_UNANSWERED_REMINDERS + end_cutoff_date = start_cutoff_date - (max_emails - 1)*recurrence_delay questions = models.Question.objects.exclude( closed = True ).exclude( deleted = True ).filter( - added_at__lt = cutoff_date + added_at__lt = start_cutoff_date + ).exclude( + added_at__lt = end_cutoff_date ).filter( answer_count = 0 ).order_by('-added_at') @@ -50,9 +58,6 @@ class Command(NoArgsCommand): activity_type = activity_type ) now = datetime.datetime.now() - recurrence_delay = datetime.timedelta( - askbot_settings.UNANSWERED_REMINDER_FREQUENCY - ) if now < activity.active_at + recurrence_delay: continue except models.Activity.DoesNotExist: diff --git a/askbot/tests/email_alert_tests.py b/askbot/tests/email_alert_tests.py index 902677e7..069ad264 100644 --- a/askbot/tests/email_alert_tests.py +++ b/askbot/tests/email_alert_tests.py @@ -811,17 +811,58 @@ class UnansweredReminderTests(utils.AskbotTestCase): def setUp(self): self.u1 = self.create_user(username = 'user1') self.u2 = self.create_user(username = 'user2') - - def test_reminder_simple(self): - """a positive test - user must receive a reminder - """ askbot_settings.update('ENABLE_UNANSWERED_REMINDERS', True) - days_ago = 5*askbot_settings.DAYS_BEFORE_SENDING_UNANSWERED_REMINDER - long_ago = datetime.datetime.now() - datetime.timedelta(days_ago) + askbot_settings.update('MAX_UNANSWERED_REMINDERS', 5) + askbot_settings.update('UNANSWERED_REMINDER_FREQUENCY', 1) + askbot_settings.update('DAYS_BEFORE_SENDING_UNANSWERED_REMINDER', 2) + + self.wait_days = askbot_settings.DAYS_BEFORE_SENDING_UNANSWERED_REMINDER + self.recurrence_days = askbot_settings.UNANSWERED_REMINDER_FREQUENCY + self.max_emails = askbot_settings.MAX_UNANSWERED_REMINDERS + + + def assert_have_emails(self, email_count = None): + management.call_command('send_unanswered_question_reminders') + outbox = django.core.mail.outbox + self.assertEqual(len(outbox), email_count) + + def do_post(self, timestamp): self.post_question( user = self.u1, - timestamp = long_ago + timestamp = timestamp ) - management.call_command('send_unanswered_question_reminders') - outbox = django.core.mail.outbox - self.assertEqual(len(outbox), 1) + + def test_reminder_positive_wait(self): + """a positive test - user must receive a reminder + """ + days_ago = self.wait_days + timestamp = datetime.datetime.now() - datetime.timedelta(days_ago, 3600) + self.do_post(timestamp) + self.assert_have_emails(1) + + def test_reminder_negative_wait(self): + """a positive test - user must receive a reminder + """ + days_ago = self.wait_days - 1 + timestamp = datetime.datetime.now() - datetime.timedelta(days_ago, 3600) + self.do_post(timestamp) + self.assert_have_emails(0) + + def test_reminder_cutoff_positive(self): + """send a reminder a slightly before the last reminder + date passes""" + days_ago = self.wait_days + (self.max_emails - 1)*self.recurrence_days - 1 + timestamp = datetime.datetime.now() - datetime.timedelta(days_ago, 3600) + self.do_post(timestamp) + self.assert_have_emails(1) + + + def test_reminder_cutoff_negative(self): + """no reminder after the time for the last reminder passes + """ + days_ago = self.wait_days + (self.max_emails - 1)*self.recurrence_days + timestamp = datetime.datetime.now() - datetime.timedelta(days_ago, 3600) + self.do_post(timestamp) + self.assert_have_emails(0) + + |