Exemplo n.º 1
0
    def test_generate_reminder_with_long_name_and_location(self):
        # Make sure we generate a reminder less than 4 days before
        now = timezone.now()
        sg = StudyGroup.objects.get(pk=1)
        sg.timezone = now.strftime("%Z")
        sg.venue_name = 'This is a very long venue name to test for sms reminders that are longer than a 160 caracters long'
        sg.venue_details = 'This is an even longer venue detail field. I am almost 100% certain this will be cut off. What do you think'
        sg.start_date = now.date() + datetime.timedelta(days=3)
        sg.meeting_time = now.time()
        sg.end_date = now.date() + datetime.timedelta(weeks=5, days=3)
        sg.save()
        sg = StudyGroup.objects.get(pk=1)
        generate_all_meetings(sg)
        self.assertEqual(sg.meeting_set.active().count(), 6)
        self.assertTrue(sg.next_meeting().meeting_datetime() -
                        now < datetime.timedelta(days=4))
        generate_reminder(sg)
        self.assertEqual(Reminder.objects.all().count(), 1)
        reminder = Reminder.objects.all()[0]
        #TODO check that email was sent to site admin
        #TODO test with unicode in generated email subject

        # Make sure we do it only once
        generate_reminder(sg)
        self.assertEqual(Reminder.objects.all().count(), 1)
Exemplo n.º 2
0
 def test_send_reminder_email(self, send_message):
     now = timezone.now()
     sg = StudyGroup.objects.get(pk=1)
     sg.timezone = now.strftime("%Z")
     sg.start_date = now - datetime.timedelta(days=5)
     sg.meeting_time = sg.start_date.time()
     sg.end_date = sg.start_date + datetime.timedelta(weeks=5)
     sg.save()
     sg = StudyGroup.objects.get(pk=1)
     data = self.APPLICATION_DATA
     data['study_group'] = sg
     application = Application(**data)
     accept_application(application)
     application.save()
     generate_all_meetings(sg)
     generate_reminder(sg)
     self.assertEqual(Reminder.objects.all().count(), 1)
     reminder = Reminder.objects.all()[0]
     self.assertEqual(len(mail.outbox), 1)
     send_reminder(reminder)
     self.assertEqual(len(mail.outbox), 2)
     self.assertEqual(mail.outbox[1].to[0], data['email'])
     self.assertFalse(send_message.called)
     self.assertIn('https://example.net/{0}/rsvp/?user=test%40mail.com&study_group=1&meeting_date={1}&attending=yes&sig='.format(get_language(), urllib.quote(sg.next_meeting().meeting_datetime().isoformat())), mail.outbox[1].body)
     self.assertIn('https://example.net/{0}/rsvp/?user=test%40mail.com&study_group=1&meeting_date={1}&attending=no&sig='.format(get_language(), urllib.quote(sg.next_meeting().meeting_datetime().isoformat())), mail.outbox[1].body)
     self.assertIn('https://example.net/{0}/optout/confirm/?user='.format(get_language()), mail.outbox[1].body)
Exemplo n.º 3
0
 def test_dont_generate_reminder_4days_before(self):
     # Make sure we don't generate a reminder more than 3 days before
     now = timezone.now()
     self.assertEqual(Reminder.objects.all().count(), 0)
     sg = StudyGroup.objects.all()[0]
     sg.start_date = now - datetime.timedelta(days=3)
     sg.end_date = sg.start_date + datetime.timedelta(weeks=5)
     sg.save()
     generate_all_meetings(sg)
     generate_reminder(sg)
     self.assertEqual(Reminder.objects.all().count(), 0)
Exemplo n.º 4
0
    def test_no_reminders_for_future_studygroups(self):
        now = timezone.now()
        self.assertEqual(Reminder.objects.all().count(), 0)

        # Make sure we don't generate a reminder for future study groups
        sg = StudyGroup.objects.all()[0]
        sg.start_date = now + datetime.timedelta(days=2, weeks=1)
        sg.end_date = sg.start_date + datetime.timedelta(weeks=5)
        sg.save()
        generate_all_meetings(sg)
        generate_reminder(sg)
        self.assertEqual(Reminder.objects.all().count(), 0)
