Exemplo n.º 1
0
 def test_round_percentage(self):
     self.subscriber.create_activity(ActivityTypes.SENT,
                                     email=EmailFactory())
     self.subscriber.create_activity(ActivityTypes.SENT,
                                     email=EmailFactory())
     self.subscriber.create_activity(ActivityTypes.SENT, email=self.email)
     self.subscriber.create_activity(ActivityTypes.OPENED, email=self.email)
     self.assertEqual(0.3333, self.subscriber.update_open_rate())
Exemplo n.º 2
0
 def setUp(self):
     mailing_list = MailingListFactory()
     self.email = EmailFactory()
     self.subscriber_1 = SubscriberFactory(mailing_list=mailing_list)
     self.subscriber_1.create_activity(
         ActivityTypes.SENT, email=self.email)  # mock email sent activity
     self.subscriber_2 = SubscriberFactory(mailing_list=mailing_list)
     self.subscriber_2.create_activity(
         ActivityTypes.SENT, email=self.email)  # mock email sent activity
Exemplo n.º 3
0
 def test_round_percentage(self):
     self.subscriber.create_activity(ActivityTypes.SENT,
                                     email=EmailFactory())
     self.subscriber.create_activity(ActivityTypes.SENT,
                                     email=EmailFactory())
     self.subscriber.create_activity(ActivityTypes.SENT, email=self.email)
     self.subscriber.create_activity(ActivityTypes.CLICKED,
                                     email=self.email,
                                     link=self.link)
     self.assertEqual(0.3333, self.subscriber.update_click_rate())
Exemplo n.º 4
0
 def setUp(self):
     mailing_list = MailingListFactory()
     self.email = EmailFactory()
     self.subscriber_1 = SubscriberFactory(mailing_list=mailing_list)
     self.subscriber_1.create_activity(ActivityTypes.SENT, email=self.email)  # mock email sent activity
     self.subscriber_2 = SubscriberFactory(mailing_list=mailing_list)
     self.subscriber_2.create_activity(ActivityTypes.SENT, email=self.email)  # mock email sent activity
Exemplo n.º 5
0
 def setUp(self):
     super().setUp()
     self.email = EmailFactory(from_email='*****@*****.**',
                               from_name='John Doe',
                               subject='My email subject',
                               template_content='Hi {{ name }}!')
     send_campaign_email_test(self.email, ['*****@*****.**'])
     self.email_message = mail.outbox[0]
Exemplo n.º 6
0
 def setUp(self):
     self.subscriber = SubscriberFactory()
     self.email = EmailFactory()
     self.url = reverse('subscribers:open', kwargs={
         'email_uuid': self.email.uuid,
         'subscriber_uuid': self.subscriber.uuid
     })
     self.response = self.client.get(self.url)
Exemplo n.º 7
0
 def setUp(self):
     super().setUp()
     self.email = EmailFactory(
         from_email='*****@*****.**',
         from_name='John Doe',
         subject='My email subject',
     )
     self.email.campaign.mailing_list = MailingListFactory()
     self.email.campaign.save()
     self.email.set_template_content()
     email_content = {
         'content':
         '<p>Hi there!</p><p>Test email body.</p><a href="https://google.com">google</a>'
     }
     self.email.set_blocks(email_content)
     self.email.save()
     send_campaign_email_test(self.email, ['*****@*****.**'])
     self.email_message = mail.outbox[0]
Exemplo n.º 8
0
class SendCampaignEmailTestMailingListTests(TestCase):
    def setUp(self):
        super().setUp()
        self.email = EmailFactory(
            from_email='*****@*****.**',
            from_name='John Doe',
            subject='My email subject',
        )
        self.email.campaign.mailing_list = MailingListFactory()
        self.email.campaign.save()
        self.email.set_template_content()
        email_content = {
            'content': '<p>Hi there!</p><p>Test email body.</p><a href="https://google.com">google</a>'
        }
        self.email.set_blocks(email_content)
        self.email.save()
        send_campaign_email_test(self.email, ['*****@*****.**'])
        self.email_message = mail.outbox[0]

    def test_email_contents_unsub_link(self):
        unsubscribe_url = get_absolute_url('subscribers:unsubscribe_manual', {
            'mailing_list_uuid': self.email.campaign.mailing_list.uuid,
        })
        text_body = self.email_message.body
        html_body, mimetype = self.email_message.alternatives[0]
        self.assertIn(unsubscribe_url, text_body, 'Email plain text body must contain unsubscribe link.')
        self.assertIn(unsubscribe_url, html_body, 'Email HTML body must contain unsubscribe link.')
