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

90 lines
2.7 KiB
Python

from urllib.parse import parse_qs, urlparse
from django.urls import reverse
from django.utils.http import urlencode
from allauth.socialaccount.tests import OAuth2TestsMixin
from allauth.tests import MockedResponse, TestCase, mocked_response
from .provider import NotionProvider
class NotionTests(OAuth2TestsMixin, TestCase):
provider_id = NotionProvider.id
pkce_enabled_default = False # Notion does not support PKCE.
def get_mocked_response(self):
return MockedResponse(
200,
"""
{
"workspace_id": "workspace-abc",
"owner": {
"user": {
"id": "test123",
"name": "John Doe",
"avatar_url": "",
"person": {"email": "john@example.com"},
}
},
}
""",
) # noqa
def get_login_response_json(self, with_refresh_token=False):
"""
Docs here:
https://developers.notion.com/docs/authorization#step-4-notion-responds-with-an-access_token-and-additional-information
"""
return """
{
"access_token": "test123",
"bot_id": "bot-abc",
"duplicated_template_id": "template-abc",
"owner": {
"workspace_id": "workspace-abc",
"user": {
"id": "test123",
"name": "John Doe",
"avatar_url": "",
"person": {
"email": "john@example.com"
}
}
},
"workspace_icon": "https://example.com/icon.png",
"workspace_id": "workspace-abc",
"workspace_name": "My Workspace"
}
"""
def login(self, resp_mock=None, process="login", with_refresh_token=True):
resp = self.client.post(
reverse(self.provider.id + "_login")
+ "?"
+ urlencode(dict(process=process))
)
p = urlparse(resp["location"])
q = parse_qs(p.query)
complete_url = reverse(self.provider.id + "_callback")
response_json = self.get_login_response_json(
with_refresh_token=with_refresh_token
)
if isinstance(resp_mock, list):
resp_mocks = resp_mock
elif resp_mock is None:
resp_mocks = []
else:
resp_mocks = [resp_mock]
with mocked_response(
MockedResponse(200, response_json, {"content-type": "application/json"}),
*resp_mocks,
):
resp = self.client.get(complete_url, self.get_complete_parameters(q))
return resp