Exemplo n.º 5
0
    def test_dont_send_automatic_reminder_for_old_message(self, send_message):
        now = timezone.now()
        sg = StudyGroup.objects.get(pk=1)
        sg.timezone = now.strftime("%Z")
        sg.start_date = datetime.date(2010, 3, 10)
        sg.meeting_time = datetime.time(18, 0)
        sg.end_date = sg.start_date + datetime.timedelta(weeks=5)
        sg.save()
        sg = StudyGroup.objects.get(pk=1)
        generate_all_meetings(sg)

        data = self.APPLICATION_DATA
        data['study_group'] = sg
        application = Application(**data)
        application.save()
        accept_application(application)

        mail.outbox = []
        with freeze_time("2010-03-06 18:55:34"):
            generate_reminder(sg)

        self.assertEqual(len(mail.outbox), 1)
        self.assertEqual(Reminder.objects.all().count(), 1)

        mail.outbox = []
        with freeze_time("2010-03-08 18:55:34"):
            tasks.send_reminders()
        self.assertEqual(len(mail.outbox), 2)
        self.assertEqual(mail.outbox[0].to[0], data['email'])
        self.assertEqual(mail.outbox[1].to[0], '*****@*****.**')
        self.assertFalse(send_message.called)
        self.assertEqual(
            Reminder.objects.filter(sent_at__isnull=True).count(), 0)

        mail.outbox = []
        with freeze_time("2010-03-13 18:55:34"):
            generate_reminder(sg)
        self.assertEqual(len(mail.outbox), 1)
        self.assertEqual(Reminder.objects.all().count(), 2)
        self.assertEqual(
            Reminder.objects.filter(sent_at__isnull=True).count(), 1)

        reminder = Reminder.objects.filter(sent_at__isnull=True).first()
        self.assertEqual(reminder.study_group_meeting.meeting_date,
                         datetime.date(2010, 3, 17))

        mail.outbox = []
        with freeze_time("2010-03-18 18:55:34"):
            tasks.send_reminders()
        self.assertEqual(len(mail.outbox), 0)
        self.assertEqual(
            Reminder.objects.filter(sent_at__isnull=True).count(), 1)
Exemplo n.º 6
0
 def test_dont_generate_reminder_4days_before(self):
     # Make sure we don't generate a reminder more than 4 days before
     now = timezone.now()
     self.assertEqual(Reminder.objects.all().count(), 0)
     sg = StudyGroup.objects.get(pk=1)
     sg.timezone = now.strftime("%Z")
     sg.start_date = now + datetime.timedelta(days=4, hours=1)
     sg.meeting_time = sg.start_date.time()
     sg.end_date = sg.start_date + datetime.timedelta(weeks=5)
     sg.save()
     sg = StudyGroup.objects.get(pk=1)
     generate_all_meetings(sg)
     generate_reminder(sg)
     self.assertEqual(Reminder.objects.all().count(), 0)
Exemplo n.º 7
0
    def test_no_reminders_for_future_studygroups(self):
        now = timezone.now()
        self.assertEqual(Reminder.objects.all().count(), 0)

        # Make sure we don't generate a reminder for future study groups
        sg = StudyGroup.objects.get(pk=1)
        sg.timezone = now.strftime("%Z")
        sg.start_date = now + datetime.timedelta(days=2, weeks=1)
        sg.meeting_time = sg.start_date.time()
        sg.end_date = sg.start_date + datetime.timedelta(weeks=5)
        sg.save()
        sg = StudyGroup.objects.get(pk=1)
        generate_all_meetings(sg)
        generate_reminder(sg)
        self.assertEqual(Reminder.objects.all().count(), 0)
Exemplo n.º 8
0
    def test_generate_reminder_3days_before(self):
        # Make sure we generate a reminder less than three days before
        now = timezone.now()
        sg = StudyGroup.objects.all()[0]
        sg.start_date = now - datetime.timedelta(days=5)
        sg.end_date = sg.start_date + datetime.timedelta(weeks=5)
        sg.save()
        generate_all_meetings(sg)
        generate_reminder(sg)
        self.assertEqual(Reminder.objects.all().count(), 1)
        reminder = Reminder.objects.all()[0]
        self.assertEqual(reminder.study_group_meeting.meeting_time, next_meeting_date(sg))
        #TODO check that email was sent to site admin
        #TODO test with unicode in generated email subject

        # Make sure we do it only once
        generate_reminder(sg)
        self.assertEqual(Reminder.objects.all().count(), 1)