Exemplo n.º 9
0
class SendCampaignEmailTestMailingListTests(TestCase):
    def setUp(self):
        super().setUp()
        self.email = EmailFactory(
            from_email='*****@*****.**',
            from_name='John Doe',
            subject='My email subject',
        )
        self.email.campaign.mailing_list = MailingListFactory()
        self.email.campaign.save()
        self.email.set_template_content()
        email_content = {
            'content':
            '<p>Hi there!</p><p>Test email body.</p><a href="https://google.com">google</a>'
        }
        self.email.set_blocks(email_content)
        self.email.save()
        send_campaign_email_test(self.email, ['*****@*****.**'])
        self.email_message = mail.outbox[0]

    def test_email_contents_unsub_link(self):
        unsubscribe_url = get_absolute_url(
            'subscribers:unsubscribe_manual', {
                'mailing_list_uuid': self.email.campaign.mailing_list.uuid,
            })
        text_body = self.email_message.body
        html_body, mimetype = self.email_message.alternatives[0]
        self.assertIn(unsubscribe_url, text_body,
                      'Email plain text body must contain unsubscribe link.')
        self.assertIn(unsubscribe_url, html_body,
                      'Email HTML body must contain unsubscribe link.')
Exemplo n.º 10
0
 def setUp(self):
     super().setUp()
     self.mailing_list = MailingListFactory()
     self.subscribers = SubscriberFactory.create_batch(
         10, mailing_list=self.mailing_list)
     self.campaign = CampaignFactory(mailing_list=self.mailing_list,
                                     track_clicks=True,
                                     track_opens=True)
     self.email = EmailFactory(
         campaign=self.campaign,
         from_email='*****@*****.**',
         from_name='John Doe',
         subject='Test email subject',
     )
     self.email.set_template_content()
     email_content = {
         'content':
         '<p>Hi there!</p><p>Test email body.</p><a href="https://google.com">google</a>'
     }
     self.email.set_blocks(email_content)
     self.email.save()
     send_campaign(self.campaign)
Exemplo n.º 11
0
 def setUp(self):
     super().setUp()
     self.email = EmailFactory(
         from_email='*****@*****.**',
         from_name='John Doe',
         subject='My email subject',
     )
     self.email.campaign.mailing_list = MailingListFactory()
     self.email.campaign.save()
     self.email.set_template_content()
     email_content = {
         'content': '<p>Hi there!</p><p>Test email body.</p><a href="https://google.com">google</a>'
     }
     self.email.set_blocks(email_content)
     self.email.save()
     send_campaign_email_test(self.email, ['*****@*****.**'])
     self.email_message = mail.outbox[0]
Exemplo n.º 12
0
 def setUp(self):
     super().setUp()
     self.mailing_list = MailingListFactory()
     self.subscribers = SubscriberFactory.create_batch(10, mailing_list=self.mailing_list)
     self.campaign = CampaignFactory(mailing_list=self.mailing_list, track_clicks=True, track_opens=True)
     self.email = EmailFactory(
         campaign=self.campaign,
         from_email='*****@*****.**',
         from_name='John Doe',
         subject='Test email subject',
     )
     self.email.set_template_content()
     email_content = {
         'content': '<p>Hi there!</p><p>Test email body.</p><a href="https://google.com">google</a>'
     }
     self.email.set_blocks(email_content)
     self.email.save()
     send_campaign(self.campaign)
