예제 #1
0
 def setUp(self):
     mailing_list = MailingListFactory()
     self.link = LinkFactory()
     self.subscriber = SubscriberFactory(mailing_list=mailing_list)
     self.subscriber.create_activity(
         ActivityTypes.SENT,
         email=self.link.email)  # mock email sent activity
예제 #2
0
 def setUp(self):
     mailing_list = MailingListFactory()
     self.link = LinkFactory()
     self.subscriber_1 = SubscriberFactory(mailing_list=mailing_list)
     self.subscriber_1.create_activity(ActivityTypes.SENT, email=self.link.email)  # mock email sent activity
     self.subscriber_2 = SubscriberFactory(mailing_list=mailing_list)
     self.subscriber_2.create_activity(ActivityTypes.SENT, email=self.link.email)  # mock email sent activity
예제 #3
0
 def setUp(self):
     self.subscriber = SubscriberFactory()
     self.link = LinkFactory()
     self.url = reverse('subscribers:click', kwargs={
         'link_uuid': self.link.uuid,
         'subscriber_uuid': self.subscriber.uuid
     })
     self.response = self.client.get(self.url)
예제 #4
0
    def test_click_two_links_same_email(self):
        link_2 = LinkFactory(email=self.link.email)
        self.subscriber_1.click(self.link)
        self.subscriber_1.click(link_2)

        self.link.refresh_from_db()
        link_2.refresh_from_db()
        self.link.email.campaign.refresh_from_db()

        self.assertEqual(1, self.link.email.campaign.unique_clicks_count)
        self.assertEqual(2, self.link.email.campaign.total_clicks_count)

        self.assertEqual(1, self.link.unique_clicks_count)
        self.assertEqual(1, self.link.total_clicks_count)
        self.assertEqual(1, link_2.unique_clicks_count)
        self.assertEqual(1, link_2.total_clicks_count)

        self.assertEqual(2, self.subscriber_1.activities.filter(activity_type=ActivityTypes.CLICKED).count())
예제 #5
0
    def test_click_two_links_same_email(self):
        link_2 = LinkFactory(email=self.link.email)
        self.subscriber_1.click(self.link)
        self.subscriber_1.click(link_2)

        self.link.refresh_from_db()
        link_2.refresh_from_db()
        self.link.email.campaign.refresh_from_db()

        self.assertEqual(1, self.link.email.campaign.unique_clicks_count)
        self.assertEqual(2, self.link.email.campaign.total_clicks_count)

        self.assertEqual(1, self.link.unique_clicks_count)
        self.assertEqual(1, self.link.total_clicks_count)
        self.assertEqual(1, link_2.unique_clicks_count)
        self.assertEqual(1, link_2.total_clicks_count)

        self.assertEqual(
            2,
            self.subscriber_1.activities.filter(
                activity_type=ActivityTypes.CLICKED).count())