Exemplo n.º 9
0
 def test_send_learner_reminder_ics(self, send_message):
     now = timezone.now()
     sg = StudyGroup.objects.get(pk=1)
     sg.timezone = now.strftime("%Z")
     sg.start_date = now - datetime.timedelta(days=5)
     sg.meeting_time = sg.start_date.time()
     sg.end_date = sg.start_date + datetime.timedelta(weeks=5)
     sg.attach_ics = True
     sg.save()
     sg = StudyGroup.objects.get(pk=1)
     data = self.APPLICATION_DATA
     data['study_group'] = sg
     application = Application(**data)
     accept_application(application)
     application.save()
     mail.outbox = []
     generate_all_meetings(sg)
     generate_reminder(sg)
     self.assertEqual(Reminder.objects.all().count(), 1)
     reminder = Reminder.objects.all()[0]
     self.assertEqual(len(mail.outbox), 1)
     send_reminder(reminder)
     self.assertEqual(len(mail.outbox),
                      3)  # should be sent to facilitator & application
     self.assertEqual(mail.outbox[1].to[0], data['email'])
     self.assertFalse(send_message.called)
     self.assertIn(
         'https://example.net/{0}/rsvp/?user=test%40mail.com&study_group=1&meeting_date={1}&attending=yes&sig='
         .format(
             get_language(),
             urllib.parse.quote(
                 sg.next_meeting().meeting_datetime().isoformat())),
         mail.outbox[1].alternatives[0][0])
     self.assertIn(
         'https://example.net/{0}/rsvp/?user=test%40mail.com&study_group=1&meeting_date={1}&attending=no&sig='
         .format(
             get_language(),
             urllib.parse.quote(
                 sg.next_meeting().meeting_datetime().isoformat())),
         mail.outbox[1].alternatives[0][0])
     self.assertIn(
         'https://example.net/{0}/optout/confirm/?user='******'VEVENT', mail.outbox[1].attachments[0].get_payload())
Exemplo n.º 10
0
 def test_send_reminder_sms(self, send_message):
     now = timezone.now()
     sg = StudyGroup.objects.all()[0]
     sg.start_date = now - datetime.timedelta(days=5)
     sg.end_date = sg.start_date + datetime.timedelta(weeks=5)
     sg.save()
     data = self.APPLICATION_DATA
     data['study_group'] = sg
     data['contact_method'] = Application.TEXT
     application = Application(**data)
     application.save()
     generate_all_meetings(sg)
     generate_reminder(sg)
     self.assertEqual(Reminder.objects.all().count(), 1)
     reminder = Reminder.objects.all()[0]
     send_reminder(reminder)
     self.assertEqual(len(mail.outbox), 1)
     #self.assertEqual(mail.outbox[0].subject, mail_data['email_subject'])
     self.assertFalse(send_message.called)
Exemplo n.º 11
0
 def test_send_reminder_sms(self, send_message):
     now = timezone.now()
     sg = StudyGroup.objects.get(pk=1)
     sg.timezone = now.strftime("%Z")
     sg.start_date = now - datetime.timedelta(days=5)
     sg.meeting_time = sg.start_date.time()
     sg.end_date = sg.start_date + datetime.timedelta(weeks=5)
     sg.save()
     sg = StudyGroup.objects.get(pk=1)
     data = self.APPLICATION_DATA
     data['study_group'] = sg
     application = Application(**data)
     application.save()
     generate_all_meetings(sg)
     generate_reminder(sg)
     self.assertEqual(Reminder.objects.all().count(), 1)
     reminder = Reminder.objects.all()[0]
     send_reminder(reminder)
     self.assertEqual(len(mail.outbox), 1)
     #self.assertEqual(mail.outbox[0].subject, mail_data['email_subject'])
     self.assertFalse(send_message.called)
