def test_admin_import_subscribers_no_addresses(self): """ Cannot confirm subscribers import if 'addresses' misses in session. """ import_url = reverse('admin:newsletter_subscription_import') import_confirm_url = reverse( 'admin:newsletter_subscription_import_confirm') response = self.client.post(import_confirm_url, {'confirm': True}) self.assertRedirects(response, import_url)
def test_message_admin(self): """ Testing message admin change list display and message previews. """ changelist_url = reverse('admin:newsletter_message_changelist') response = self.client.get(changelist_url) self.assertContains( response, '<a href="/admin/newsletter/message/%d/preview/">Preview</a>' % self.message.pk, html=True) # Previews preview_url = reverse('admin:newsletter_message_preview', args=[self.message.pk]) preview_text_url = reverse('admin:newsletter_message_preview_text', args=[self.message.pk]) preview_html_url = reverse('admin:newsletter_message_preview_html', args=[self.message.pk]) response = self.client.get(preview_url) self.assertContains( response, '<iframe src ="%s" width="960px" height="720px"></iframe>' % preview_html_url, html=True) self.assertContains( response, '<iframe src ="%s" width="960px" height="720px"></iframe>' % preview_text_url, html=True) response = self.client.get(preview_text_url) self.assertEqual( response.content, b'''++++++++++++++++++++ Test Newsletter: Test message ++++++++++++++++++++ ++++++++++++++++++++ Unsubscribe: http://example.com/newsletter/test-newsletter/unsubscribe/ ''') response = self.client.get(preview_html_url) self.assertContains(response, '<h1>Test Newsletter</h1>') self.assertContains(response, '<h2>Test message</h2>') self.assertContains(response, self.newsletter.unsubscribe_url()) # HTML preview returns 404 if send_html is False self.newsletter.send_html = False self.newsletter.save() response = self.client.get(preview_html_url) self.assertEqual(response.status_code, 404)
def test_detail(self): for n in self.newsletters: detail_url = reverse('newsletter_detail', kwargs={'newsletter_slug': n.slug}) subscribe_url = reverse('newsletter_subscribe_request', kwargs={'newsletter_slug': n.slug}) unsubscribe_url = reverse('newsletter_unsubscribe_request', kwargs={'newsletter_slug': n.slug}) update_url = reverse('newsletter_update_request', kwargs={'newsletter_slug': n.slug}) archive_url = reverse('newsletter_archive', kwargs={'newsletter_slug': n.slug}) # Check returned URL's exist and equal result of lookup methods self.assertTrue(subscribe_url) self.assertEqual(subscribe_url, n.subscribe_url()) self.assertTrue(unsubscribe_url) self.assertEqual(unsubscribe_url, n.unsubscribe_url()) self.assertTrue(update_url) self.assertEqual(update_url, n.update_url()) self.assertTrue(archive_url) self.assertEqual(archive_url, n.archive_url()) # Request detail URL and assert it links to all other URL's response = self.client.get(detail_url) if not n.visible: self.assertEqual(response.status_code, 404) continue self.assertContains(response, subscribe_url) self.assertContains(response, update_url) self.assertContains(response, unsubscribe_url) self.assertContains(response, archive_url) # Request each particular newsletter URL and assert # it returns a 200 response = self.client.get(subscribe_url) self.assertContains(response, n.title, status_code=200) response = self.client.get(unsubscribe_url) self.assertContains(response, n.title, status_code=200) response = self.client.get(update_url) self.assertContains(response, n.title, status_code=200) response = self.client.get(archive_url) self.assertContains(response, n.title, status_code=200)
def test_message_admin(self): """ Testing message admin change list display and message previews. """ changelist_url = reverse('admin:newsletter_message_changelist') response = self.client.get(changelist_url) self.assertContains( response, '<a href="/admin/newsletter/message/%d/preview/">Preview</a>' % self.message.pk, html=True ) # Previews preview_url = reverse('admin:newsletter_message_preview', args=[self.message.pk]) preview_text_url = reverse('admin:newsletter_message_preview_text', args=[self.message.pk]) preview_html_url = reverse('admin:newsletter_message_preview_html', args=[self.message.pk]) response = self.client.get(preview_url) self.assertContains( response, '<iframe src ="%s" width="960px" height="720px"></iframe>' % preview_html_url, html=True ) self.assertContains( response, '<iframe src ="%s" width="960px" height="720px"></iframe>' % preview_text_url, html=True ) response = self.client.get(preview_text_url) self.assertEqual( response.content, b'''++++++++++++++++++++ Test Newsletter: Test message ++++++++++++++++++++ ++++++++++++++++++++ Unsubscribe: http://example.com/newsletter/test-newsletter/unsubscribe/ ''') response = self.client.get(preview_html_url) self.assertContains(response, '<h1>Test Newsletter</h1>') self.assertContains(response, '<h2>Test message</h2>') self.assertContains(response, self.newsletter.unsubscribe_url()) # HTML preview returns 404 if send_html is False self.newsletter.send_html = False self.newsletter.save() response = self.client.get(preview_html_url) self.assertEqual(response.status_code, 404)
def test_admin_import_subscribers_no_addresses(self): """ Cannot confirm subscribers import if 'addresses' misses in session. """ import_url = reverse('admin:newsletter_subscription_import') import_confirm_url = reverse( 'admin:newsletter_subscription_import_confirm' ) response = self.client.post( import_confirm_url, {'confirm': True} ) self.assertRedirects(response, import_url)
def test_add_existing_submission_regression(self): """ Regression test for #322. """ # create a third message message = Message.objects.create( newsletter=self.newsletter, title='3nd message', slug='test-message-3' ) # create submission for third message and add it response = self.client.post(self.add_url, data={ 'message': message.pk, 'site': Site.objects.get_current().id, 'publish_date_0': '2020-10-30', 'publish_date_1': '07:24', 'publish': 'on', }, follow=True) self.assertContains(response, "added") # try to add a submission for third message again # -> this will cause a validation error and print a warning response = self.client.post( reverse('admin:newsletter_submission_change', kwargs={'object_id': 3}), data={ 'message': message.pk, 'site': Site.objects.get_current().id, 'publish_date_0': '2020-10-30', 'publish_date_1': '07:24', 'publish': 'on', '_saveasnew': 'Save as new' }, follow=True) self.assertContains(response, "This message has already been published in some other submission. " "Messages can only be published once.")
def admin_import_file(self, source_file, ignore_errors=''): """ Upload an address file for import to admin. """ import_url = reverse('admin:newsletter_subscription_import') with open(os.path.join(test_files_dir, source_file), 'rb') as fh: return self.client.post(import_url, { 'newsletter': self.newsletter.pk, 'address_file': fh, 'ignore_errors': ignore_errors, }, follow=True)
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_newsletter_admin(self): """ Testing newsletter admin change list display. """ changelist_url = reverse('admin:newsletter_newsletter_changelist') response = self.client.get(changelist_url) self.assertContains( response, '<a href="/admin/newsletter/message/?newsletter__id=%s">Messages</a>' % self.newsletter.pk) self.assertContains( response, '<a href="/admin/newsletter/subscription/?newsletter__id=%s">Subscriptions</a>' % self.newsletter.pk)
def test_newsletter_admin(self): """ Testing newsletter admin change list display. """ changelist_url = reverse('admin:newsletter_newsletter_changelist') response = self.client.get(changelist_url) self.assertContains( response, '<a href="/admin/newsletter/message/?newsletter__id=%s">Messages</a>' % self.newsletter.pk ) self.assertContains( response, '<a href="/admin/newsletter/subscription/?newsletter__id=%s">Subscriptions</a>' % self.newsletter.pk )
def test_detail_invisible_not_found(self): """ Test whether an invisible newsletter causes a 404 in detail view. """ # Get an invisible newsletter n = Newsletter.objects.filter(visible=False)[0] detail_url = reverse('newsletter_detail', kwargs={'newsletter_slug': n.slug}) response = self.client.get(detail_url) self.assertEqual(response.status_code, 404)
def test_message_with_attachment_admin(self): """ Testing message with attachment admin change list display. """ self.assertEqual(Message.objects.count(), 2) message_with_a = Message.objects.last() self.assertEqual(message_with_a.attachments.count(), 1) upload_to = attachment_upload_to(self.attachment, 'sample.txt') self.assertEqual(os.path.split(upload_to)[1], 'sample.txt') change_url = reverse('admin:newsletter_message_change', args=(self.message_with_attachment.pk,)) response = self.client.get(change_url) self.assertContains(response, '<h2>Attachments</h2>', html=True)
def test_admin_import_subscribers_permission(self): """ To be able to import subscriptions, user must have the 'add_subscription' permission. """ self.admin_user.is_superuser = False self.admin_user.save() import_url = reverse('admin:newsletter_subscription_import') response = self.client.get(import_url) self.assertEqual(response.status_code, 403) self.admin_user.user_permissions.add( Permission.objects.get(codename='add_subscription')) response = self.client.get(import_url) self.assertEqual(response.status_code, 200)
def test_detail_invisible_not_found(self): """ Test whether an invisible newsletter causes a 404 in detail view. """ # Get an invisible newsletter n = Newsletter.objects.filter(visible=False)[0] detail_url = reverse( 'newsletter_detail', kwargs={'newsletter_slug': n.slug} ) response = self.client.get(detail_url) self.assertEqual(response.status_code, 404)
def test_admin_import_subscribers_permission(self): """ To be able to import subscriptions, user must have the 'add_subscription' permission. """ self.admin_user.is_superuser = False self.admin_user.save() import_url = reverse('admin:newsletter_subscription_import') response = self.client.get(import_url) self.assertEqual(response.status_code, 403) self.admin_user.user_permissions.add( Permission.objects.get(codename='add_subscription') ) response = self.client.get(import_url) self.assertEqual(response.status_code, 200)
def test_list(self): """ Test whether all newsletters are in the list and whether the links to them are correct. """ response = self.client.get(self.list_url) for n in self.newsletters.filter(visible=True): self.assertContains(response, n.title) detail_url = reverse('newsletter_detail', kwargs={'newsletter_slug': n.slug}) self.assertContains(response, '<a href="%s">' % detail_url) for n in self.newsletters.filter(visible=False): self.assertNotContains(response, n.title)
def admin_import_subscribers(self, source_file, ignore_errors=''): """ Import process of a CSV/LDIF/VCARD file containing subscription addresses from the admin site. """ response = self.admin_import_file(source_file, ignore_errors) self.assertContains(response, "<h1>Confirm import</h1>") self.assertContains(response, "<li>Jill Martin <[email protected]></li>") import_confirm_url = reverse( 'admin:newsletter_subscription_import_confirm') return self.client.post(import_confirm_url, {'confirm': True}, follow=True)
def admin_import_subscribers(self, source_file, ignore_errors=''): """ Import process of a CSV/LDIF/VCARD file containing subscription addresses from the admin site. """ response = self.admin_import_file(source_file, ignore_errors) self.assertContains(response, "<h1>Confirm import</h1>") self.assertContains(response, "<li>Jill Martin <[email protected]></li>") import_confirm_url = reverse( 'admin:newsletter_subscription_import_confirm' ) return self.client.post( import_confirm_url, {'confirm': True}, follow=True )
def test_add_existing_message_regression(self): """ Regression test for #322. """ # ToDo(frennkie) is there a more elegant way to handle the inlines?! response = self.client.post(reverse('admin:newsletter_message_add'), data={ 'title': self.message.title, 'slug': self.message.slug, 'newsletter': self.message.newsletter.id, 'articles-TOTAL_FORMS': 3, 'articles-INITIAL_FORMS': 1, 'articles-MIN_NUM_FORMS': 0, 'articles-MAX_NUM_FORMS': 1000, 'attachments-TOTAL_FORMS': 3, 'attachments-INITIAL_FORMS': 1, 'attachments-MIN_NUM_FORMS': 0, 'attachments-MAX_NUM_FORMS': 1000, '_saveasnew': 'Save as new' }, follow=True) self.assertContains(response, "Message with this Slug and Newsletter already exists.")
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 setUp(self): super(SubmissionAdminTests, self).setUp() self.add_url = reverse('admin:newsletter_submission_add') self.changelist_url = reverse('admin:newsletter_submission_changelist')
def setUp(self): self.newsletters = Newsletter.objects.all() self.list_url = reverse('newsletter_list')
def setUp(self): self.n = Newsletter(title='Test newsletter', slug='test-newsletter', sender='Test Sender', email='*****@*****.**') self.n.save() try: self.n.site.set(get_default_sites()) except AttributeError: # Django < 1.10 self.n.site = get_default_sites() self.subscribe_url = \ reverse('newsletter_subscribe_request', kwargs={'newsletter_slug': self.n.slug}) self.subscribe_confirm_url = \ reverse('newsletter_subscribe_confirm', kwargs={'newsletter_slug': self.n.slug}) self.subscribe_email_sent_url = \ reverse('newsletter_activation_email_sent', kwargs={'newsletter_slug': self.n.slug, 'action': 'subscribe'}) self.subscribe_activated_url = \ reverse('newsletter_action_activated', kwargs={'newsletter_slug': self.n.slug, 'action': 'subscribe'}) self.update_url = \ reverse('newsletter_update_request', kwargs={'newsletter_slug': self.n.slug}) self.update_email_sent_url = \ reverse('newsletter_activation_email_sent', kwargs={'newsletter_slug': self.n.slug, 'action': 'update'}) self.update_activated_url = \ reverse('newsletter_action_activated', kwargs={'newsletter_slug': self.n.slug, 'action': 'update'}) self.unsubscribe_url = \ reverse('newsletter_unsubscribe_request', kwargs={'newsletter_slug': self.n.slug}) self.unsubscribe_confirm_url = \ reverse('newsletter_unsubscribe_confirm', kwargs={'newsletter_slug': self.n.slug}) self.unsubscribe_email_sent_url = \ reverse('newsletter_activation_email_sent', kwargs={'newsletter_slug': self.n.slug, 'action': 'unsubscribe'}) self.unsubscribe_activated_url = \ reverse('newsletter_action_activated', kwargs={'newsletter_slug': self.n.slug, 'action': 'unsubscribe'}) super(SubscribeTestCase, self).setUp()
def test_admin_import_get_form(self): """ Test Import form. """ import_url = reverse('admin:newsletter_subscription_import') response = self.client.get(import_url) self.assertContains(response, "<h1>Import addresses</h1>")
def test_detail(self): for n in self.newsletters: detail_url = reverse( 'newsletter_detail', kwargs={'newsletter_slug': n.slug} ) subscribe_url = reverse( 'newsletter_subscribe_request', kwargs={'newsletter_slug': n.slug} ) unsubscribe_url = reverse( 'newsletter_unsubscribe_request', kwargs={'newsletter_slug': n.slug} ) update_url = reverse( 'newsletter_update_request', kwargs={'newsletter_slug': n.slug} ) archive_url = reverse( 'newsletter_archive', kwargs={'newsletter_slug': n.slug} ) # Check returned URL's exist and equal result of lookup methods self.assertTrue(subscribe_url) self.assertEqual(subscribe_url, n.subscribe_url()) self.assertTrue(unsubscribe_url) self.assertEqual(unsubscribe_url, n.unsubscribe_url()) self.assertTrue(update_url) self.assertEqual(update_url, n.update_url()) self.assertTrue(archive_url) self.assertEqual(archive_url, n.archive_url()) # Request detail URL and assert it links to all other URL's response = self.client.get(detail_url) if not n.visible: self.assertEqual(response.status_code, 404) continue self.assertContains(response, subscribe_url) self.assertContains(response, update_url) self.assertContains(response, unsubscribe_url) self.assertContains(response, archive_url) # Request each particular newsletter URL and assert # it returns a 200 response = self.client.get(subscribe_url) self.assertContains(response, n.title, status_code=200) response = self.client.get(unsubscribe_url) self.assertContains(response, n.title, status_code=200) response = self.client.get(update_url) self.assertContains(response, n.title, status_code=200) response = self.client.get(archive_url) self.assertContains(response, n.title, status_code=200)