Skip to content
This repository was archived by the owner on Aug 7, 2024. It is now read-only.

Commit f80a893

Browse files
committed
fix issue with utf8 for encoding url params
adds tests for in/out friendships
1 parent b9442e2 commit f80a893

File tree

6 files changed

+48
-17
lines changed

6 files changed

+48
-17
lines changed

requirements.testing.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,5 @@ check-manifest
1616
tox
1717
tox-pyenv
1818
pycodestyle
19+
20+
hypothesis
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"previous_cursor_str": "0", "next_cursor": 0, "previous_cursor": 0, "ids": [12], "next_cursor_str": "0"}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"previous_cursor_str": "0", "next_cursor": 0, "previous_cursor": 0, "ids": [12], "next_cursor_str": "0"}

tests/test_api_30.py

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -580,7 +580,7 @@ def testGetFavorites(self):
580580
resp_data = f.read()
581581
responses.add(GET, DEFAULT_URL, body=resp_data)
582582

583-
resp = self.api.GetFavorites()
583+
resp = self.api.GetFavorites(user_id=12, count=1, since_id=10, max_id=200)
584584
self.assertTrue(type(resp) is list)
585585
fav = resp[0]
586586
self.assertEqual(fav.id, 677180133447372800)
@@ -1294,7 +1294,6 @@ def testGetStatuses(self):
12941294
resp = self.api.GetStatuses(status_ids)
12951295

12961296
self.assertTrue(type(resp) is list)
1297-
print(resp)
12981297
self.assertEqual(set(respitem.id for respitem in resp), set(status_ids))
12991298
self.assertFalse(resp != resp)
13001299

@@ -1736,3 +1735,21 @@ def test_get_retweets_of_me(self):
17361735
self.assertRaises(
17371736
twitter.TwitterError,
17381737
lambda: self.api.GetRetweetsOfMe(count='asdf'))
1738+
1739+
@responses.activate
1740+
def test_incoming_friendships(self):
1741+
with open('testdata/get_incoming_friendships.json') as f:
1742+
responses.add(GET, DEFAULT_URL, f.read())
1743+
resp = self.api.IncomingFriendship(cursor=1, stringify_ids=True)
1744+
assert resp
1745+
assert isinstance(resp, list)
1746+
assert resp[0] == 12
1747+
1748+
@responses.activate
1749+
def test_outgoing_friendships(self):
1750+
with open('testdata/get_outgoing_friendships.json') as f:
1751+
responses.add(GET, DEFAULT_URL, f.read())
1752+
resp = self.api.OutgoingFriendship(cursor=1, stringify_ids=True)
1753+
assert resp
1754+
assert isinstance(resp, list)
1755+
assert resp[0] == 12

tests/test_unicode.py

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88
import warnings
99

1010
import responses
11+
12+
from hypothesis import given, example
13+
from hypothesis import strategies as st
14+
1115
import twitter
1216

1317
warnings.filterwarnings('ignore', category=DeprecationWarning)
@@ -41,19 +45,22 @@ def tearDown(self):
4145
sys.stderr = self._stderr
4246
pass
4347

44-
def test_trend_repr1(self):
48+
@given(text=st.text())
49+
@example(text="#نفسك_تبيع_ايه_للسعوديه")
50+
def test_trend_repr1(self, text):
4551
trend = twitter.Trend(
46-
name="#نفسك_تبيع_ايه_للسعوديه",
52+
name=text,
4753
url="http://twitter.com/search?q=%23ChangeAConsonantSpoilAMovie",
4854
timestamp='whatever')
4955
try:
5056
trend.__repr__()
5157
except Exception as e:
5258
self.fail(e)
5359

54-
def test_trend_repr2(self):
60+
@given(text=st.text())
61+
@example(text="#N\u00e3oD\u00eaUnfTagueirosSdv")
62+
def test_trend_repr2(self, text):
5563
trend = twitter.Trend(
56-
name="#N\u00e3oD\u00eaUnfTagueirosSdv",
5764
url='http://twitter.com/search?q=%23ChangeAConsonantSpoilAMovie',
5865
timestamp='whatever')
5966

@@ -72,23 +79,25 @@ def test_trend_repr3(self):
7279

7380
resp = self.api.GetTrendsCurrent()
7481
for r in resp:
75-
print(r.__str__())
7682
try:
7783
r.__repr__()
7884
except Exception as e:
7985
self.fail(e)
8086

87+
@given(text=st.text())
8188
@responses.activate
82-
def test_unicode_get_search(self):
89+
def test_unicode_get_search(self, text):
8390
responses.add(responses.GET, DEFAULT_URL, body=b'{}', status=200)
8491
try:
85-
self.api.GetSearch(term="#ابشري_قابوس_جاء")
92+
self.api.GetSearch(term=text)
8693
except Exception as e:
8794
self.fail(e)
8895

89-
def test_constructed_status(self):
96+
@given(text=st.text())
97+
@example(text='可以倒着飞的飞机')
98+
def test_constructed_status(self, text):
9099
s = twitter.Status()
91-
s.text = "可以倒着飞的飞机"
100+
s.text = text
92101
s.created_at = "016-02-13T23:00:00"
93102
s.screen_name = "himawari8bot"
94103
s.id = 1
@@ -101,8 +110,3 @@ def test_post_with_bytes_string(self):
101110
status = 'x'
102111
length = twitter.twitter_utils.calc_expected_status_length(status)
103112
assert length == 1
104-
105-
106-
if __name__ == "__main__":
107-
suite = unittest.TestLoader().loadTestsFromTestCase(ApiTest)
108-
unittest.TextTestRunner(verbosity=2).run(suite)

twitter/api.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4868,7 +4868,13 @@ def _EncodeParameters(parameters):
48684868
if not isinstance(parameters, dict):
48694869
raise TwitterError("`parameters` must be a dict.")
48704870
else:
4871-
return urlencode(dict((k, v) for k, v in parameters.items() if v is not None))
4871+
params = dict()
4872+
for k, v in parameters.items():
4873+
if v is not None:
4874+
if getattr(v, 'encode', None):
4875+
v = v.encode('utf8')
4876+
params.update({k: v})
4877+
return urlencode(params)
48724878

48734879
def _ParseAndCheckTwitter(self, json_data):
48744880
"""Try and parse the JSON returned from Twitter and return

0 commit comments

Comments
 (0)