From 826c2742753be126dffff701eb0eda966b5849cf Mon Sep 17 00:00:00 2001 From: Ib Lundgren Date: Mon, 2 Jul 2012 23:27:48 +0200 Subject: More client tests --- tests/oauth2/draft25/test_client.py | 211 +++++++++++++++++++++++++++++++++++- 1 file changed, 210 insertions(+), 1 deletion(-) diff --git a/tests/oauth2/draft25/test_client.py b/tests/oauth2/draft25/test_client.py index 90dbed5..26742de 100644 --- a/tests/oauth2/draft25/test_client.py +++ b/tests/oauth2/draft25/test_client.py @@ -4,7 +4,7 @@ from ...unittest import TestCase from oauthlib.oauth2.draft25 import Client, PasswordCredentialsClient from oauthlib.oauth2.draft25 import UserAgentClient, WebApplicationClient -from oauthlib.oauth2.draft25 import NativeApplicationClient +from oauthlib.oauth2.draft25 import ClientCredentialsClient from oauthlib.oauth2.draft25 import AUTH_HEADER, URI_QUERY, BODY @@ -227,3 +227,212 @@ class WebApplicationClientTest(TestCase): # Mismatching state self.assertRaises(Warning, client.parse_request_body_response, self.token_json, scope=u"invalid") + + +class UserAgentClientTest(TestCase): + + client_id = u"someclientid" + uri = u"http://example.com/path?query=world" + uri_id = uri + u"&response_type=token&client_id=" + client_id + uri_redirect = uri_id + u"&redirect_uri=http%3A%2F%2Fmy.page.com%2Fcallback" + redirect_uri = u"http://my.page.com/callback" + scope = u"/profile" + state = u"xyz" + uri_scope = uri_id + u"&scope=%2Fprofile" + uri_state = uri_id + u"&state=" + state + kwargs = { + u"some": u"providers", + u"require": u"extra arguments" + } + uri_kwargs = uri_id + u"&some=providers&require=extra+arguments" + + code = u"zzzzaaaa" + + response_uri = (u'https://client.example.com/cb?#' + u'access_token=2YotnFZFEjr1zCsicMWpAA&' + u'token_type=example&' + u'expires_in=3600&' + u'scope=%2Fprofile&' + u'example_parameter=example_value') + token = { + u"access_token": u"2YotnFZFEjr1zCsicMWpAA", + u"token_type": u"example", + u"expires_in": u"3600", + u"scope": "/profile", + u"example_parameter": u"example_value" + } + + def test_implicit_token_uri(self): + client = UserAgentClient(self.client_id) + + # Basic, no extra arguments + uri = client.prepare_request_uri(self.uri) + self.assertEqual(uri, self.uri_id) + + # With redirection uri + uri = client.prepare_request_uri(self.uri, redirect_uri=self.redirect_uri) + self.assertEqual(uri, self.uri_redirect) + + rclient = UserAgentClient(self.client_id, + default_redirect_uri=self.redirect_uri) + uri = rclient.prepare_request_uri(self.uri) + self.assertEqual(uri, self.uri_redirect) + + # With scope + uri = client.prepare_request_uri(self.uri, scope=self.scope) + self.assertEqual(uri, self.uri_scope) + + # With state + uri = client.prepare_request_uri(self.uri, state=self.state) + self.assertEqual(uri, self.uri_state) + + # With extra parameters through kwargs, checking using len since order + # of dict items is undefined + rclient = UserAgentClient(self.client_id, + default_kwargs_uri=self.kwargs) + uri = rclient.prepare_request_uri(self.uri) + self.assertEqual(len(uri), len(self.uri_kwargs)) + uri = client.prepare_request_uri(self.uri, **self.kwargs) + self.assertEqual(len(uri), len(self.uri_kwargs)) + + def test_parse_token_response(self): + client = UserAgentClient(self.client_id) + + # Parse code and state + response = client.parse_request_uri_response(self.response_uri, scope=self.scope) + self.assertEqual(response, self.token) + self.assertEqual(client.access_token, response.get(u"access_token")) + self.assertEqual(client.refresh_token, response.get(u"refresh_token")) + self.assertEqual(client.token_type, response.get(u"token_type")) + + # Mismatching state + self.assertRaises(Warning, client.parse_request_uri_response, self.response_uri, scope=u"invalid") + + +class PasswordCredentialsClientTest(TestCase): + + client_id = u"someclientid" + scope = u"/profile" + kwargs = { + u"some": u"providers", + u"require": u"extra arguments" + } + + username = u"foo" + password = u"bar" + body = u"not=empty" + + body_up = u"not=empty&grant_type=password&username=%s&password=%s" % (username, password) + body_kwargs = body_up + u"&some=providers&require=extra+arguments" + + token_json = (u'{ "access_token":"2YotnFZFEjr1zCsicMWpAA",' + u' "token_type":"example",' + u' "expires_in":3600,' + u' "scope":"/profile",' + u' "refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA",' + u' "example_parameter":"example_value"}') + token = { + u"access_token": u"2YotnFZFEjr1zCsicMWpAA", + u"token_type": u"example", + u"expires_in": 3600, + u"scope": "/profile", + u"refresh_token": u"tGzv3JOkF0XG5Qx2TlKWIA", + u"example_parameter": u"example_value" + } + + def test_request_body(self): + client = PasswordCredentialsClient(self.client_id, + username=self.username, password=self.password) + + # Basic, no extra arguments + body = client.prepare_request_body(body=self.body) + self.assertEqual(body, self.body_up) + + rclient = PasswordCredentialsClient(self.client_id) + body = rclient.prepare_request_body(body=self.body, username=self.username, password=self.password) + self.assertEqual(body, self.body_up) + + # With extra parameters, checked using length since order of + # dict items is undefined + body = client.prepare_request_body(body=self.body, **self.kwargs) + self.assertEqual(len(body), len(self.body_kwargs)) + + rclient = PasswordCredentialsClient(self.client_id, username=self.username, + password=self.password, default_kwargs_body=self.kwargs) + body = rclient.prepare_request_body(body=self.body) + self.assertEqual(len(body), len(self.body_kwargs)) + + def test_parse_token_response(self): + client = PasswordCredentialsClient(self.client_id) + + # Parse code and state + response = client.parse_request_body_response(self.token_json, scope=self.scope) + self.assertEqual(response, self.token) + self.assertEqual(client.access_token, response.get(u"access_token")) + self.assertEqual(client.refresh_token, response.get(u"refresh_token")) + self.assertEqual(client.token_type, response.get(u"token_type")) + + # Mismatching state + self.assertRaises(Warning, client.parse_request_body_response, self.token_json, scope=u"invalid") + + +class ClientCredentialsClientTest(TestCase): + + client_id = u"someclientid" + scope = u"/profile" + kwargs = { + u"some": u"providers", + u"require": u"extra arguments" + } + + body = u"not=empty" + + body_up = u"not=empty&grant_type=client_credentials" + body_kwargs = body_up + u"&some=providers&require=extra+arguments" + + token_json = (u'{ "access_token":"2YotnFZFEjr1zCsicMWpAA",' + u' "token_type":"example",' + u' "expires_in":3600,' + u' "scope":"/profile",' + u' "example_parameter":"example_value"}') + token = { + u"access_token": u"2YotnFZFEjr1zCsicMWpAA", + u"token_type": u"example", + u"expires_in": 3600, + u"scope": "/profile", + u"example_parameter": u"example_value" + } + + def test_request_body(self): + client = ClientCredentialsClient(self.client_id) + + # Basic, no extra arguments + body = client.prepare_request_body(body=self.body) + self.assertEqual(body, self.body_up) + + rclient = ClientCredentialsClient(self.client_id) + body = rclient.prepare_request_body(body=self.body) + self.assertEqual(body, self.body_up) + + # With extra parameters, checked using length since order of + # dict items is undefined + body = client.prepare_request_body(body=self.body, **self.kwargs) + self.assertEqual(len(body), len(self.body_kwargs)) + + rclient = ClientCredentialsClient(self.client_id, + default_kwargs_body=self.kwargs) + body = rclient.prepare_request_body(body=self.body) + self.assertEqual(len(body), len(self.body_kwargs)) + + def test_parse_token_response(self): + client = ClientCredentialsClient(self.client_id) + + # Parse code and state + response = client.parse_request_body_response(self.token_json, scope=self.scope) + self.assertEqual(response, self.token) + self.assertEqual(client.access_token, response.get(u"access_token")) + self.assertEqual(client.refresh_token, response.get(u"refresh_token")) + self.assertEqual(client.token_type, response.get(u"token_type")) + + # Mismatching state + self.assertRaises(Warning, client.parse_request_body_response, self.token_json, scope=u"invalid") -- cgit v1.2.1