-
Notifications
You must be signed in to change notification settings - Fork 697
/
test_sanity.py
190 lines (149 loc) · 6.15 KB
/
test_sanity.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
# encoding: utf-8
from __future__ import unicode_literals
import os
from random import choice
import time
import pickle
import json
from twitter import Twitter, NoAuth, OAuth, read_token_file, TwitterHTTPError
from twitter.api import TwitterDictResponse, TwitterListResponse, POST_ACTIONS, method_for_uri
from twitter.cmdline import CONSUMER_KEY, CONSUMER_SECRET
noauth = NoAuth()
oauth = OAuth(*read_token_file('tests/oauth_creds')
+ (CONSUMER_KEY, CONSUMER_SECRET))
twitter11 = Twitter(domain='api.twitter.com',
auth=oauth,
api_version='1.1')
twitter_upl = Twitter(domain='upload.twitter.com',
auth=oauth,
api_version='1.1')
twitter11_na = Twitter(domain='api.twitter.com',
auth=noauth,
api_version='1.1')
AZaz = "abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"
b64_image_data = b"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB94JFhMBAJv5kaUAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAA4UlEQVQoz7WSIZLGIAxG6c5OFZjianBcIOfgPkju1DsEBWfAUEcNGGpY8Xe7dDoVFRvHfO8NJGRorZE39UVe1nd/WNfVObcsi3OOEAIASikAmOf5D2q/FWPUWgshKKWfiFIqhNBaxxhPjPQ05/z+Bs557xw9hBC89ymlu5BS8t6HEC5NW2sR8alRRLTWXoRSSinlSejT12M9BAAAgCeoTw9BSimlfBIu6WdYtVZEVErdaaUUItZaL/9wOsaY83YAMMb0dGtt6Jdv3/ec87ZtOWdCCGNsmibG2DiOJzP8+7b+AAOmsiPxyHWCAAAAAElFTkSuQmCC"
def get_random_str():
return ''.join(choice(AZaz) for _ in range(10))
def test_API_set_tweet(unicod=False):
random_tweet = "A random tweet %s" % \
("with unicode üøπ" if unicod else "") + get_random_str()
twitter11.statuses.update(status=random_tweet)
time.sleep(5)
recent = twitter11.statuses.user_timeline()
assert recent
assert isinstance(recent.rate_limit_remaining, int)
assert isinstance(recent.rate_limit_reset, int)
texts = [tweet['text'] for tweet in recent]
assert random_tweet in texts
def test_API_set_unicode_tweet():
test_API_set_tweet(unicod=True)
def clean_link(text):
pos = text.find(" https://t.co")
if pos != -1:
return text[:pos]
return text
__location__ = os.path.realpath(
os.path.join(os.getcwd(), os.path.dirname(__file__)))
def _img_data():
return open(os.path.join(__location__, "test.png"), "rb").read()
def _test_API_old_media(img, _base64):
random_tweet = (
"A random twitpic with unicode üøπ"
+ get_random_str())
params = {"status": random_tweet, "media[]": img, "_base64": _base64}
twitter11.statuses.update_with_media(**params)
time.sleep(5)
recent = twitter11.statuses.user_timeline()
assert recent
texts = [clean_link(tweet['text']) for tweet in recent]
assert random_tweet in texts
def test_API_set_unicode_twitpic_base64():
_test_API_old_media(b64_image_data, True)
def test_API_set_unicode_twitpic_base64_string():
_test_API_old_media(b64_image_data.decode('utf-8'), True)
def test_API_set_unicode_twitpic_auto_base64_convert():
_test_API_old_media(_img_data(), False)
def _test_upload_media():
res = twitter_upl.media.upload(media=_img_data())
assert res
assert res["media_id"]
return str(res["media_id"])
def test_multitwitpic():
pics = [_test_upload_media(), _test_upload_media(), _test_upload_media()]
random_tweet = ("I can even tweet multiple pictures at once now! ★ "
+ get_random_str())
res = twitter11.statuses.update(status=random_tweet, media_ids=",".join(pics))
assert res
assert res["extended_entities"]
assert len(res["extended_entities"]["media"]) == len(pics)
recent = twitter11.statuses.user_timeline()
assert recent
texts = [clean_link(t['text']) for t in recent]
assert random_tweet in texts
def test_metadatapic():
pic = _test_upload_media()
metadata = "metadata generated via PTT! ★" + get_random_str()
res = twitter_upl.media.metadata.create(media_id=pic, text=metadata)
random_tweet = ("I can also tweet pictures with text metadata attached ★ "
+ get_random_str())
res = twitter11.statuses.update(status=random_tweet, media_ids=pic)
assert res
recent = twitter11.statuses.user_timeline(include_ext_alt_text=True, include_entities=True)
assert recent
meta = recent[0].get("extended_entities", {}).get("media")
assert meta
assert metadata == meta[0].get("ext_alt_text", "")
def test_search():
# In 1.1, search works on api.twitter.com not search.twitter.com
# and requires authorisation
results = twitter11.search.tweets(q='foo')
assert results
def test_get_trends():
# This is one method of inserting parameters, using named
# underscore params.
world_trends = twitter11.trends.available(_woeid=1)
assert world_trends
def test_get_trends_2():
# This is a nicer variation of the same call as above.
world_trends = twitter11.trends._(1)
assert world_trends
def test_get_trends_3():
# Of course they broke it all again in 1.1...
assert twitter11.trends.place(_id=1)
def test_TwitterHTTPError_raised_for_invalid_oauth():
test_passed = False
try:
twitter11_na.statuses.mentions_timeline()
except TwitterHTTPError:
# this is the error we are looking for :)
test_passed = True
assert test_passed
def test_picklability():
res = TwitterDictResponse({'a': 'b'})
p = pickle.dumps(res)
res2 = pickle.loads(p)
assert res == res2
assert res2['a'] == 'b'
res = TwitterListResponse([1, 2, 3])
p = pickle.dumps(res)
res2 = pickle.loads(p)
assert res == res2
assert res2[2] == 3
p = pickle.dumps(twitter11)
s = pickle.loads(p)
assert twitter11.domain == s.domain
def test_jsonifability():
res = TwitterDictResponse({'a': 'b'})
p = json.dumps(res)
res2 = json.loads(p)
assert res == res2
assert res2['a'] == 'b'
res = TwitterListResponse([1, 2, 3])
p = json.dumps(res)
res2 = json.loads(p)
assert res == res2
assert res2[2] == 3
def test_method_for_uri():
for action in POST_ACTIONS:
assert method_for_uri(get_random_str() + '/' + action) == 'POST'
assert method_for_uri('statuses/timeline') == 'GET'