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)
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))
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
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)
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)
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)
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)
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)