authentik.sources.oauth.tests.test_type_github
GitHub Type tests
1"""GitHub Type tests""" 2 3from copy import copy 4 5from django.test import RequestFactory, TestCase 6from requests_mock import Mocker 7 8from authentik.lib.generators import generate_id 9from authentik.sources.oauth.models import OAuthSource 10from authentik.sources.oauth.types.github import ( 11 GitHubOAuth2Callback, 12 GitHubType, 13) 14 15# https://developer.github.com/v3/users/#get-the-authenticated-user 16GITHUB_USER = { 17 "login": "octocat", 18 "id": 1, 19 "node_id": "MDQ6VXNlcjE=", 20 "avatar_url": "https://github.com/images/error/octocat_happy.gif", 21 "gravatar_id": "", 22 "url": "https://api.github.com/users/octocat", 23 "html_url": "https://github.com/octocat", 24 "followers_url": "https://api.github.com/users/octocat/followers", 25 "following_url": "https://api.github.com/users/octocat/following{/other_user}", 26 "gists_url": "https://api.github.com/users/octocat/gists{/gist_id}", 27 "starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}", 28 "subscriptions_url": "https://api.github.com/users/octocat/subscriptions", 29 "organizations_url": "https://api.github.com/users/octocat/orgs", 30 "repos_url": "https://api.github.com/users/octocat/repos", 31 "events_url": "https://api.github.com/users/octocat/events{/privacy}", 32 "received_events_url": "https://api.github.com/users/octocat/received_events", 33 "type": "User", 34 "site_admin": False, 35 "name": "monalisa octocat", 36 "company": "GitHub", 37 "blog": "https://github.com/blog", 38 "location": "San Francisco", 39 "email": "octocat@github.com", 40 "hireable": False, 41 "bio": "There once was...", 42 "twitter_username": "monatheoctocat", 43 "public_repos": 2, 44 "public_gists": 1, 45 "followers": 20, 46 "following": 0, 47 "created_at": "2008-01-14T04:33:35Z", 48 "updated_at": "2008-01-14T04:33:35Z", 49 "private_gists": 81, 50 "total_private_repos": 100, 51 "owned_private_repos": 100, 52 "disk_usage": 10000, 53 "collaborators": 8, 54 "two_factor_authentication": True, 55 "plan": {"name": "Medium", "space": 400, "private_repos": 20, "collaborators": 0}, 56} 57 58 59class TestTypeGitHub(TestCase): 60 """OAuth Source tests""" 61 62 def setUp(self): 63 self.source = OAuthSource.objects.create( 64 name="test", 65 slug="test", 66 provider_type="github", 67 ) 68 self.factory = RequestFactory() 69 70 def test_enroll_context(self): 71 """Test GitHub Enrollment context""" 72 ak_context = GitHubType().get_base_user_properties( 73 source=self.source, info=GITHUB_USER, client=None, token={} 74 ) 75 self.assertEqual(ak_context["username"], GITHUB_USER["login"]) 76 self.assertEqual(ak_context["email"], GITHUB_USER["email"]) 77 self.assertEqual(ak_context["name"], GITHUB_USER["name"]) 78 79 def test_enroll_context_email(self): 80 """Test GitHub Enrollment context""" 81 email = generate_id() 82 user = copy(GITHUB_USER) 83 del user["email"] 84 with Mocker() as mocker: 85 mocker.get( 86 "https://api.github.com/user/emails", 87 json=[ 88 { 89 "primary": True, 90 "email": email, 91 } 92 ], 93 ) 94 token = { 95 "access_token": generate_id(), 96 "token_type": generate_id(), 97 } 98 callback = GitHubOAuth2Callback( 99 source=self.source, 100 request=self.factory.get("/"), 101 token=token, 102 ) 103 ak_context = GitHubType().get_base_user_properties( 104 source=self.source, info=user, client=callback.get_client(self.source), token=token 105 ) 106 self.assertEqual(ak_context["username"], GITHUB_USER["login"]) 107 self.assertEqual(ak_context["email"], email) 108 self.assertEqual(ak_context["name"], GITHUB_USER["name"])
GITHUB_USER =
{'login': 'octocat', 'id': 1, 'node_id': 'MDQ6VXNlcjE=', 'avatar_url': 'https://github.com/images/error/octocat_happy.gif', 'gravatar_id': '', 'url': 'https://api.github.com/users/octocat', 'html_url': 'https://github.com/octocat', 'followers_url': 'https://api.github.com/users/octocat/followers', 'following_url': 'https://api.github.com/users/octocat/following{/other_user}', 'gists_url': 'https://api.github.com/users/octocat/gists{/gist_id}', 'starred_url': 'https://api.github.com/users/octocat/starred{/owner}{/repo}', 'subscriptions_url': 'https://api.github.com/users/octocat/subscriptions', 'organizations_url': 'https://api.github.com/users/octocat/orgs', 'repos_url': 'https://api.github.com/users/octocat/repos', 'events_url': 'https://api.github.com/users/octocat/events{/privacy}', 'received_events_url': 'https://api.github.com/users/octocat/received_events', 'type': 'User', 'site_admin': False, 'name': 'monalisa octocat', 'company': 'GitHub', 'blog': 'https://github.com/blog', 'location': 'San Francisco', 'email': 'octocat@github.com', 'hireable': False, 'bio': 'There once was...', 'twitter_username': 'monatheoctocat', 'public_repos': 2, 'public_gists': 1, 'followers': 20, 'following': 0, 'created_at': '2008-01-14T04:33:35Z', 'updated_at': '2008-01-14T04:33:35Z', 'private_gists': 81, 'total_private_repos': 100, 'owned_private_repos': 100, 'disk_usage': 10000, 'collaborators': 8, 'two_factor_authentication': True, 'plan': {'name': 'Medium', 'space': 400, 'private_repos': 20, 'collaborators': 0}}
class
TestTypeGitHub(django.test.testcases.TestCase):
60class TestTypeGitHub(TestCase): 61 """OAuth Source tests""" 62 63 def setUp(self): 64 self.source = OAuthSource.objects.create( 65 name="test", 66 slug="test", 67 provider_type="github", 68 ) 69 self.factory = RequestFactory() 70 71 def test_enroll_context(self): 72 """Test GitHub Enrollment context""" 73 ak_context = GitHubType().get_base_user_properties( 74 source=self.source, info=GITHUB_USER, client=None, token={} 75 ) 76 self.assertEqual(ak_context["username"], GITHUB_USER["login"]) 77 self.assertEqual(ak_context["email"], GITHUB_USER["email"]) 78 self.assertEqual(ak_context["name"], GITHUB_USER["name"]) 79 80 def test_enroll_context_email(self): 81 """Test GitHub Enrollment context""" 82 email = generate_id() 83 user = copy(GITHUB_USER) 84 del user["email"] 85 with Mocker() as mocker: 86 mocker.get( 87 "https://api.github.com/user/emails", 88 json=[ 89 { 90 "primary": True, 91 "email": email, 92 } 93 ], 94 ) 95 token = { 96 "access_token": generate_id(), 97 "token_type": generate_id(), 98 } 99 callback = GitHubOAuth2Callback( 100 source=self.source, 101 request=self.factory.get("/"), 102 token=token, 103 ) 104 ak_context = GitHubType().get_base_user_properties( 105 source=self.source, info=user, client=callback.get_client(self.source), token=token 106 ) 107 self.assertEqual(ak_context["username"], GITHUB_USER["login"]) 108 self.assertEqual(ak_context["email"], email) 109 self.assertEqual(ak_context["name"], GITHUB_USER["name"])
OAuth Source tests
def
setUp(self):
63 def setUp(self): 64 self.source = OAuthSource.objects.create( 65 name="test", 66 slug="test", 67 provider_type="github", 68 ) 69 self.factory = RequestFactory()
Hook method for setting up the test fixture before exercising it.
def
test_enroll_context(self):
71 def test_enroll_context(self): 72 """Test GitHub Enrollment context""" 73 ak_context = GitHubType().get_base_user_properties( 74 source=self.source, info=GITHUB_USER, client=None, token={} 75 ) 76 self.assertEqual(ak_context["username"], GITHUB_USER["login"]) 77 self.assertEqual(ak_context["email"], GITHUB_USER["email"]) 78 self.assertEqual(ak_context["name"], GITHUB_USER["name"])
Test GitHub Enrollment context
def
test_enroll_context_email(self):
80 def test_enroll_context_email(self): 81 """Test GitHub Enrollment context""" 82 email = generate_id() 83 user = copy(GITHUB_USER) 84 del user["email"] 85 with Mocker() as mocker: 86 mocker.get( 87 "https://api.github.com/user/emails", 88 json=[ 89 { 90 "primary": True, 91 "email": email, 92 } 93 ], 94 ) 95 token = { 96 "access_token": generate_id(), 97 "token_type": generate_id(), 98 } 99 callback = GitHubOAuth2Callback( 100 source=self.source, 101 request=self.factory.get("/"), 102 token=token, 103 ) 104 ak_context = GitHubType().get_base_user_properties( 105 source=self.source, info=user, client=callback.get_client(self.source), token=token 106 ) 107 self.assertEqual(ak_context["username"], GITHUB_USER["login"]) 108 self.assertEqual(ak_context["email"], email) 109 self.assertEqual(ak_context["name"], GITHUB_USER["name"])
Test GitHub Enrollment context