예제 #6
0
class SubscriberClickLinkTests(TestCase):
    def setUp(self):
        mailing_list = MailingListFactory()
        self.link = LinkFactory()
        self.subscriber_1 = SubscriberFactory(mailing_list=mailing_list)
        self.subscriber_1.create_activity(
            ActivityTypes.SENT,
            email=self.link.email)  # mock email sent activity
        self.subscriber_2 = SubscriberFactory(mailing_list=mailing_list)
        self.subscriber_2.create_activity(
            ActivityTypes.SENT,
            email=self.link.email)  # mock email sent activity

    def test_click_rate_update(self):
        self.assertEqual(0.0, self.subscriber_1.click_rate)
        self.subscriber_1.click(self.link)
        self.subscriber_1.refresh_from_db()
        self.subscriber_1.mailing_list.refresh_from_db()
        self.assertEqual(1.0, self.subscriber_1.click_rate)
        # two subscribers, one with click_rate = 1.0 other with click_rate = 0.0 expected mailing list click_rate = 0.5
        self.assertEqual(0.5, self.subscriber_1.mailing_list.click_rate)

    def test_click_link_once(self):
        self.subscriber_1.click(self.link)
        self.link.refresh_from_db()
        self.link.email.campaign.refresh_from_db()
        self.assertEqual(1, self.link.email.campaign.unique_clicks_count)
        self.assertEqual(1, self.link.email.campaign.total_clicks_count)
        self.assertEqual(1, self.link.unique_clicks_count)
        self.assertEqual(1, self.link.total_clicks_count)
        self.assertEqual(
            1,
            self.subscriber_1.activities.filter(
                activity_type=ActivityTypes.CLICKED).count())

    def test_click_link_twice(self):
        self.subscriber_1.click(self.link)
        self.subscriber_1.click(self.link)
        self.link.refresh_from_db()
        self.link.email.campaign.refresh_from_db()
        self.assertEqual(1, self.link.email.campaign.unique_clicks_count)
        self.assertEqual(2, self.link.email.campaign.total_clicks_count)
        self.assertEqual(1, self.link.unique_clicks_count)
        self.assertEqual(2, self.link.total_clicks_count)
        self.assertEqual(
            2,
            self.subscriber_1.activities.filter(
                activity_type=ActivityTypes.CLICKED).count())

    def test_two_subscribers_click_link_once(self):
        self.subscriber_1.click(self.link)
        self.subscriber_2.click(self.link)
        self.link.refresh_from_db()
        self.link.email.campaign.refresh_from_db()
        self.assertEqual(2, self.link.email.campaign.unique_clicks_count)
        self.assertEqual(2, self.link.email.campaign.total_clicks_count)
        self.assertEqual(2, self.link.unique_clicks_count)
        self.assertEqual(2, self.link.total_clicks_count)
        self.assertEqual(
            1,
            self.subscriber_1.activities.filter(
                activity_type=ActivityTypes.CLICKED).count())
        self.assertEqual(
            1,
            self.subscriber_2.activities.filter(
                activity_type=ActivityTypes.CLICKED).count())

    def test_click_two_links_same_email(self):
        link_2 = LinkFactory(email=self.link.email)
        self.subscriber_1.click(self.link)
        self.subscriber_1.click(link_2)

        self.link.refresh_from_db()
        link_2.refresh_from_db()
        self.link.email.campaign.refresh_from_db()

        self.assertEqual(1, self.link.email.campaign.unique_clicks_count)
        self.assertEqual(2, self.link.email.campaign.total_clicks_count)

        self.assertEqual(1, self.link.unique_clicks_count)
        self.assertEqual(1, self.link.total_clicks_count)
        self.assertEqual(1, link_2.unique_clicks_count)
        self.assertEqual(1, link_2.total_clicks_count)

        self.assertEqual(
            2,
            self.subscriber_1.activities.filter(
                activity_type=ActivityTypes.CLICKED).count())
예제 #7
0
 def setUp(self):
     self.subscriber = SubscriberFactory()
     self.email = EmailFactory()
     self.link = LinkFactory(email=self.email)