Exemplo n.º 13
0
class SubscriberOpenEmailTests(TestCase):
    def setUp(self):
        mailing_list = MailingListFactory()
        self.email = EmailFactory()
        self.subscriber_1 = SubscriberFactory(mailing_list=mailing_list)
        self.subscriber_1.create_activity(ActivityTypes.SENT, email=self.email)  # mock email sent activity
        self.subscriber_2 = SubscriberFactory(mailing_list=mailing_list)
        self.subscriber_2.create_activity(ActivityTypes.SENT, email=self.email)  # mock email sent activity

    def test_open_rate_updated(self):
        self.assertEqual(0.0, self.subscriber_1.open_rate)
        self.subscriber_1.open(self.email)
        self.subscriber_1.refresh_from_db()
        self.subscriber_1.mailing_list.refresh_from_db()
        self.assertEqual(1.0, self.subscriber_1.open_rate)
        # two subscribers, one with open_rate = 1.0 other with open_rate = 0.0, expected mailing list open_rate = 0.5
        self.assertEqual(0.5, self.subscriber_1.mailing_list.open_rate)

    def test_open_email_once(self):
        self.subscriber_1.open(self.email)
        self.email.refresh_from_db()
        self.email.campaign.refresh_from_db()
        self.assertEqual(1, self.email.campaign.unique_opens_count)
        self.assertEqual(1, self.email.campaign.total_opens_count)
        self.assertEqual(1, self.email.unique_opens_count)
        self.assertEqual(1, self.email.total_opens_count)
        self.assertEqual(1, self.subscriber_1.activities.filter(activity_type=ActivityTypes.OPENED).count())

    def test_open_email_twice(self):
        self.subscriber_1.open(self.email)
        self.subscriber_1.open(self.email)
        self.email.refresh_from_db()
        self.email.campaign.refresh_from_db()
        self.assertEqual(1, self.email.campaign.unique_opens_count)
        self.assertEqual(2, self.email.campaign.total_opens_count)
        self.assertEqual(1, self.email.unique_opens_count)
        self.assertEqual(2, self.email.total_opens_count)
        self.assertEqual(2, self.subscriber_1.activities.filter(activity_type=ActivityTypes.OPENED).count())

    def test_two_subscribers_open_email_once(self):
        self.subscriber_1.open(self.email)
        self.subscriber_2.open(self.email)
        self.email.refresh_from_db()
        self.email.campaign.refresh_from_db()
        self.assertEqual(2, self.email.campaign.unique_opens_count)
        self.assertEqual(2, self.email.campaign.total_opens_count)
        self.assertEqual(2, self.email.unique_opens_count)
        self.assertEqual(2, self.email.total_opens_count)
        self.assertEqual(1, self.subscriber_1.activities.filter(activity_type=ActivityTypes.OPENED).count())
        self.assertEqual(1, self.subscriber_2.activities.filter(activity_type=ActivityTypes.OPENED).count())
Exemplo n.º 14
0
 def setUp(self):
     self.subscriber = SubscriberFactory()
     self.email = EmailFactory()
     self.link = LinkFactory(email=self.email)
