def test_list_contacts(self, mock_get):
        """Assert requests.get calls"""

        fixtures_path = os.path.join(THIS_DIR, 'fixture_list_contacts.json')
        with open(fixtures_path, 'r') as f:
            fixtures_data = json.load(f)

        config = act.Config()
        config.API_KEY = 'VALID_API_KEY'
        cr = act.ContactsResource(config)

        json_data = cr.get()
        self.assertEqual(json_data, fixtures_data)

        json_data = cr.get(ids=None)
        self.assertEqual(json_data, fixtures_data)

        json_data = cr.get(ids='ALL')
        self.assertEqual(json_data, fixtures_data)

        json_data = cr.get(ids=['1'])
        self.assertEqual(json_data, fixtures_data)

        json_data = cr.get(ids='1')
        self.assertEqual(json_data, fixtures_data)

        with self.assertRaises(TypeError):
            # IDs must be passed as strings
            json_data = cr.get(ids=[1])

        with self.assertRaises(TypeError):
            # IDs must be passed as strings
            json_data = cr.get(ids=1)
def send_campaign_message(email, campaign_id, message_id, _type, action):
    """
    Send a message to a single recipient.
    """
    config = act.Config()
    resource = act.CampaignResource(config)
    json_data = resource.send(email, campaign_id, message_id, _type, action)
    click.echo(pformat(json_data))
def get_contacts():
    """
    List all contacts
    """
    config = act.Config()
    resource = act.ContactsResource(config)
    json_data = resource.get()
    click.echo(pformat(json_data))
def get_campaigns(ids):
    """
    Send a message to a single recipient.
    """
    config = act.Config()
    resource = act.CampaignResource(config)
    json_data = resource.get(ids)
    click.echo(pformat(json_data))
def view_message(id):
    """
    View a single message
    """
    config = act.Config()
    resource = act.MessageResource(config)
    json_data = resource.get_one(_id=id)
    click.echo(pformat(json_data))
def delete_message(id):
    """
    Delete a given message
    """
    config = act.Config()
    resource = act.MessageResource(config)
    json_data = resource.delete(_id=id)
    click.echo(pformat(json_data))
def get_messages(ids, page):
    """
    Get many messages. (Note: This method does not seem to currently work. Use `view_message` instead.)
    """
    config = act.Config()
    resource = act.MessageResource(config)
    json_data = resource.get_many(ids=ids, page=page)
    click.echo(pformat(json_data))
def get_lists():
    """
    Get all lists.
    """
    config = act.Config()
    resource = act.ListResource(config)
    json_data = resource.get(full='1')
    click.echo(pformat(json_data))
def update_campaign_status(campaign_id, draft, send_date):
    """
    Send a message to a single recipient.
    """
    config = act.Config()
    resource = act.CampaignResource(config)
    send_date = date_parse(send_date) if isinstance(send_date,
                                                    str) else send_date
    status = '0' if draft else '1'
    json_data = resource.update_status(campaign_id, status, send_date)
    click.echo(pformat(json_data))
def add_contact(email, first_name, last_name, list_id, tags):
    """
    Add a contact.
    """
    config = act.Config()
    resource = act.ContactsResource(config)
    data = {
        'email': email,
        'first_name': first_name,
        'last_name': last_name,
        'list_id': [list_id],
        'tags': tags,
    }
    json_data = resource.create(data)
    click.echo(pformat(json_data))
    def test_delete_contact(self, mock_get):
        """Assert requests.get calls"""
        config = act.Config()
        config.API_KEY = 'VALID_API_KEY'
        cr = act.ContactsResource(config)

        result = cr.delete(_id='1')
        expected = {
            'result_code': 1,
            'result_message': 'Contact deleted',
            'result_output': 'json'
        }
        self.assertEqual(result, expected)

        result = cr.delete(_id='a')
        expected = {
            'result_code': 1,
            'result_message': 'Contact deleted',
            'result_output': 'json'
        }
        self.assertEqual(result, expected)
