Exemplo n.º 1
0
    def test_send_custom_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()
        mail.outbox = []
        generate_all_meetings(sg)

        reminder = Reminder(
            study_group=sg,
            email_subject='Custom reminder',
            email_body='Test for extra reminders sent by facilitators',
            sms_body='Nothing to say here')
        reminder.save()
        self.assertEqual(Reminder.objects.all().count(), 1)
        reminder = Reminder.objects.all()[0]
        self.assertEqual(len(mail.outbox), 0)
        send_reminder(reminder)
        self.assertEqual(len(mail.outbox), 1)
        self.assertEqual(len(mail.outbox[0].bcc), 2)
        self.assertEqual(mail.outbox[0].bcc[0], data['email'])
        self.assertFalse(send_message.called)
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 message_send(request, study_group_id):
    # TODO - this piggy backs of Reminder, won't work of Reminder is coupled to Meeting
    study_group = get_object_or_404(StudyGroup, pk=study_group_id)
    form_class =  modelform_factory(Reminder, exclude=['study_group_meeting', 'created_at', 'sent_at', 'sms_body'], widgets={'study_group': HiddenInput})

    needs_mobile = study_group.application_set.active().exclude(mobile='').count() > 0
    if needs_mobile:
        form_class = modelform_factory(Reminder, exclude=['study_group_meeting', 'created_at', 'sent_at'], widgets={'study_group': HiddenInput})

    if request.method == 'POST':
        form = form_class(request.POST)
        if form.is_valid():
            reminder = form.save()
            send_reminder(reminder)
            messages.success(request, 'Email successfully sent')
            url = reverse('studygroups_facilitator')
            return http.HttpResponseRedirect(url)
    else:
        form = form_class(initial={'study_group': study_group})

    context = {
        'study_group': study_group,
        'course': study_group.course,
        'form': form
    }
    return render(request, 'studygroups/email.html', context)
Exemplo n.º 4
0
def send_reminders():
    now = timezone.now()
    translation.activate(settings.LANGUAGE_CODE)
    # TODO - should this be set here or closer to where the language matters?
    # TODO - make sure both the StudyGroup and StudyGroupMeeting is still available
    for reminder in Reminder.objects.filter(sent_at__isnull=True, study_group__in=StudyGroup.objects.active(), study_group_meeting__in=StudyGroupMeeting.objects.active()):
        if reminder.study_group_meeting and reminder.study_group_meeting.meeting_datetime() - now < datetime.timedelta(days=2):
            send_reminder(reminder)
Exemplo n.º 5
0
def send_reminders():
    """ Send meeting reminders """
    now = timezone.now()
    translation.activate(settings.LANGUAGE_CODE)
    # TODO - should this be set here or closer to where the language matters?
    # make sure both the StudyGroup and Meeting is still available
    reminders = Reminder.objects.filter(
        sent_at__isnull=True,
        study_group__in=StudyGroup.objects.published(),
        study_group_meeting__in=Meeting.objects.active())
    for reminder in reminders:
        # don't send reminders older than the meeting
        meeting_datetime = reminder.study_group_meeting.meeting_datetime()
        if reminder.study_group_meeting and meeting_datetime - now < datetime.timedelta(
                days=2) and meeting_datetime > now:
            send_reminder(reminder)
Exemplo n.º 6
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.º 7
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.º 8
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.º 9
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.º 10
0
def message_send(request, study_group_id):
    # TODO - this piggy backs of Reminder, won't work of Reminder is coupled to StudyGroupMeeting
    study_group = get_object_or_404(StudyGroup, pk=study_group_id)
    if request.method == 'POST':
        form = MessageForm(request.POST)
        if form.is_valid():
            reminder = form.save()
            send_reminder(reminder)
            messages.success(request, 'Email successfully sent')
            url = reverse('studygroups_facilitator')
            return http.HttpResponseRedirect(url)
    else:
        form = MessageForm(initial={'study_group': study_group})

    context = {
        'study_group': study_group,
        'course': study_group.course,
        'form': form
    }
    return render_to_response('studygroups/email.html',
                              context,
                              context_instance=RequestContext(request))
Exemplo n.º 11
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.º 12
0
def send_reminders():
    now = timezone.now()
    for reminder in Reminder.objects.filter(sent_at__isnull=True):
        if reminder.meeting_time - now < datetime.timedelta(days=2):
            send_reminder(reminder)