Exemplo n.º 12
0
    def test_generate_reminder_4days_before(self):
        # Make sure we generate a reminder less than 4 days before
        now = timezone.now()
        sg = StudyGroup.objects.get(pk=1)
        sg.timezone = now.strftime("%Z")
        sg.start_date = now.date() + datetime.timedelta(days=3)
        sg.meeting_time = now.time()
        sg.end_date = now.date() + datetime.timedelta(weeks=5, days=3)
        sg.save()
        sg = StudyGroup.objects.get(pk=1)
        generate_all_meetings(sg)
        self.assertEqual(sg.studygroupmeeting_set.active().count(), 6)
        self.assertTrue(sg.next_meeting().meeting_datetime() - now < datetime.timedelta(days=4))
        generate_reminder(sg)
        self.assertEqual(Reminder.objects.all().count(), 1)
        reminder = Reminder.objects.all()[0]
        #TODO check that email was sent to site admin
        #TODO test with unicode in generated email subject

        # Make sure we do it only once
        generate_reminder(sg)
        self.assertEqual(Reminder.objects.all().count(), 1)
Exemplo n.º 13
0
 def test_send_reminder_email(self, send_message):
     now = timezone.now()
     sg = StudyGroup.objects.all()[0]
     sg.start_date = now - datetime.timedelta(days=5)
     sg.end_date = sg.start_date + datetime.timedelta(weeks=5)
     sg.save()
     data = self.APPLICATION_DATA
     data['study_group'] = sg
     application = Application(**data)
     accept_application(application)
     application.save()
     generate_all_meetings(sg)
     generate_reminder(sg)
     self.assertEqual(Reminder.objects.all().count(), 1)
     reminder = Reminder.objects.all()[0]
     self.assertEqual(len(mail.outbox), 1)
     send_reminder(reminder)
     self.assertEqual(len(mail.outbox), 2)
     self.assertEqual(mail.outbox[1].to[0], data['email'])
     self.assertFalse(send_message.called)
     self.assertIn('https://chicago.p2pu.org/{0}/rsvp/?user=test%40mail.com&study_group=1&meeting_date={1}&attending=yes&sig='.format(get_language(), urllib.quote(sg.next_meeting().meeting_time.isoformat())), mail.outbox[1].body)
     self.assertIn('https://chicago.p2pu.org/{0}/rsvp/?user=test%40mail.com&study_group=1&meeting_date={1}&attending=no&sig='.format(get_language(), urllib.quote(sg.next_meeting().meeting_time.isoformat())), mail.outbox[1].body)
Exemplo n.º 14
0
 def test_facilitator_reminder_email_links(self, send_message):
     now = timezone.now()
     sg = StudyGroup.objects.get(pk=1)
     sg.timezone = now.strftime("%Z")
     sg.start_date = now - datetime.timedelta(days=5)
     sg.meeting_time = sg.start_date.time()
     sg.end_date = sg.start_date + datetime.timedelta(weeks=5)
     sg.save()
     sg = StudyGroup.objects.get(pk=1)
     data = self.APPLICATION_DATA
     data['study_group'] = sg
     application = Application(**data)
     accept_application(application)
     application.save()
     mail.outbox = []
     generate_all_meetings(sg)
     generate_reminder(sg)
     self.assertEqual(Reminder.objects.all().count(), 1)
     reminder = Reminder.objects.all()[0]
     self.assertEqual(len(mail.outbox), 1)
     mail.outbox = []
     send_reminder(reminder)
     self.assertEqual(len(mail.outbox),
                      2)  # should be sent to facilitator & application
     self.assertEqual(mail.outbox[0].to[0], data['email'])
     self.assertEqual(mail.outbox[1].to[0], sg.facilitator.email)
     self.assertFalse(send_message.called)
     self.assertNotIn(
         'https://example.net/{0}/rsvp/'.format(get_language()),
         mail.outbox[1].body)
     self.assertIn(
         'https://example.net/{0}/facilitator/'.format(get_language()),
         mail.outbox[1].body)
     self.assertNotIn(
         'https://example.net/{0}/optout/confirm/?user='.format(
             get_language()), mail.outbox[1].body)
Exemplo n.º 15
0
def gen_reminders():
    for study_group in StudyGroup.objects.all():
        translation.activate(settings.LANGUAGE_CODE)
        generate_reminder(study_group)
Exemplo n.º 16
0
def gen_reminders():
    for study_group in StudyGroup.objects.active():
        translation.activate(settings.LANGUAGE_CODE)
        generate_reminder(study_group)