예제 #8
0
class SubscriberClickLinkForceOpenTests(TestCase):
    def setUp(self):
        mailing_list = MailingListFactory()
        self.link = LinkFactory()
        self.subscriber = SubscriberFactory(mailing_list=mailing_list)
        self.subscriber.create_activity(
            ActivityTypes.SENT,
            email=self.link.email)  # mock email sent activity

    def test_click_without_open(self):
        """
        Test clicking on a link without opening the email first
        The `click` method should enforce the email opening
        """
        self.subscriber.click(self.link)

        # refresh models
        self.link.refresh_from_db()
        self.link.email.refresh_from_db()
        self.link.email.campaign.refresh_from_db()

        # checks for click counts
        self.assertEqual(1, self.link.email.campaign.unique_clicks_count)
        self.assertEqual(1, self.link.email.campaign.total_clicks_count)
        self.assertEqual(1, self.link.unique_clicks_count)
        self.assertEqual(1, self.link.total_clicks_count)
        self.assertEqual(
            1,
            self.subscriber.activities.filter(
                activity_type=ActivityTypes.CLICKED).count())

        # checks for open counts
        self.assertEqual(1, self.link.email.campaign.unique_opens_count)
        self.assertEqual(1, self.link.email.campaign.total_opens_count)
        self.assertEqual(1, self.link.email.unique_opens_count)
        self.assertEqual(1, self.link.email.total_opens_count)
        self.assertEqual(
            1,
            self.subscriber.activities.filter(
                activity_type=ActivityTypes.OPENED).count())

    def test_click_twice_without_open(self):
        """
        Test clicking on a link twice without opening the email first
        Only the first `click` method should trigger the email opening

        """
        self.subscriber.click(self.link)  # trigger `open` method
        self.subscriber.click(
            self.link)  # this time it should not trigger the `open` method

        # refresh models
        self.link.refresh_from_db()
        self.link.email.refresh_from_db()
        self.link.email.campaign.refresh_from_db()

        # checks for click counts
        self.assertEqual(1, self.link.email.campaign.unique_clicks_count)
        self.assertEqual(2, self.link.email.campaign.total_clicks_count)
        self.assertEqual(1, self.link.unique_clicks_count)
        self.assertEqual(2, self.link.total_clicks_count)
        self.assertEqual(
            2,
            self.subscriber.activities.filter(
                activity_type=ActivityTypes.CLICKED).count())

        # checks for open counts
        self.assertEqual(1, self.link.email.campaign.unique_opens_count)
        self.assertEqual(1, self.link.email.campaign.total_opens_count)
        self.assertEqual(1, self.link.email.unique_opens_count)
        self.assertEqual(1, self.link.email.total_opens_count)
        self.assertEqual(
            1,
            self.subscriber.activities.filter(
                activity_type=ActivityTypes.OPENED).count())

    def test_open_once_click_twice(self):
        """
        Test opening email and clicking on a link twice
        """
        self.subscriber.click(self.link)
        self.subscriber.open(self.link.email)
        self.subscriber.click(self.link)

        # refresh models
        self.link.refresh_from_db()
        self.link.email.refresh_from_db()
        self.link.email.campaign.refresh_from_db()

        # checks for click counts
        self.assertEqual(1, self.link.email.campaign.unique_clicks_count)
        self.assertEqual(2, self.link.email.campaign.total_clicks_count)
        self.assertEqual(1, self.link.unique_clicks_count)
        self.assertEqual(2, self.link.total_clicks_count)
        self.assertEqual(
            2,
            self.subscriber.activities.filter(
                activity_type=ActivityTypes.CLICKED).count())

        # checks for open counts
        self.assertEqual(1, self.link.email.campaign.unique_opens_count)
        self.assertEqual(2, self.link.email.campaign.total_opens_count)
        self.assertEqual(1, self.link.email.unique_opens_count)
        self.assertEqual(2, self.link.email.total_opens_count)
        self.assertEqual(
            2,
            self.subscriber.activities.filter(
                activity_type=ActivityTypes.OPENED).count())

    def test_open_twice_click_twice(self):
        """
        Test opening email and clicking on a link twice
        """
        self.subscriber.open(self.link.email)
        self.subscriber.click(self.link)
        self.subscriber.open(self.link.email)
        self.subscriber.click(self.link)

        # refresh models
        self.link.refresh_from_db()
        self.link.email.refresh_from_db()
        self.link.email.campaign.refresh_from_db()

        # checks for click counts
        self.assertEqual(1, self.link.email.campaign.unique_clicks_count)
        self.assertEqual(2, self.link.email.campaign.total_clicks_count)
        self.assertEqual(1, self.link.unique_clicks_count)
        self.assertEqual(2, self.link.total_clicks_count)
        self.assertEqual(
            2,
            self.subscriber.activities.filter(
                activity_type=ActivityTypes.CLICKED).count())

        # checks for open counts
        self.assertEqual(1, self.link.email.campaign.unique_opens_count)
        self.assertEqual(2, self.link.email.campaign.total_opens_count)
        self.assertEqual(1, self.link.email.unique_opens_count)
        self.assertEqual(2, self.link.email.total_opens_count)
        self.assertEqual(
            2,
            self.subscriber.activities.filter(
                activity_type=ActivityTypes.OPENED).count())
예제 #9
0
 def setUp(self):
     self.campaign = CampaignFactory()
     self.email = EmailFactory(campaign=self.campaign)
     self.link = LinkFactory(email=self.email)
