示例#1
0
    def test_update_request_post_no_email(self):
        """
        Test the update request post view
        with confirmation email switched off in settings.
        """

        subscription = Subscription(newsletter=self.n,
                                    name=self.testname,
                                    email=self.testemail,
                                    subscribed=True)
        subscription.save()

        response = self.client.post(self.update_url,
                                    {'email_field': self.testemail})

        self.assertRedirects(response, subscription.update_activate_url())
        """ Check the subscription email. """
        # no email should be send
        self.assertEqual(len(mail.outbox), 0)
示例#2
0
    def test_unsubscribe_post(self):
        """ Test unsubscription confirmation. """
        subscription = Subscription(user=self.user, newsletter=self.n)
        subscription.subscribed = True
        subscription.unsubscribed = False
        subscription.save()

        response = self.client.post(self.unsubscribe_confirm_url)

        self.assertContains(response, self.n.title, status_code=200)

        self.assertEqual(response.context['newsletter'], self.n)
        self.assertEqual(response.context['user'], self.user)

        subscription = self.get_user_subscription()
        self.assertFalse(subscription.subscribed)
        self.assertTrue(subscription.unsubscribed)
        self.assertLessThan(subscription.unsubscribe_date,
                            timezone.now() + timedelta(seconds=1))
示例#3
0
    def register(self, request, form=None, **cleaned_data):
        user = super(RegistrationView, self).register(request,
                                                      form=form,
                                                      **cleaned_data)
        profile, _ = Profile.objects.get_or_create(
            user=user, defaults={'language': Language.get_python2()})
        if form is not None:
            cleaned_data = form.cleaned_data
        profile.name = cleaned_data['display_name']
        profile.timezone = cleaned_data['timezone']
        profile.language = cleaned_data['language']
        profile.organizations.add(*cleaned_data['organizations'])
        profile.save()

        if newsletter_id is not None and cleaned_data['newsletter']:
            Subscription(user=user,
                         newsletter_id=newsletter_id,
                         subscribed=True).save()
        return user
示例#4
0
    def test_update_request_post(self):
        """ Test the update request post view. """

        subscription = Subscription(newsletter=self.n,
                                    name=self.testname,
                                    email=self.testemail,
                                    subscribed=True)
        subscription.save()

        response = self.client.post(self.update_url,
                                    {'email_field': self.testemail})

        # Assure we are redirected to "update activation email sent" page.
        self.assertRedirects(response, self.update_email_sent_url)
        """ Check the subscription email. """
        self.assertEqual(len(mail.outbox), 1)

        activate_url = subscription.update_activate_url()
        full_activate_url = 'http://%s%s' % (self.site.domain, activate_url)

        self.assertEmailContains(full_activate_url)
示例#5
0
    def test_update_request_activate_form(self):
        """
        Test requesting a form for activating an update without activation
        code in the URL.
        """

        subscription = Subscription(newsletter=self.n,
                                    name=self.testname,
                                    email=self.testemail)
        subscription.save()

        activate_url = reverse('newsletter_update', kwargs={
            'newsletter_slug': self.n.slug,
            'action': 'update',
            'email': subscription.email
        })

        response = self.client.get(activate_url)

        # Make sure the form is there
        self.assertInContext(response, 'form', UpdateForm)
示例#6
0
    def test_subscribe_request_activate(self):
        """ Test subscription activation. """

        subscription = Subscription(newsletter=self.n,
                                    name=self.testname,
                                    email=self.testemail)
        subscription.save()

        time.sleep(WAIT_TIME)

        self.assertFalse(subscription.subscribed)

        activate_url = subscription.subscribe_activate_url()
        self.assertTrue(activate_url)

        response = self.client.get(activate_url)
        self.assertInContext(response, 'form', UpdateForm)
        self.assertContains(response, subscription.activation_code)

        response = self.client.post(
            activate_url, {
                'name_field': 'Test Name',
                'email_field': self.testemail,
                'user_activation_code': subscription.activation_code
            }
        )

        # Assure we are redirected to "subscribe activated" page.
        self.assertRedirects(response, self.subscribe_activated_url)

        subscription = self.get_only_subscription(
            email_field__exact=self.testemail
        )

        self.assertTrue(subscription.subscribed)
        self.assertFalse(subscription.unsubscribed)

        dt = (subscription.subscribe_date - subscription.create_date).seconds
        self.assertBetween(dt, WAIT_TIME, WAIT_TIME + 1)
