authentik.sources.oauth.tests.test_type_google

google Type tests

 1"""google Type tests"""
 2
 3from django.test import TestCase
 4
 5from authentik.core.tests.utils import RequestFactory
 6from authentik.sources.oauth.models import OAuthSource
 7from authentik.sources.oauth.types.google import (
 8    GoogleOAuthRedirect,
 9    GoogleType,
10)
11
12# https://developers.google.com/identity/protocols/oauth2/openid-connect?hl=en
13GOOGLE_USER = {
14    "id": "1324813249123401234",
15    "email": "foo@bar.baz",
16    "verified_email": True,
17    "name": "foo bar",
18    "given_name": "foo",
19    "family_name": "bar",
20    "picture": "",
21    "locale": "en",
22}
23
24
25class TestTypeGoogle(TestCase):
26    """OAuth Source tests"""
27
28    def setUp(self):
29        self.source: OAuthSource = OAuthSource.objects.create(
30            name="test",
31            slug="test",
32            provider_type="google",
33            authorization_url="",
34            profile_url="",
35            consumer_key="foo",
36        )
37        self.request_factory = RequestFactory()
38
39    def test_enroll_context(self):
40        """Test Google Enrollment context"""
41        ak_context = GoogleType().get_base_user_properties(source=self.source, info=GOOGLE_USER)
42        self.assertEqual(ak_context["email"], GOOGLE_USER["email"])
43        self.assertEqual(ak_context["name"], GOOGLE_USER["name"])
44
45    def test_authorize_url(self):
46        """Test authorize URL"""
47        request = self.request_factory.get("/")
48        redirect = GoogleOAuthRedirect(request=request).get_redirect_url(
49            source_slug=self.source.slug
50        )
51        self.assertEqual(
52            redirect,
53            (
54                f"https://accounts.google.com/o/oauth2/auth?client_id={self.source.consumer_key}&re"
55                "direct_uri=http%3A%2F%2Ftestserver%2Fsource%2Foauth%2Fcallback%2Ftest%2F&response_"
56                f"type=code&state={request.session['oauth-client-test-request-state']}&scope="
57                "email%20profile"
58            ),
59        )
60
61    def test_authorize_url_additional(self):
62        """Test authorize URL"""
63        request = self.request_factory.get("/")
64        self.source.additional_scopes = "foo"
65        self.source.save()
66        redirect = GoogleOAuthRedirect(request=request).get_redirect_url(
67            source_slug=self.source.slug
68        )
69        self.assertEqual(
70            redirect,
71            (
72                f"https://accounts.google.com/o/oauth2/auth?client_id={self.source.consumer_key}&re"
73                "direct_uri=http%3A%2F%2Ftestserver%2Fsource%2Foauth%2Fcallback%2Ftest%2F&response_"
74                f"type=code&state={request.session['oauth-client-test-request-state']}&scope="
75                "email%20foo%20profile"
76            ),
77        )
78
79    def test_authorize_url_additional_replace(self):
80        """Test authorize URL"""
81        request = self.request_factory.get("/")
82        self.source.additional_scopes = "*foo"
83        self.source.save()
84        redirect = GoogleOAuthRedirect(request=request).get_redirect_url(
85            source_slug=self.source.slug
86        )
87        self.assertEqual(
88            redirect,
89            (
90                f"https://accounts.google.com/o/oauth2/auth?client_id={self.source.consumer_key}&re"
91                "direct_uri=http%3A%2F%2Ftestserver%2Fsource%2Foauth%2Fcallback%2Ftest%2F&response_"
92                f"type=code&state={request.session['oauth-client-test-request-state']}&scope="
93                "foo"
94            ),
95        )
GOOGLE_USER = {'id': '1324813249123401234', 'email': 'foo@bar.baz', 'verified_email': True, 'name': 'foo bar', 'given_name': 'foo', 'family_name': 'bar', 'picture': '', 'locale': 'en'}
class TestTypeGoogle(django.test.testcases.TestCase):
26class TestTypeGoogle(TestCase):
27    """OAuth Source tests"""
28
29    def setUp(self):
30        self.source: OAuthSource = OAuthSource.objects.create(
31            name="test",
32            slug="test",
33            provider_type="google",
34            authorization_url="",
35            profile_url="",
36            consumer_key="foo",
37        )
38        self.request_factory = RequestFactory()
39
40    def test_enroll_context(self):
41        """Test Google Enrollment context"""
42        ak_context = GoogleType().get_base_user_properties(source=self.source, info=GOOGLE_USER)
43        self.assertEqual(ak_context["email"], GOOGLE_USER["email"])
44        self.assertEqual(ak_context["name"], GOOGLE_USER["name"])
45
46    def test_authorize_url(self):
47        """Test authorize URL"""
48        request = self.request_factory.get("/")
49        redirect = GoogleOAuthRedirect(request=request).get_redirect_url(
50            source_slug=self.source.slug
51        )
52        self.assertEqual(
53            redirect,
54            (
55                f"https://accounts.google.com/o/oauth2/auth?client_id={self.source.consumer_key}&re"
56                "direct_uri=http%3A%2F%2Ftestserver%2Fsource%2Foauth%2Fcallback%2Ftest%2F&response_"
57                f"type=code&state={request.session['oauth-client-test-request-state']}&scope="
58                "email%20profile"
59            ),
60        )
61
62    def test_authorize_url_additional(self):
63        """Test authorize URL"""
64        request = self.request_factory.get("/")
65        self.source.additional_scopes = "foo"
66        self.source.save()
67        redirect = GoogleOAuthRedirect(request=request).get_redirect_url(
68            source_slug=self.source.slug
69        )
70        self.assertEqual(
71            redirect,
72            (
73                f"https://accounts.google.com/o/oauth2/auth?client_id={self.source.consumer_key}&re"
74                "direct_uri=http%3A%2F%2Ftestserver%2Fsource%2Foauth%2Fcallback%2Ftest%2F&response_"
75                f"type=code&state={request.session['oauth-client-test-request-state']}&scope="
76                "email%20foo%20profile"
77            ),
78        )
79
80    def test_authorize_url_additional_replace(self):
81        """Test authorize URL"""
82        request = self.request_factory.get("/")
83        self.source.additional_scopes = "*foo"
84        self.source.save()
85        redirect = GoogleOAuthRedirect(request=request).get_redirect_url(
86            source_slug=self.source.slug
87        )
88        self.assertEqual(
89            redirect,
90            (
91                f"https://accounts.google.com/o/oauth2/auth?client_id={self.source.consumer_key}&re"
92                "direct_uri=http%3A%2F%2Ftestserver%2Fsource%2Foauth%2Fcallback%2Ftest%2F&response_"
93                f"type=code&state={request.session['oauth-client-test-request-state']}&scope="
94                "foo"
95            ),
96        )

