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

139 lines
5.0 KiB
Python

import json
from django.test.client import RequestFactory
from django.test.utils import override_settings
from django.urls import reverse
from allauth.account import app_settings as account_settings
from allauth.account.models import EmailAddress
from allauth.socialaccount.models import SocialAccount
from allauth.socialaccount.tests import OAuth2TestsMixin
from allauth.tests import MockedResponse, TestCase, patch
from allauth.utils import get_user_model
from .provider import FacebookProvider
@override_settings(
SOCIALACCOUNT_AUTO_SIGNUP=True,
ACCOUNT_SIGNUP_FORM_CLASS=None,
LOGIN_REDIRECT_URL="/accounts/profile/",
ACCOUNT_EMAIL_VERIFICATION=account_settings.EmailVerificationMethod.NONE,
SOCIALACCOUNT_PROVIDERS={"facebook": {"AUTH_PARAMS": {}, "VERIFIED_EMAIL": False}},
)
class FacebookTests(OAuth2TestsMixin, TestCase):
provider_id = FacebookProvider.id
facebook_data = """
{
"id": "630595557",
"name": "Raymond Penners",
"first_name": "Raymond",
"last_name": "Penners",
"email": "raymond.penners@example.com",
"link": "https://www.facebook.com/raymond.penners",
"username": "raymond.penners",
"birthday": "07/17/1973",
"work": [
{
"employer": {
"id": "204953799537777",
"name": "IntenCT"
}
}
],
"timezone": 1,
"locale": "nl_NL",
"verified": true,
"updated_time": "2012-11-30T20:40:33+0000"
}"""
def get_mocked_response(self, data=None):
if data is None:
data = self.facebook_data
return MockedResponse(200, data)
def test_username_conflict(self):
User = get_user_model()
User.objects.create(username="raymond.penners")
self.login(self.get_mocked_response())
socialaccount = SocialAccount.objects.get(uid="630595557")
self.assertEqual(socialaccount.user.username, "raymond")
def test_username_based_on_provider(self):
self.login(self.get_mocked_response())
socialaccount = SocialAccount.objects.get(uid="630595557")
self.assertEqual(socialaccount.user.username, "raymond.penners")
def test_username_based_on_provider_with_simple_name(self):
data = '{"id": "1234567", "name": "Harvey McGillicuddy"}'
self.login(self.get_mocked_response(data=data))
socialaccount = SocialAccount.objects.get(uid="1234567")
self.assertEqual(socialaccount.user.username, "harvey")
@override_settings(
SOCIALACCOUNT_PROVIDERS={
"facebook": {
"METHOD": "js_sdk",
}
},
)
def test_media_js(self):
request = RequestFactory().get(reverse("account_login"))
request.session = {}
script = self.provider.media_js(request)
self.assertTrue('"appId": "app123id"' in script)
def test_login_by_token(self):
resp = self.client.get(reverse("account_login"))
with patch(
"allauth.socialaccount.providers.facebook.views.requests"
) as requests_mock:
mocks = [self.get_mocked_response().json()]
requests_mock.get.return_value.json = lambda: mocks.pop()
resp = self.client.post(
reverse("facebook_login_by_token"),
data={"access_token": "dummy"},
)
self.assertRedirects(
resp, "/accounts/profile/", fetch_redirect_response=False
)
@override_settings(
SOCIALACCOUNT_PROVIDERS={
"facebook": {
"METHOD": "js_sdk",
"AUTH_PARAMS": {"auth_type": "reauthenticate"},
"VERIFIED_EMAIL": False,
}
}
)
def test_login_by_token_reauthenticate(self):
resp = self.client.get(reverse("account_login"))
nonce = json.loads(resp.context["fb_data"])["loginOptions"]["auth_nonce"]
with patch(
"allauth.socialaccount.providers.facebook.views.requests"
) as requests_mock:
mocks = [self.get_mocked_response().json(), {"auth_nonce": nonce}]
requests_mock.get.return_value.json = lambda: mocks.pop()
resp = self.client.post(
reverse("facebook_login_by_token"),
data={"access_token": "dummy"},
)
self.assertRedirects(
resp, "/accounts/profile/", fetch_redirect_response=False
)
@override_settings(SOCIALACCOUNT_PROVIDERS={"facebook": {"VERIFIED_EMAIL": True}})
def test_login_verified(self):
emailaddress = self._login_verified()
self.assertTrue(emailaddress.verified)
def test_login_unverified(self):
emailaddress = self._login_verified()
self.assertFalse(emailaddress.verified)
def _login_verified(self):
self.login(self.get_mocked_response())
return EmailAddress.objects.get(email="raymond.penners@example.com")