Exemplo n.º 15
0
class SendCampaignTests(TestCase):
    def setUp(self):
        super().setUp()
        self.mailing_list = MailingListFactory()
        self.subscribers = SubscriberFactory.create_batch(10, mailing_list=self.mailing_list)
        self.campaign = CampaignFactory(mailing_list=self.mailing_list, track_clicks=True, track_opens=True)
        self.email = EmailFactory(
            campaign=self.campaign,
            from_email='*****@*****.**',
            from_name='John Doe',
            subject='Test email subject',
        )
        self.email.set_template_content()
        email_content = {
            'content': '<p>Hi there!</p><p>Test email body.</p><a href="https://google.com">google</a>'
        }
        self.email.set_blocks(email_content)
        self.email.save()
        send_campaign(self.campaign)

    def test_setup(self):
        self.assertEqual(MailingList.objects.count(), 1)
        self.assertEqual(self.mailing_list.subscribers.count(), 10)
        self.assertEqual(self.mailing_list.campaigns.count(), 1)
        self.assertEqual(self.campaign.emails.count(), 1)
        self.assertTrue(self.campaign.can_send)

    def test_campaign_status(self):
        self.campaign.refresh_from_db()
        self.assertEqual(self.campaign.status, CampaignStatus.SENT)

    def test_subscribers_last_sent(self):
        for subscriber in self.subscribers:
            subscriber.refresh_from_db()
            with self.subTest(subscriber=subscriber):
                self.assertIsNotNone(subscriber.last_sent)

    def test_activity_sent_created(self):
        activities_count = Activity.objects.filter(activity_type=ActivityTypes.SENT).count()
        self.assertEqual(activities_count, 10)

    def test_emails_sent(self):
        self.assertEqual(len(mail.outbox), 10, 'Campaign must send 1 email for each subscriber.')

    def test_emails_contents(self):
        for email in mail.outbox:
            with self.subTest(email=email):
                self.assertEqual(email.subject, 'Test email subject')
                subscriber = Subscriber.objects.get(email=email.to[0])
                unsubscribe_url = get_absolute_url('subscribers:unsubscribe', {
                    'mailing_list_uuid': self.mailing_list.uuid,
                    'subscriber_uuid': subscriber.uuid,
                    'campaign_uuid': self.campaign.uuid
                })
                text_body = email.body
                html_body, mimetype = email.alternatives[0]
                self.assertIn(unsubscribe_url, text_body, 'Email plain text body must contain unsubscribe link.')
                self.assertIn('/track/click/', text_body, 'Email plain text body must contain track click links.')
                self.assertNotIn('/track/open/', text_body, 'Email plain text body must NOT contain track open pixel.')
                self.assertIn(unsubscribe_url, html_body, 'Email HTML body must contain unsubscribe link.')
                self.assertIn('/track/click/', html_body, 'Email HTML body must contain track click links.')
                self.assertIn('/track/open/', html_body, 'Email HTML body must contain track open pixel.')
Exemplo n.º 16
0
 def setUp(self):
     self.subscriber = SubscriberFactory()
     self.email = EmailFactory()
Exemplo n.º 17
0
class SubscriberOpenEmailTests(TestCase):
    def setUp(self):
        mailing_list = MailingListFactory()
        self.email = EmailFactory()
        self.subscriber_1 = SubscriberFactory(mailing_list=mailing_list)
        self.subscriber_1.create_activity(
            ActivityTypes.SENT, email=self.email)  # mock email sent activity
        self.subscriber_2 = SubscriberFactory(mailing_list=mailing_list)
        self.subscriber_2.create_activity(
            ActivityTypes.SENT, email=self.email)  # mock email sent activity

    def test_open_rate_updated(self):
        self.assertEqual(0.0, self.subscriber_1.open_rate)
        self.subscriber_1.open(self.email)
        self.subscriber_1.refresh_from_db()
        self.subscriber_1.mailing_list.refresh_from_db()
        self.assertEqual(1.0, self.subscriber_1.open_rate)
        # two subscribers, one with open_rate = 1.0 other with open_rate = 0.0, expected mailing list open_rate = 0.5
        self.assertEqual(0.5, self.subscriber_1.mailing_list.open_rate)

    def test_open_email_once(self):
        self.subscriber_1.open(self.email)
        self.email.refresh_from_db()
        self.email.campaign.refresh_from_db()
        self.assertEqual(1, self.email.campaign.unique_opens_count)
        self.assertEqual(1, self.email.campaign.total_opens_count)
        self.assertEqual(1, self.email.unique_opens_count)
        self.assertEqual(1, self.email.total_opens_count)
        self.assertEqual(
            1,
            self.subscriber_1.activities.filter(
                activity_type=ActivityTypes.OPENED).count())

    def test_open_email_twice(self):
        self.subscriber_1.open(self.email)
        self.subscriber_1.open(self.email)
        self.email.refresh_from_db()
        self.email.campaign.refresh_from_db()
        self.assertEqual(1, self.email.campaign.unique_opens_count)
        self.assertEqual(2, self.email.campaign.total_opens_count)
        self.assertEqual(1, self.email.unique_opens_count)
        self.assertEqual(2, self.email.total_opens_count)
        self.assertEqual(
            2,
            self.subscriber_1.activities.filter(
                activity_type=ActivityTypes.OPENED).count())

    def test_two_subscribers_open_email_once(self):
        self.subscriber_1.open(self.email)
        self.subscriber_2.open(self.email)
        self.email.refresh_from_db()
        self.email.campaign.refresh_from_db()
        self.assertEqual(2, self.email.campaign.unique_opens_count)
        self.assertEqual(2, self.email.campaign.total_opens_count)
        self.assertEqual(2, self.email.unique_opens_count)
        self.assertEqual(2, self.email.total_opens_count)
        self.assertEqual(
            1,
            self.subscriber_1.activities.filter(
                activity_type=ActivityTypes.OPENED).count())
        self.assertEqual(
            1,
            self.subscriber_2.activities.filter(
                activity_type=ActivityTypes.OPENED).count())
