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)
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)
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)
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)
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)
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)
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)
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)
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())
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)
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)
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)
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)
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)
def gen_reminders(): for study_group in StudyGroup.objects.all(): translation.activate(settings.LANGUAGE_CODE) generate_reminder(study_group)
def gen_reminders(): for study_group in StudyGroup.objects.active(): translation.activate(settings.LANGUAGE_CODE) generate_reminder(study_group)