Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
hub-client / integration / marketo / test_adapter.py
Size: Mime:
import uuid
import datetime

from django.test import TestCase
from django.utils import timezone

from dockerhub.marketo.adapter import (LeadManagerImpl, MarketoMailingListImpl,
                                       CampaignManagerImpl)
from dockerhub.marketo.constants import DTR_BINARY_DOWNLOAD
from dockerhub.marketo.exceptions import InvalidActivityDateException
from dockerhub.marketo.adapter import VALID_LEAD_FIELDS


class TestMarketoFixture(TestCase):
    list_id = '1002'
    email_template = "fake+{0}@email.com"
    cookie = 'id:287-GTJ-838&token:_mch-marketo.com-1396310362214-46169'

    def setUp(self):
        self.lead_adapter = LeadManagerImpl()
        self.campaign_adapter = CampaignManagerImpl()
        self.mailinglist_adapter = MarketoMailingListImpl()


class TestLeadCreationAdapter(TestMarketoFixture):
    def setUp(self):
        super(TestLeadCreationAdapter, self).setUp()
        self.random_email = self.email_template.format(uuid.uuid4())

        self.lead_ids = self.lead_adapter.create_lead(email=self.random_email)

    def tearDown(self):
        self.lead_adapter.delete_lead(self.random_email)

    def test(self):
        super(TestLeadCreationAdapter, self).tearDown()
        self.assertTrue(self.lead_ids)
        self.assertTrue(isinstance(self.lead_ids, list))
        self.assertEqual(len(self.lead_ids), 1)


class TestLeadCreationAdapterWithAllValidFields(TestMarketoFixture):
    """
    We need to make sure all the valid fields are created on the marketo side
    """

    def setUp(self):
        super(TestLeadCreationAdapterWithAllValidFields, self).setUp()
        self.random_email = self.email_template.format(uuid.uuid4())
        date_now = timezone.now()
        self.lead_fields = {
            'hubUsername': 'rogaha',
            'plan_type': 'Starter',
            'email': self.random_email,
            'firstName': 'test1',
            'lastName': 'test2',
            'company': 'company1',
            'country': 'USA',
            'postalCode': '13213',
            'address': 'address1',
            'address2': 'address2',
            'city': 'city',
            'partnerValue': 'partner1',
            'accept_eusa_terms': True,
            'accept_eusa_terms_date': date_now,
            'accept_eval_terms': True,
            'accept_eval_terms_date': date_now,
            'docker_index_add_organization': date_now,
            'docker_index_plan_downgrade': date_now,
            'docker_index_plan_subscription': date_now,
            'docker_index_plan_termination': date_now,
            'docker_index_plan_upgrade': date_now,
            'Docker_Hub_User_Name__c': 'test',
            'unsubscribed': False,
            'phone': '415-3333-7777',
            'state': 'California',
            'jobFunction': 'SysAdmin',
            'dockerUUID': str(uuid.uuid4())
        }
        self.lead_ids = self.lead_adapter.create_lead(email=self.random_email,
                                                      extra_values=self.lead_fields)

    def tearDown(self):
        self.lead_adapter.delete_lead(self.random_email)

    def test(self):
        super(TestLeadCreationAdapterWithAllValidFields, self).tearDown()
        self.assertTrue(self.lead_ids)
        self.assertTrue(isinstance(self.lead_ids, list))
        self.assertEqual(len(self.lead_ids), 1)
        # Make sure we update the tests once we fields are added
        self.assertEqual(len(self.lead_fields), len(VALID_LEAD_FIELDS))


class TestSubscriptionLifecycle(TestLeadCreationAdapter):
    def test(self):
        self.assertFalse(
            self.mailinglist_adapter.is_subscribed(
                self.list_id,
                self.random_email
            )
        )
        self.assertTrue(
            self.mailinglist_adapter.subscribe(
                self.list_id,
                self.random_email
            )
        )
        self.assertTrue(
            self.mailinglist_adapter.is_subscribed(
                self.list_id,
                self.random_email
            )
        )
        self.assertTrue(
            self.mailinglist_adapter.unsubscribe(
                self.list_id,
                self.random_email
            )
        )
        self.assertFalse(
            self.mailinglist_adapter.is_subscribed(
                self.list_id,
                self.random_email
            )
        )


class TestCreateActivity(TestLeadCreationAdapter):
    def test(self):
        self.assertTrue(
            self.lead_adapter.create_activity(
                self.random_email,
                DTR_BINARY_DOWNLOAD,
                timezone.now(),  # timezone aware date
                attributes={
                    'SubType': "Ubuntu",
                    'UserName': "toli",
                    'UUID': "123-abc-xyz-456"
                }
            )
        )


class TestCreateActivityNonTimezoneAware(TestLeadCreationAdapter):
    def test(self):
        self.assertTrue(
            self.lead_adapter.create_activity(
                self.random_email,
                DTR_BINARY_DOWNLOAD,
                datetime.datetime.now(),  # non-timezone aware
                attributes={
                    'SubType': "Ubuntu",
                    'UserName': "toli",
                    'UUID': "123-abc-xyz-456"
                }
            )
        )


class TestCreateActivityBadDate(TestLeadCreationAdapter):
    def test(self):
        with self.assertRaises(InvalidActivityDateException):
            self.lead_adapter.create_activity(
                self.random_email,
                DTR_BINARY_DOWNLOAD,
                'banana',  # bad date
                attributes={
                    'SubType': "Ubuntu",
                    'UserName': "toli",
                    'UUID': "123-abc-xyz-456"
                }
            )


class TestSendSignupRequestCampaign(TestMarketoFixture):
    """
    Test triggering the Sign up Smart Campaign event
    """

    def setUp(self):
        super(TestSendSignupRequestCampaign, self).setUp()
        self.random_email = self.email_template.format(uuid.uuid4())
        self.campaign_id = '1051'
        self.lead_ids = self.lead_adapter.create_lead(email=self.random_email)

    def tearDown(self):
        self.lead_adapter.delete_lead(self.random_email)

    def test(self):
        super(TestSendSignupRequestCampaign, self).tearDown()
        self.assertTrue(self.lead_ids)
        self.assertTrue(isinstance(self.lead_ids, list))
        self.assertEqual(len(self.lead_ids), 1)
        self.leads = [{"id": self.lead_ids[0]}]
        result = self.campaign_adapter.request_campaign(
            self.campaign_id, self.leads)
        # Make sure the Smart Campaign was successfuly triggered
        self.assertTrue(result)