예제 #10
0
class SubscriberClickLinkTests(TestCase):
    def setUp(self):
        mailing_list = MailingListFactory()
        self.link = LinkFactory()
        self.subscriber_1 = SubscriberFactory(mailing_list=mailing_list)
        self.subscriber_1.create_activity(ActivityTypes.SENT, email=self.link.email)  # mock email sent activity
        self.subscriber_2 = SubscriberFactory(mailing_list=mailing_list)
        self.subscriber_2.create_activity(ActivityTypes.SENT, email=self.link.email)  # mock email sent activity

    def test_click_rate_update(self):
        self.assertEqual(0.0, self.subscriber_1.click_rate)
        self.subscriber_1.click(self.link)
        self.subscriber_1.refresh_from_db()
        self.subscriber_1.mailing_list.refresh_from_db()
        self.assertEqual(1.0, self.subscriber_1.click_rate)
        # two subscribers, one with click_rate = 1.0 other with click_rate = 0.0 expected mailing list click_rate = 0.5
        self.assertEqual(0.5, self.subscriber_1.mailing_list.click_rate)

    def test_click_link_once(self):
        self.subscriber_1.click(self.link)
        self.link.refresh_from_db()
        self.link.email.campaign.refresh_from_db()
        self.assertEqual(1, self.link.email.campaign.unique_clicks_count)
        self.assertEqual(1, self.link.email.campaign.total_clicks_count)
        self.assertEqual(1, self.link.unique_clicks_count)
        self.assertEqual(1, self.link.total_clicks_count)
        self.assertEqual(1, self.subscriber_1.activities.filter(activity_type=ActivityTypes.CLICKED).count())

    def test_click_link_twice(self):
        self.subscriber_1.click(self.link)
        self.subscriber_1.click(self.link)
        self.link.refresh_from_db()
        self.link.email.campaign.refresh_from_db()
        self.assertEqual(1, self.link.email.campaign.unique_clicks_count)
        self.assertEqual(2, self.link.email.campaign.total_clicks_count)
        self.assertEqual(1, self.link.unique_clicks_count)
        self.assertEqual(2, self.link.total_clicks_count)
        self.assertEqual(2, self.subscriber_1.activities.filter(activity_type=ActivityTypes.CLICKED).count())

    def test_two_subscribers_click_link_once(self):
        self.subscriber_1.click(self.link)
        self.subscriber_2.click(self.link)
        self.link.refresh_from_db()
        self.link.email.campaign.refresh_from_db()
        self.assertEqual(2, self.link.email.campaign.unique_clicks_count)
        self.assertEqual(2, self.link.email.campaign.total_clicks_count)
        self.assertEqual(2, self.link.unique_clicks_count)
        self.assertEqual(2, self.link.total_clicks_count)
        self.assertEqual(1, self.subscriber_1.activities.filter(activity_type=ActivityTypes.CLICKED).count())
        self.assertEqual(1, self.subscriber_2.activities.filter(activity_type=ActivityTypes.CLICKED).count())

    def test_click_two_links_same_email(self):
        link_2 = LinkFactory(email=self.link.email)
        self.subscriber_1.click(self.link)
        self.subscriber_1.click(link_2)

        self.link.refresh_from_db()
        link_2.refresh_from_db()
        self.link.email.campaign.refresh_from_db()

        self.assertEqual(1, self.link.email.campaign.unique_clicks_count)
        self.assertEqual(2, self.link.email.campaign.total_clicks_count)

        self.assertEqual(1, self.link.unique_clicks_count)
        self.assertEqual(1, self.link.total_clicks_count)
        self.assertEqual(1, link_2.unique_clicks_count)
        self.assertEqual(1, link_2.total_clicks_count)

        self.assertEqual(2, self.subscriber_1.activities.filter(activity_type=ActivityTypes.CLICKED).count())