Exemplo n.º 18
0
 def setUp(self):
     self.campaign = CampaignFactory()
     self.email = EmailFactory(campaign=self.campaign)
     self.link = LinkFactory(email=self.email)
Exemplo n.º 19
0
class SendCampaignTests(TestCase):
    def setUp(self):
        super().setUp()
        self.mailing_list = MailingListFactory()
        self.subscribers = SubscriberFactory.create_batch(
            10, mailing_list=self.mailing_list)
        self.campaign = CampaignFactory(mailing_list=self.mailing_list,
                                        track_clicks=True,
                                        track_opens=True)
        self.email = EmailFactory(
            campaign=self.campaign,
            from_email='*****@*****.**',
            from_name='John Doe',
            subject='Test email subject',
        )
        self.email.set_template_content()
        email_content = {
            'content':
            '<p>Hi there!</p><p>Test email body.</p><a href="https://google.com">google</a>'
        }
        self.email.set_blocks(email_content)
        self.email.save()
        send_campaign(self.campaign)

    def test_setup(self):
        self.assertEqual(MailingList.objects.count(), 1)
        self.assertEqual(self.mailing_list.subscribers.count(), 10)
        self.assertEqual(self.mailing_list.campaigns.count(), 1)
        self.assertEqual(self.campaign.emails.count(), 1)
        self.assertTrue(self.campaign.can_send)

    def test_campaign_status(self):
        self.campaign.refresh_from_db()
        self.assertEqual(self.campaign.status, CampaignStatus.SENT)

    def test_subscribers_last_sent(self):
        for subscriber in self.subscribers:
            subscriber.refresh_from_db()
            with self.subTest(subscriber=subscriber):
                self.assertIsNotNone(subscriber.last_sent)

    def test_activity_sent_created(self):
        activities_count = Activity.objects.filter(
            activity_type=ActivityTypes.SENT).count()
        self.assertEqual(activities_count, 10)

    def test_emails_sent(self):
        self.assertEqual(len(mail.outbox), 10,
                         'Campaign must send 1 email for each subscriber.')

    def test_emails_contents(self):
        for email in mail.outbox:
            with self.subTest(email=email):
                self.assertEqual(email.subject, 'Test email subject')
                subscriber = Subscriber.objects.get(email=email.to[0])
                unsubscribe_url = get_absolute_url(
                    'subscribers:unsubscribe', {
                        'mailing_list_uuid': self.mailing_list.uuid,
                        'subscriber_uuid': subscriber.uuid,
                        'campaign_uuid': self.campaign.uuid
                    })
                text_body = email.body
                html_body, mimetype = email.alternatives[0]
                self.assertIn(
                    unsubscribe_url, text_body,
                    'Email plain text body must contain unsubscribe link.')
                self.assertIn(
                    '/track/click/', text_body,
                    'Email plain text body must contain track click links.')
                self.assertNotIn(
                    '/track/open/', text_body,
                    'Email plain text body must NOT contain track open pixel.')
                self.assertIn(
                    unsubscribe_url, html_body,
                    'Email HTML body must contain unsubscribe link.')
                self.assertIn(
                    '/track/click/', html_body,
                    'Email HTML body must contain track click links.')
                self.assertIn(
                    '/track/open/', html_body,
                    'Email HTML body must contain track open pixel.')