Skip to content

Commit 64df364

Browse files
committed
Added more tests for Client. Fixed a few bugs in the client for sending POST OAuth requests.
1 parent 8b4d4b8 commit 64df364

File tree

2 files changed

+56
-18
lines changed

2 files changed

+56
-18
lines changed

oauth/__init__.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -563,8 +563,11 @@ def set_signature_method(method):
563563
def request(self, uri, method="GET", body=None, headers=None,
564564
redirections=httplib2.DEFAULT_MAX_REDIRECTS, connection_type=None):
565565

566+
if not isinstance(headers, dict):
567+
headers = {}
568+
566569
if body and method == "POST":
567-
parameters = urlparse.parse_qs(body)
570+
parameters = dict(urlparse.parse_qsl(body))
568571
elif method == "GET":
569572
parsed = urlparse.urlparse(uri)
570573
parameters = urlparse.parse_qs(parsed.query)
@@ -578,12 +581,10 @@ def request(self, uri, method="GET", body=None, headers=None,
578581

579582
if method == "POST":
580583
body = req.to_postdata()
584+
headers['Content-Type'] = 'application/x-www-form-urlencoded'
581585
elif method == "GET":
582586
uri = req.to_url()
583587
else:
584-
if headers is None:
585-
headers = {}
586-
587588
headers.update(req.to_header())
588589

589590
return httplib2.Http.request(self, uri, method=method, body=body,
@@ -651,7 +652,7 @@ def sign(self, request, consumer, token):
651652
try:
652653
import hashlib # 2.5
653654
hashed = hmac.new(key, raw, hashlib.sha1)
654-
except:
655+
except ImportError:
655656
import sha # Deprecated
656657
hashed = hmac.new(key, raw, sha)
657658

tests/test_oauth.py

Lines changed: 50 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import time
2828
import urllib
2929
import urlparse
30-
import cgi
3130

3231
class TestError(unittest.TestCase):
3332
def test_message(self):
@@ -76,18 +75,27 @@ def test_gen_timestamp(self):
7675
self.assertEqual(exp, now)
7776

7877
class TestConsumer(unittest.TestCase):
78+
def setUp(self):
79+
self.key = 'my-key'
80+
self.secret = 'my-secret'
81+
self.consumer = oauth.Consumer(key=self.key, secret=self.secret)
82+
7983
def test_init(self):
80-
key = 'my-key'
81-
secret = 'my-secret'
82-
consumer = oauth.Consumer(key, secret)
83-
self.assertEqual(consumer.key, key)
84-
self.assertEqual(consumer.secret, secret)
84+
self.assertEqual(self.consumer.key, self.key)
85+
self.assertEqual(self.consumer.secret, self.secret)
8586

8687
def test_basic(self):
8788
self.assertRaises(ValueError, lambda: oauth.Consumer(None, None))
8889
self.assertRaises(ValueError, lambda: oauth.Consumer('asf', None))
8990
self.assertRaises(ValueError, lambda: oauth.Consumer(None, 'dasf'))
9091

92+
def test_str(self):
93+
res = dict(urlparse.parse_qsl(str(self.consumer)))
94+
self.assertTrue('oauth_consumer_key' in res)
95+
self.assertTrue('oauth_consumer_secret' in res)
96+
self.assertEquals(res['oauth_consumer_key'], self.consumer.key)
97+
self.assertEquals(res['oauth_consumer_secret'], self.consumer.secret)
98+
9199
class TestToken(unittest.TestCase):
92100
def setUp(self):
93101
self.key = 'my-key'
@@ -420,7 +428,7 @@ def test_from_request(self):
420428
qs = urllib.urlencode(params)
421429
req = oauth.Request.from_request("GET", url, query_string=qs)
422430

423-
exp = cgi.parse_qs(qs, keep_blank_values=False)
431+
exp = urlparse.parse_qs(qs, keep_blank_values=False)
424432
for k, v in exp.iteritems():
425433
exp[k] = urllib.unquote(v[0])
426434

@@ -669,30 +677,59 @@ class TestClient(unittest.TestCase):
669677
consumer_secret = '0e9e6413a9ef49510a4f68ed02cd'
670678
host = 'http://oauth-sandbox.sevengoslings.net'
671679

672-
# host = "http://term.ie/oauth/example"
673-
# consumer_key = 'key'
674-
# consumer_secret = 'secret'
675-
676680
def setUp(self):
677681
self.consumer = oauth.Consumer(key=self.consumer_key,
678682
secret=self.consumer_secret)
679683

684+
self.body = {
685+
'foo': 'bar',
686+
'bar': 'foo',
687+
'blah': 599999
688+
}
689+
680690
def _uri(self, type):
681691
uri = self.oauth_uris.get(type)
682692
if uri is None:
683693
raise KeyError("%s is not a valid OAuth URI type." % type)
684694

685695
return "%s%s" % (self.host, uri)
686696

687-
def test_get_access_token(self):
697+
def test_access_token_get(self):
698+
"""Test getting an access token via GET."""
688699
client = oauth.Client(self.consumer, None)
689700
resp, content = client.request(self._uri('request_token'), "GET")
690701

691702
self.assertEquals(int(resp['status']), 200)
692703

693-
def test_get_access_token(self):
704+
def test_access_token_post(self):
705+
"""Test getting an access token via POST."""
694706
client = oauth.Client(self.consumer, None)
695707
resp, content = client.request(self._uri('request_token'), "POST")
708+
print resp
709+
print content
696710

697711
self.assertEquals(int(resp['status']), 200)
698712

713+
res = dict(urlparse.parse_qsl(content))
714+
self.assertTrue('oauth_token_key' in res)
715+
self.assertTrue('oauth_token_secret' in res)
716+
717+
def _two_legged(self, method):
718+
client = oauth.Client(self.consumer, None)
719+
720+
return client.request(self._uri('two_legged'), method,
721+
body=urllib.urlencode(self.body))
722+
723+
def test_two_legged_post(self):
724+
"""A test of a two-legged OAuth POST request."""
725+
resp, content = self._two_legged("POST")
726+
print resp
727+
print content
728+
729+
self.assertEquals(int(resp['status']), 200)
730+
731+
def test_two_legged_get(self):
732+
"""A test of a two-legged OAuth GET request."""
733+
resp, content = self._two_legged("GET")
734+
self.assertEquals(int(resp['status']), 200)
735+

0 commit comments

Comments
 (0)