def create_campaign(name, send_date, draft, public, list_id, message_id,
                    segment_id, campaign_type):
    """
    Send a message to a single recipient.
    """
    config = act.Config()
    resource = act.CampaignResource(config)
    data = {
        'name': name,
        'sdate': date_parse(send_date),
        'status': '0' if draft else '1',
        'public': '1' if public else '0',
        'list_id': [list_id],
        'message_id': {
            message_id: 100
        },
        'segmentid': segment_id,
        'type': campaign_type
    }
    json_data = resource.create(data)
    click.echo(pformat(json_data))
    def test_list_list(self, mock_get):
        """Assert requests.get calls"""

        with open(os.path.join(THIS_DIR, 'fixture_list_list.json'), 'r') as f:
            fixtures_data = json.load(f)

        config = act.Config()
        config.API_KEY = 'VALID_API_KEY'
        resource = act.ListResource(config)

        json_data = resource.get()
        self.assertEqual(json_data, fixtures_data)

        json_data = resource.get(ids=None)
        self.assertEqual(json_data, fixtures_data)

        json_data = resource.get(ids='ALL')
        self.assertEqual(json_data, fixtures_data)

        json_data = resource.get(ids=['1'])
        self.assertEqual(json_data, fixtures_data)

        json_data = resource.get(ids='1')
        self.assertEqual(json_data, fixtures_data)

        with self.assertRaises(TypeError):
            # IDs must be passed as strings
            json_data = resource.get(ids=[1])

        with self.assertRaises(TypeError):
            # IDs must be passed as strings
            json_data = resource.get(ids=1)

        # 'full=1' test case
        with open(os.path.join(THIS_DIR, 'fixture_list_list_full.json'),
                  'r') as f:
            fixtures_data = json.load(f)
        json_data = resource.get(ids='1', full='1')
        self.assertEqual(json_data, fixtures_data)
    def test_create_contacts(self, mock_post):
        config = act.Config()
        config.API_KEY = 'VALID_API_KEY'
        cr = act.ContactsResource(config)

        result = cr.create({
            'email': '*****@*****.**',
            'first_name': 'Test Account',
            'last_name': '2',
            'phone': '+1 555-555-5555',
            'ip4': '127.0.0.1',
            'tags': ['fakeuser', 'testing'],
            'list_id': ['1'],
        })
        expected = {
            'subscriber_id': 2,
            'sendlast_should': 0,
            'sendlast_did': 0,
            'result_code': 1,
            'result_message': 'Contact added',
            'result_output': 'json'
        }
        self.assertEqual(result, expected)

        result = cr.create({
            'first_name': 'Test Account',
            'last_name': '2',
            'phone': '+1 555-555-5555',
            'ip4': '127.0.0.1',
            'tags': ['fakeuser', 'testing'],
            'list_id': ['1'],
        })
        expected = {
            'result_code': 0,
            'result_message': 'Contact Email Address is not valid.',
            'result_output': 'json'
        }
        self.assertEqual(result, expected)
def create_message(subject, fromemail, fromname, reply2, priority, list_id,
                   text):
    """
    Create a text message

    Example:
        activecampaign_takehome create_message --subject 'Test Message' --fromemail '*****@*****.**' --fromname 'Test Sender 1' --reply2 '*****@*****.**' --priority 5 --list_id 1 --text 'This is a test message'
    """
    config = act.Config()
    resource = act.MessageResource(config)
    data = {
        'format': 'text',
        'textconstructor': 'editor',
        'subject': subject,
        'fromemail': fromemail,
        'fromname': fromname,
        'reply2': reply2,
        'priority': priority,
        'list_id': [list_id],
        'text': text,
    }
    json_data = resource.create(data=data)
    click.echo(pformat(json_data))
def test_contacts_init():
    config = act.Config()
    config.ACCOUNT = 'test-account'
    config.DOMAIN = 'api-us1.com'
    contacts_resource = act.ContactsResource(config)
    assert contacts_resource.base_url == 'https://test-account.api-us1.com'
def test_api_init():
    config = act.Config()
    config.ACCOUNT = 'test-account'
    config.DOMAIN = 'api-us1.com'
    api = act.Api(config)
    assert api.base_url == 'https://test-account.api-us1.com'
def test_configure():
    config = act.Config()
    assert config.DOMAIN == 'api-us1.com'
    assert config.API_OUTPUT == 'json'