示例#7
0
    def test_unsubscribe_request_post_error(self):
        """
        Test whether a failing unsubscribe request email generated an error in
        the context.

        We do this by overriding the default mail backend to a settings which
        we know pretty sure is bound to fail.
        """
        subscription = Subscription(newsletter=self.n,
                                    name=self.testname,
                                    email=self.testemail,
                                    subscribed=True)
        subscription.save()

        with override_settings(
                EMAIL_BACKEND='tests.utils.FailingEmailBackend'):
            with self.assertLogs('newsletter.views', 'ERROR') as messages:
                response = self.client.post(self.unsubscribe_url,
                                            {'email_field': self.testemail})
            self.assertEqual(len(messages.output), 1)
            self.assertIn("Connection refused", messages.output[0])

        self.assertTrue(response.context['error'])
    def test_subscription_admin(self):
        """
        Testing subscription admin change list display and actions.
        """
        Subscription.objects.bulk_create([
            Subscription(
                newsletter=self.newsletter,
                name_field='Sara',
                email_field='*****@*****.**',
                subscribed=True,
            ),
            Subscription(
                newsletter=self.newsletter,
                name_field='Bob',
                email_field='*****@*****.**',
                unsubscribed=True,
            ),
            Subscription(
                newsletter=self.newsletter,
                name_field='Khaled',
                email_field='*****@*****.**',
                subscribed=False,
                unsubscribed=False,
            ),
        ])
        changelist_url = reverse('admin:newsletter_subscription_changelist')
        response = self.client.get(changelist_url)
        self.assertContains(
            response,
            '<img src="/static/newsletter/admin/img/icon-no.gif" width="10" height="10" alt="Unsubscribed"/>',
            html=True)
        self.assertContains(
            response,
            '<img src="/static/newsletter/admin/img/icon-yes.gif" width="10" height="10" alt="Subscribed"/>',
            html=True)
        self.assertContains(
            response,
            '<img src="/static/newsletter/admin/img/waiting.gif" width="10" height="10" alt="Unactivated"/>',
            html=True)

        # Test actions
        response = self.client.post(
            changelist_url,
            data={
                'index':
                0,
                'action': ['make_subscribed'],
                '_selected_action':
                [str(Subscription.objects.get(name_field='Khaled').pk)],
            })
        self.assertTrue(
            Subscription.objects.get(name_field='Khaled').subscribed)

        response = self.client.post(
            changelist_url,
            data={
                'index':
                0,
                'action': ['make_unsubscribed'],
                '_selected_action':
                [str(Subscription.objects.get(name_field='Sara').pk)],
            })
        self.assertFalse(
            Subscription.objects.get(name_field='Sara').subscribed)
示例#9
0
    def test_subscribe_unsubscribed(self):
        """
        After having been unsubscribed, a user should be able to subscribe
        again.

        This relates to #5 on GitHub.
        """

        # Create a subscription
        subscription = Subscription(newsletter=self.n,
                                    name=self.testname,
                                    email=self.testemail,
                                    subscribed=True)
        subscription.save()

        # Unsubscribe
        response = self.client.post(
            subscription.unsubscribe_activate_url(),
            {
                'name_field': subscription.name,
                'email_field': subscription.email,
                'user_activation_code': subscription.activation_code
            }
        )

        # Assure we are redirected to "unsubscribe activated" page.
        self.assertRedirects(response, self.unsubscribe_activated_url)

        subscription = self.get_only_subscription(
            email_field__exact=self.testemail
        )

        self.assertFalse(subscription.subscribed)
        self.assertTrue(subscription.unsubscribed)

        # Resubscribe request
        response = self.client.post(
            self.subscribe_url,
            {
                'name_field': subscription.name,
                'email_field': subscription.email,
            }
        )

        # Assure we are redirected to "email sent page"
        self.assertRedirects(response, self.subscribe_email_sent_url)

        # self.assertFalse(subscription.subscribed)
        self.assertTrue(subscription.unsubscribed)

        # Activate subscription
        response = self.client.post(
            subscription.subscribe_activate_url(),
            {
                'name_field': subscription.name,
                'email_field': subscription.email,
                'user_activation_code': subscription.activation_code
            }
        )

        # Assure we are redirected to "subscribe activated" page.
        self.assertRedirects(response, self.subscribe_activated_url)

        subscription = self.get_only_subscription(
            email_field__exact=self.testemail
        )

        self.assertTrue(subscription.subscribed)
        self.assertFalse(subscription.unsubscribed)