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