From 18b492d1dbd06de163f20e711505dac2f6c3e3b8 Mon Sep 17 00:00:00 2001 From: juanifioren Date: Tue, 11 Aug 2015 15:59:57 -0300 Subject: [PATCH] Add tests for userinfo claims. --- oidc_provider/tests/app/settings.py | 1 + oidc_provider/tests/app/utils.py | 23 ++++++++++++++++ oidc_provider/tests/test_userinfo_endpoint.py | 26 +++++++++++++++++-- 3 files changed, 48 insertions(+), 2 deletions(-) diff --git a/oidc_provider/tests/app/settings.py b/oidc_provider/tests/app/settings.py index 4cbfc39..1d436f0 100644 --- a/oidc_provider/tests/app/settings.py +++ b/oidc_provider/tests/app/settings.py @@ -58,3 +58,4 @@ TEMPLATE_DIRS = ( SITE_URL = 'http://localhost:8000' OIDC_RSA_KEY_FOLDER = os.path.dirname(__file__) +OIDC_USERINFO = 'oidc_provider.tests.app.utils.FakeUserInfo' diff --git a/oidc_provider/tests/app/utils.py b/oidc_provider/tests/app/utils.py index 0155787..dbb1980 100644 --- a/oidc_provider/tests/app/utils.py +++ b/oidc_provider/tests/app/utils.py @@ -8,6 +8,7 @@ from oidc_provider.models import * FAKE_NONCE = 'cb584e44c43ed6bd0bc2d9c7e242837d' + def create_fake_user(): """ Create a test user. @@ -23,6 +24,7 @@ def create_fake_user(): return user + def create_fake_client(response_type): """ Create a test client, response_type argument MUST be: @@ -41,6 +43,7 @@ def create_fake_client(response_type): return client + def is_code_valid(url, user, client): """ Check if the code inside the url is valid. @@ -56,3 +59,23 @@ def is_code_valid(url, user, client): is_code_ok = False return is_code_ok + + +class FakeUserInfo(object): + + given_name = 'John' + family_name = 'Doe' + nickname = 'johndoe' + website = 'http://johndoe.com' + + phone_number = '+49-89-636-48018' + phone_number_verified = True + + address_street_address = 'Evergreen 742' + address_locality = 'Glendive' + address_region = 'Montana' + address_country = 'United States' + + @classmethod + def get_by_user(cls, user): + return cls() diff --git a/oidc_provider/tests/test_userinfo_endpoint.py b/oidc_provider/tests/test_userinfo_endpoint.py index 95e7635..a68e011 100644 --- a/oidc_provider/tests/test_userinfo_endpoint.py +++ b/oidc_provider/tests/test_userinfo_endpoint.py @@ -22,7 +22,7 @@ class UserInfoTestCase(TestCase): self.user = create_fake_user() self.client = create_fake_client(response_type='code') - def _create_token(self): + def _create_token(self, extra_scope=[]): """ Generate a valid token. """ @@ -33,7 +33,7 @@ class UserInfoTestCase(TestCase): user=self.user, client=self.client, id_token_dic=id_token_dic, - scope=['openid', 'email']) + scope=['openid', 'email'] + extra_scope) token.save() return token @@ -114,3 +114,25 @@ class UserInfoTestCase(TestCase): self.assertEqual(response.status_code, 200) self.assertEqual(bool(response.content), True) + + def test_user_claims_in_response(self): + token = self._create_token(extra_scope=['profile']) + response = self._post_request(token.access_token) + response_dic = json.loads(response.content.decode('utf-8')) + + self.assertEqual(response.status_code, 200) + self.assertEqual(bool(response.content), True) + self.assertEqual('given_name' in response_dic, True, + msg='"given_name" claim should be in response.') + self.assertEqual('profile' in response_dic, False, + msg='"profile" claim should not be in response.') + + # Now adding `address` scope. + token = self._create_token(extra_scope=['profile', 'address']) + response = self._post_request(token.access_token) + response_dic = json.loads(response.content.decode('utf-8')) + + self.assertEqual('address' in response_dic, True, + msg='"address" claim should be in response.') + self.assertEqual('country' in response_dic['address'], True, + msg='"country" claim should be in response.')