OAuth Source tests

def setUp(self):
29    def setUp(self):
30        self.source: OAuthSource = OAuthSource.objects.create(
31            name="test",
32            slug="test",
33            provider_type="google",
34            authorization_url="",
35            profile_url="",
36            consumer_key="foo",
37        )
38        self.request_factory = RequestFactory()

Hook method for setting up the test fixture before exercising it.

def test_enroll_context(self):
40    def test_enroll_context(self):
41        """Test Google Enrollment context"""
42        ak_context = GoogleType().get_base_user_properties(source=self.source, info=GOOGLE_USER)
43        self.assertEqual(ak_context["email"], GOOGLE_USER["email"])
44        self.assertEqual(ak_context["name"], GOOGLE_USER["name"])

Test Google Enrollment context

def test_authorize_url(self):
46    def test_authorize_url(self):
47        """Test authorize URL"""
48        request = self.request_factory.get("/")
49        redirect = GoogleOAuthRedirect(request=request).get_redirect_url(
50            source_slug=self.source.slug
51        )
52        self.assertEqual(
53            redirect,
54            (
55                f"https://accounts.google.com/o/oauth2/auth?client_id={self.source.consumer_key}&re"
56                "direct_uri=http%3A%2F%2Ftestserver%2Fsource%2Foauth%2Fcallback%2Ftest%2F&response_"
57                f"type=code&state={request.session['oauth-client-test-request-state']}&scope="
58                "email%20profile"
59            ),
60        )

Test authorize URL

def test_authorize_url_additional(self):
62    def test_authorize_url_additional(self):
63        """Test authorize URL"""
64        request = self.request_factory.get("/")
65        self.source.additional_scopes = "foo"
66        self.source.save()
67        redirect = GoogleOAuthRedirect(request=request).get_redirect_url(
68            source_slug=self.source.slug
69        )
70        self.assertEqual(
71            redirect,
72            (
73                f"https://accounts.google.com/o/oauth2/auth?client_id={self.source.consumer_key}&re"
74                "direct_uri=http%3A%2F%2Ftestserver%2Fsource%2Foauth%2Fcallback%2Ftest%2F&response_"
75                f"type=code&state={request.session['oauth-client-test-request-state']}&scope="
76                "email%20foo%20profile"
77            ),
78        )

Test authorize URL

def test_authorize_url_additional_replace(self):
80    def test_authorize_url_additional_replace(self):
81        """Test authorize URL"""
82        request = self.request_factory.get("/")
83        self.source.additional_scopes = "*foo"
84        self.source.save()
85        redirect = GoogleOAuthRedirect(request=request).get_redirect_url(
86            source_slug=self.source.slug
87        )
88        self.assertEqual(
89            redirect,
90            (
91                f"https://accounts.google.com/o/oauth2/auth?client_id={self.source.consumer_key}&re"
92                "direct_uri=http%3A%2F%2Ftestserver%2Fsource%2Foauth%2Fcallback%2Ftest%2F&response_"
93                f"type=code&state={request.session['oauth-client-test-request-state']}&scope="
94                "foo"
95            ),
96        )

Test authorize URL