summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrei <mamoutkine@gmail.com>2011-05-03 19:13:06 -0400
committerAndrei <mamoutkine@gmail.com>2011-05-03 19:13:06 -0400
commit109f39bdfd7c1f6bbf07f9f39707a51ca4669ebd (patch)
treeb356dcf6764be87f0a4271b2b010aa4d58bb62a1
parent78ffb807c228f99e9010d46773708575a4fbcb31 (diff)
downloadaskbot-109f39bdfd7c1f6bbf07f9f39707a51ca4669ebd.tar.gz
askbot-109f39bdfd7c1f6bbf07f9f39707a51ca4669ebd.tar.bz2
askbot-109f39bdfd7c1f6bbf07f9f39707a51ca4669ebd.zip
added maximum count of emails to send about unanswered questions
-rw-r--r--askbot/conf/email.py12
-rw-r--r--askbot/management/commands/send_unanswered_question_reminders.py15
-rw-r--r--askbot/tests/email_alert_tests.py61
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)
+
+