def setUp(self): """ Create a newsletter, newsletter issue and some subscriptions to test with. """ # Create some newsletters self.newsletter1 = _make_newsletter("Test Newsletter 1") self.newsletter2 = _make_newsletter("Test Newsletter 2") # Create some approvers self.newsletter1.approvers = """\ [email protected] [email protected] [email protected] [email protected]""" self.newsletter1.save() self.template = "<html><head></head><body><h1>Test</h1></body></html>" self.plaintext = "****\nTest\n****" # Create an issue for each newsletter self.newsletter_issue1 = NewsletterIssue() self.newsletter_issue1.subject = 'Test Newsletter Issue 1' self.newsletter_issue1.template = self.template self.newsletter_issue1.newsletter = self.newsletter1 self.newsletter_issue1.save() self.newsletter_issue2 = NewsletterIssue() self.newsletter_issue2.subject = 'Test Newsletter Issue 2' self.newsletter_issue2.template = self.template self.newsletter_issue2.newsletter = self.newsletter2 self.newsletter_issue2.save() # Create some email addresses and subscribe them to a newsletter emails = [ '*****@*****.**', '*****@*****.**', '*****@*****.**' ] for email in emails: email_address = EmailAddress.objects.create_with_random_token( email=email) email_address.confirmed = True email_address.save() Subscription.objects.create(email_address=email_address, newsletter=self.newsletter1) # Create an unconfirmed email address self.unconfirmed_email = EmailAddress.objects.create_with_random_token( '*****@*****.**') Subscription.objects.create(email_address=self.unconfirmed_email, newsletter=self.newsletter1) # Create an extra email address and subscribe it to the second newsletter self.exclude_email = EmailAddress.objects.create_with_random_token( '*****@*****.**') self.exclude_email.confirmed = True self.exclude_email.save() Subscription.objects.create(email_address=self.exclude_email, newsletter=self.newsletter2)
def test_nova_context_processors(self): """ Verify that NewsletterIssues use NOVA_CONTEXT_PROCESSORS to render themselves when render() is called """ old_settings = getattr(settings, 'NOVA_CONTEXT_PROCESSORS', '!unset') settings.NOVA_CONTEXT_PROCESSORS = [ 'nova.tests.test_context_processor' ] try: issue = NewsletterIssue(template="{{ test }}") issue.newsletter = self.newsletter1 issue.save() self.assertEqual( 'extra test context', issue.render(extra_context={ 'email': EmailAddress(email='*****@*****.**') })) finally: if old_settings == '!unset': del settings.NOVA_CONTEXT_PROCESSORS else: settings.NOVA_CONTEXT_PROCESSORS = old_settings
def test_render(self): """ Verify that the NewsletterIssue template is correctly rendered. """ email = '*****@*****.**' template = """\ Issue ID: {{ issue.pk }} Date: {% now "Y-m-d" %} Email: {{ email }}""" issue = NewsletterIssue() issue.subject = 'Test' issue.template = template issue.newsletter = self.newsletter1 issue.save() expected_template = """\ Issue ID: {issue_id} Date: {date:%Y-%m-%d} Email: {email}""".format(issue_id=issue.pk, date=datetime.now(), email=email) rendered_template = issue.render(template=template, extra_context={'email': email}) self.assertEqual(rendered_template, expected_template)
def test_default_tracking_domain(self): """ Verify that on save a NewsletterIssue is assigned a default tracking domain from the parent Newsletter. """ tracking_domain = 'darkhorse.com' self.newsletter1.default_tracking_domain = tracking_domain self.newsletter1.save() # Sanity check self.assertEqual(self.newsletter1.default_tracking_domain, tracking_domain) issue = NewsletterIssue() issue.subject = 'Test' issue.newsletter = self.newsletter1 issue.save() self.assertTrue(issue.tracking_domain not in ( '', None, )) self.assertEqual(issue.tracking_domain, issue.newsletter.default_tracking_domain) # Verify an existing tracking domain is not overwritten tracking_domain = 'tfaw.com' issue.tracking_domain = tracking_domain issue.save() self.assertEqual(tracking_domain, issue.tracking_domain) self.assertNotEqual(issue.tracking_domain, issue.newsletter.default_tracking_domain)
def test_default_template(self): """ Verify that on save a NewsletterIssue is assigned a default template from the parent Newsletter. """ template_name = 'nova/test.html' self.newsletter1.default_template = template_name self.newsletter1.save() # Sanity check self.assertEqual(self.newsletter1.default_template, template_name) issue = NewsletterIssue() issue.subject = 'Test' issue.newsletter = self.newsletter1 issue.save() self.assertTrue(issue.template not in ( '', None, )) context = Context({}) expected_template = render_to_string(template_name, context) issue_template = Template(issue.template).render(context) self.assertEqual(expected_template, issue_template) # Verify an existing template is not overwritten new_template = 'hai' issue.template = new_template issue.save() self.assertEqual(new_template, NewsletterIssue.objects.get(pk=issue.pk).template)