def test_rsvp_view(self):
        # Setup data for RSVP -> StudyGroup + Signup + Meeting in future

        c = Client()
        study_group = StudyGroup.objects.get(pk=1)
        meeting_time = timezone.now() + datetime.timedelta(days=2)
        study_group_meeting = Meeting(study_group=study_group,
                                      meeting_time=meeting_time.time(),
                                      meeting_date=meeting_time.date())
        study_group_meeting.save()

        signup_data = self.APPLICATION_DATA.copy()
        resp = c.post('/en/signup/foo-bob-1/', signup_data)
        self.assertRedirects(resp, '/en/signup/1/success/')
        self.assertEqual(Application.objects.active().count(), 1)

        qs = gen_rsvp_querystring(signup_data['email'], study_group.pk,
                                  study_group_meeting.meeting_datetime(),
                                  'yes')
        url = '/en/rsvp/?{0}'.format(qs)

        # Generate RSVP link
        # visit link
        self.assertEqual(0, Rsvp.objects.count())
        resp = c.get(url)
        self.assertEqual(1, Rsvp.objects.count())
        self.assertTrue(Rsvp.objects.first().attending)

        qs = gen_rsvp_querystring(signup_data['email'], study_group.pk,
                                  study_group_meeting.meeting_datetime(), 'no')
        url = '/en/rsvp/?{0}'.format(qs)
        self.assertEqual(1, Rsvp.objects.count())
        resp = c.get(url)
        self.assertEqual(1, Rsvp.objects.count())
        self.assertFalse(Rsvp.objects.first().attending)

        # Test RSVP with mobile number
        signup_data = self.APPLICATION_DATA.copy()
        signup_data['email'] = '*****@*****.**'
        signup_data['mobile'] = '+12812347890'

        resp = c.post('/en/signup/foo-bob-1/', signup_data)
        self.assertRedirects(resp, '/en/signup/1/success/')
        self.assertEqual(Application.objects.active().count(), 2)

        qs = gen_rsvp_querystring(signup_data['mobile'], study_group.pk,
                                  study_group_meeting.meeting_datetime(),
                                  'yes')
        url = '/en/rsvp/?{0}'.format(qs)

        # Generate RSVP link
        # visit link
        c = Client()
        Rsvp.objects.all().delete()
        self.assertEqual(0, Rsvp.objects.count())
        resp = c.get(url)
        self.assertEqual(1, Rsvp.objects.count())
        self.assertTrue(Rsvp.objects.first().attending)
    def test_receive_sms_rsvp(self):
        signup_data = self.APPLICATION_DATA.copy()
        signup_data['mobile'] = '+12812347890'
        c = Client()
        resp = c.post('/en/signup/foo-bob-1/', signup_data)
        self.assertRedirects(resp, '/en/signup/1/success/')
        self.assertEqual(Application.objects.active().count(), 1)
        mail.outbox = []

        next_meeting = Meeting()
        next_meeting.study_group = StudyGroup.objects.get(
            pk=signup_data['study_group'])
        next_meeting.meeting_time = (timezone.now() +
                                     datetime.timedelta(days=1)).time()
        next_meeting.meeting_date = timezone.now().date() + datetime.timedelta(
            days=1)
        next_meeting.save()

        url = '/en/receive_sms/'
        sms_data = {
            'Body':
            'Sorry, I won\'t make it, have family responsibilities this week :(',
            'From': '+12812347890'
        }
        resp = c.post(url, sms_data)
        self.assertEqual(len(mail.outbox), 1)
        self.assertTrue(mail.outbox[0].subject.find('+12812347890') > 0)
        self.assertTrue(mail.outbox[0].subject.find('Test User') > 0)
        self.assertIn(
            StudyGroup.objects.get(pk=1).facilitator.email, mail.outbox[0].to)
        self.assertIn(
            '{0}/{1}/rsvp/?user=%2B12812347890&study_group=1&meeting_date={2}&attending=yes&sig='
            .format(
                settings.DOMAIN, get_language(),
                urllib.parse.quote(
                    next_meeting.meeting_datetime().isoformat())),
            mail.outbox[0].body)
        self.assertIn(
            '{0}/{1}/rsvp/?user=%2B12812347890&study_group=1&meeting_date={2}&attending=no&sig='
            .format(
                settings.DOMAIN, get_language(),
                urllib.parse.quote(
                    next_meeting.meeting_datetime().isoformat())),
            mail.outbox[0].body)