예제 #11
0
class SubscriberClickLinkForceOpenTests(TestCase):
    def setUp(self):
        mailing_list = MailingListFactory()
        self.link = LinkFactory()
        self.subscriber = SubscriberFactory(mailing_list=mailing_list)
        self.subscriber.create_activity(ActivityTypes.SENT, email=self.link.email)  # mock email sent activity

    def test_click_without_open(self):
        """
        Test clicking on a link without opening the email first
        The `click` method should enforce the email opening
        """
        self.subscriber.click(self.link)

        # refresh models
        self.link.refresh_from_db()
        self.link.email.refresh_from_db()
        self.link.email.campaign.refresh_from_db()

        # checks for click counts
        self.assertEqual(1, self.link.email.campaign.unique_clicks_count)
        self.assertEqual(1, self.link.email.campaign.total_clicks_count)
        self.assertEqual(1, self.link.unique_clicks_count)
        self.assertEqual(1, self.link.total_clicks_count)
        self.assertEqual(1, self.subscriber.activities.filter(activity_type=ActivityTypes.CLICKED).count())

        # checks for open counts
        self.assertEqual(1, self.link.email.campaign.unique_opens_count)
        self.assertEqual(1, self.link.email.campaign.total_opens_count)
        self.assertEqual(1, self.link.email.unique_opens_count)
        self.assertEqual(1, self.link.email.total_opens_count)
        self.assertEqual(1, self.subscriber.activities.filter(activity_type=ActivityTypes.OPENED).count())

    def test_click_twice_without_open(self):
        """
        Test clicking on a link twice without opening the email first
        Only the first `click` method should trigger the email opening

        """
        self.subscriber.click(self.link)  # trigger `open` method
        self.subscriber.click(self.link)  # this time it should not trigger the `open` method

        # refresh models
        self.link.refresh_from_db()
        self.link.email.refresh_from_db()
        self.link.email.campaign.refresh_from_db()

        # checks for click counts
        self.assertEqual(1, self.link.email.campaign.unique_clicks_count)
        self.assertEqual(2, self.link.email.campaign.total_clicks_count)
        self.assertEqual(1, self.link.unique_clicks_count)
        self.assertEqual(2, self.link.total_clicks_count)
        self.assertEqual(2, self.subscriber.activities.filter(activity_type=ActivityTypes.CLICKED).count())

        # checks for open counts
        self.assertEqual(1, self.link.email.campaign.unique_opens_count)
        self.assertEqual(1, self.link.email.campaign.total_opens_count)
        self.assertEqual(1, self.link.email.unique_opens_count)
        self.assertEqual(1, self.link.email.total_opens_count)
        self.assertEqual(1, self.subscriber.activities.filter(activity_type=ActivityTypes.OPENED).count())

    def test_open_once_click_twice(self):
        """
        Test opening email and clicking on a link twice
        """
        self.subscriber.click(self.link)
        self.subscriber.open(self.link.email)
        self.subscriber.click(self.link)

        # refresh models
        self.link.refresh_from_db()
        self.link.email.refresh_from_db()
        self.link.email.campaign.refresh_from_db()

        # checks for click counts
        self.assertEqual(1, self.link.email.campaign.unique_clicks_count)
        self.assertEqual(2, self.link.email.campaign.total_clicks_count)
        self.assertEqual(1, self.link.unique_clicks_count)
        self.assertEqual(2, self.link.total_clicks_count)
        self.assertEqual(2, self.subscriber.activities.filter(activity_type=ActivityTypes.CLICKED).count())

        # checks for open counts
        self.assertEqual(1, self.link.email.campaign.unique_opens_count)
        self.assertEqual(2, self.link.email.campaign.total_opens_count)
        self.assertEqual(1, self.link.email.unique_opens_count)
        self.assertEqual(2, self.link.email.total_opens_count)
        self.assertEqual(2, self.subscriber.activities.filter(activity_type=ActivityTypes.OPENED).count())

    def test_open_twice_click_twice(self):
        """
        Test opening email and clicking on a link twice
        """
        self.subscriber.open(self.link.email)
        self.subscriber.click(self.link)
        self.subscriber.open(self.link.email)
        self.subscriber.click(self.link)

        # refresh models
        self.link.refresh_from_db()
        self.link.email.refresh_from_db()
        self.link.email.campaign.refresh_from_db()

        # checks for click counts
        self.assertEqual(1, self.link.email.campaign.unique_clicks_count)
        self.assertEqual(2, self.link.email.campaign.total_clicks_count)
        self.assertEqual(1, self.link.unique_clicks_count)
        self.assertEqual(2, self.link.total_clicks_count)
        self.assertEqual(2, self.subscriber.activities.filter(activity_type=ActivityTypes.CLICKED).count())

        # checks for open counts
        self.assertEqual(1, self.link.email.campaign.unique_opens_count)
        self.assertEqual(2, self.link.email.campaign.total_opens_count)
        self.assertEqual(1, self.link.email.unique_opens_count)
        self.assertEqual(2, self.link.email.total_opens_count)
        self.assertEqual(2, self.subscriber.activities.filter(activity_type=ActivityTypes.OPENED).count())