Skip to content

Commit 9d1f759

Browse files
committed
Add unittest for userinfo endpoint. Disabled until upstream PR merged.
1 parent d21c373 commit 9d1f759

File tree

2 files changed

+62
-0
lines changed

2 files changed

+62
-0
lines changed

bottle_oauthlib/oauth2.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -293,3 +293,28 @@ def wrapper(*args, **kwargs):
293293
return bottle.response
294294
return wrapper
295295
return decorator
296+
297+
def create_userinfo_response(self):
298+
def decorator(f):
299+
@functools.wraps(f)
300+
def wrapper(*args, **kwargs):
301+
assert self._oauthlib, "BottleOAuth2 not initialized with OAuthLib"
302+
303+
uri, http_method, body, headers = extract_params(bottle.request)
304+
305+
try:
306+
resp_headers, resp_body, resp_status = self._oauthlib.create_userinfo_response(
307+
uri, http_method=http_method, body=body, headers=headers
308+
)
309+
except OAuth2Error as e:
310+
resp_headers, resp_body, resp_status = e.headers, e.json, e.status_code
311+
312+
set_response(bottle.request, bottle.response, resp_status, resp_headers,
313+
resp_body, force_json=True)
314+
315+
func_response = f(*args, **kwargs)
316+
if func_response:
317+
return func_response
318+
return bottle.response
319+
return wrapper
320+
return decorator

tests/test_oauth2.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from oauthlib.oauth2 import LegacyApplicationServer
99
from tests import AttrDict
1010
from unittest import mock
11+
import unittest
1112

1213

1314
class test_not_initialized(ServerTestBase):
@@ -47,6 +48,15 @@ def test(): return 'bar'
4748
with self.assertRaises(AssertionError):
4849
test()
4950

51+
@unittest.skip("remove skip once https://github.com/oauthlib/oauthlib/pull/677 merged")
52+
def test_create_userinfo_response(self):
53+
@self.app.route('/foo')
54+
@self.oauth.create_userinfo_response()
55+
def test(): return 'bar'
56+
57+
with self.assertRaises(AssertionError):
58+
test()
59+
5060

5161
class test_verify_decorators(ServerTestBase):
5262
def setUp(self):
@@ -168,6 +178,33 @@ def test(): return "{'valid': false}"
168178
mocked.assert_called_once()
169179

170180

181+
class test_create_userinfo_decorators(ServerTestBase):
182+
def setUp(self):
183+
super().setUp()
184+
self.oauth = BottleOAuth2(self.app)
185+
self.validator = mock.MagicMock()
186+
self.server = Server(self.validator)
187+
self.oauth.initialize(self.server)
188+
189+
self.fake_response = ({
190+
"Content-Type": "application/json"
191+
}, "{'sub': 'johndoe123', 'foo': 'bar'}", "200 FooOK")
192+
193+
@unittest.skip("remove skip once https://github.com/oauthlib/oauthlib/pull/677 merged")
194+
def test_valid_response(self):
195+
@self.app.route('/foo')
196+
@self.oauth.create_userinfo_response()
197+
def test(): return None
198+
199+
with mock.patch("oauthlib.oauth2.Server.create_userinfo_response", return_value=self.fake_response) as mocked:
200+
app_response = self.urlopen("/foo")
201+
self.assertEqual(app_response['code'], 200)
202+
self.assertEqual(app_response['status'], "FooOK")
203+
self.assertEqual(app_response['body'], tob("{'valid': true, 'foo': 'bar'}"))
204+
self.assertEqual(app_response['header']['Content-Type'], "application/json")
205+
mocked.assert_called_once()
206+
207+
171208
class test_create_authorization_decorators(ServerTestBase):
172209
def setUp(self):
173210
super().setUp()

0 commit comments

Comments
 (0)