Files
GNX-mailEnterprise/venv/lib/python3.12/site-packages/allauth/socialaccount/providers/gitlab/tests.py
Iliyan Angelov c67067a2a4 Mail
2025-09-14 23:24:25 +03:00

104 lines
3.6 KiB
Python

# -*- coding: utf-8 -*-
import json
from allauth.socialaccount.models import SocialAccount
from allauth.socialaccount.providers.gitlab.provider import GitLabProvider
from allauth.socialaccount.providers.oauth2.client import OAuth2Error
from allauth.socialaccount.tests import OAuth2TestsMixin
from allauth.tests import MockedResponse, TestCase
from .views import _check_errors
class GitLabTests(OAuth2TestsMixin, TestCase):
provider_id = GitLabProvider.id
_uid = 2
def get_mocked_response(self):
return MockedResponse(
200,
"""
{
"avatar_url": "https://secure.gravatar.com/avatar/123",
"bio": null,
"can_create_group": true,
"can_create_project": true,
"color_scheme_id": 5,
"confirmed_at": "2015-03-02T16:53:58.370Z",
"created_at": "2015-03-02T16:53:58.885Z",
"current_sign_in_at": "2018-06-12T18:44:49.985Z",
"email": "mr.bob@gitlab.example.com",
"external": false,
"id": 2,
"identities": [],
"last_activity_on": "2018-06-11",
"last_sign_in_at": "2018-05-31T14:59:44.527Z",
"linkedin": "",
"location": null,
"name": "Mr Bob",
"organization": null,
"projects_limit": 10,
"shared_runners_minutes_limit": 2000,
"skype": "",
"state": "active",
"theme_id": 6,
"twitter": "mrbob",
"two_factor_enabled": true,
"username": "mr.bob",
"web_url": "https://gitlab.example.com/u/mr.bob",
"website_url": ""
}
""",
)
def test_valid_response(self):
data = {"id": 12345}
response = MockedResponse(200, json.dumps(data))
self.assertEqual(_check_errors(response), data)
def test_invalid_data(self):
response = MockedResponse(200, json.dumps({}))
with self.assertRaises(OAuth2Error):
# No id, raises
_check_errors(response)
def test_account_invalid_response(self):
body = (
"403 Forbidden - You (@domain.com) must accept the Terms of "
"Service in order to perform this action. Please access GitLab "
"from a web browser to accept these terms."
)
response = MockedResponse(403, body)
# GitLab allow users to login with their API and provides
# an error requiring the user to accept the Terms of Service.
# see: https://gitlab.com/gitlab-org/gitlab-foss/-/issues/45849
with self.assertRaises(OAuth2Error):
# no id, 4xx code, raises
_check_errors(response)
def test_error_response(self):
body = "403 Forbidden"
response = MockedResponse(403, body)
with self.assertRaises(OAuth2Error):
# no id, 4xx code, raises
_check_errors(response)
def test_invalid_response(self):
response = MockedResponse(200, json.dumps({}))
with self.assertRaises(OAuth2Error):
# No id, raises
_check_errors(response)
def test_bad_response(self):
response = MockedResponse(400, json.dumps({}))
with self.assertRaises(OAuth2Error):
# bad json, raises
_check_errors(response)
def test_extra_data(self):
self.login(self.get_mocked_response())
account = SocialAccount.objects.get(uid=str(self._uid))
self.assertEqual(account.extra_data["id"], self._uid)