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

133 lines
5.2 KiB
Python

from unittest import expectedFailure
from django.test import override_settings
from django.urls import reverse
from openid.consumer import consumer
from allauth.socialaccount.models import SocialAccount
from allauth.tests import Mock, TestCase, patch
from allauth.utils import get_user_model
from . import views
from .utils import AXAttribute
class OpenIDTests(TestCase):
def test_discovery_failure(self):
"""
This used to generate a server 500:
DiscoveryFailure: No usable OpenID services found
for http://www.google.com/
"""
resp = self.client.post(
reverse("openid_login"), dict(openid="http://www.google.com")
)
self.assertTrue("openid" in resp.context["form"].errors)
@expectedFailure
def test_login(self):
# Location: https://s.yimg.com/wm/mbr/html/openid-eol-0.0.1.html
resp = self.client.post(
reverse(views.login), dict(openid="http://me.yahoo.com")
)
assert "login.yahooapis" in resp["location"]
with patch(
"allauth.socialaccount.providers.openid.views._openid_consumer"
) as consumer_mock:
client = Mock()
complete = Mock()
consumer_mock.return_value = client
client.complete = complete
complete_response = Mock()
complete.return_value = complete_response
complete_response.status = consumer.SUCCESS
complete_response.identity_url = "http://dummy/john/"
with patch(
"allauth.socialaccount.providers.openid.utils.SRegResponse"
) as sr_mock:
with patch(
"allauth.socialaccount.providers.openid.utils.FetchResponse"
) as fr_mock:
sreg_mock = Mock()
ax_mock = Mock()
sr_mock.fromSuccessResponse = sreg_mock
fr_mock.fromSuccessResponse = ax_mock
sreg_mock.return_value = {}
ax_mock.return_value = {AXAttribute.PERSON_FIRST_NAME: ["raymond"]}
resp = self.client.post(reverse("openid_callback"))
self.assertRedirects(
resp,
"/accounts/profile/",
fetch_redirect_response=False,
)
get_user_model().objects.get(first_name="raymond")
@expectedFailure
@override_settings(
SOCIALACCOUNT_PROVIDERS={
"openid": {
"SERVERS": [
dict(
id="yahoo",
name="Yahoo",
openid_url="http://me.yahoo.com",
extra_attributes=[
(
"phone",
"http://axschema.org/contact/phone/default",
True,
)
],
)
]
}
}
)
def test_login_with_extra_attributes(self):
with patch("allauth.socialaccount.providers.openid.views.QUERY_EMAIL", True):
resp = self.client.post(
reverse(views.login), dict(openid="http://me.yahoo.com")
)
assert "login.yahooapis" in resp["location"]
with patch(
"allauth.socialaccount.providers.openid.views._openid_consumer"
) as consumer_mock:
client = Mock()
complete = Mock()
endpoint = Mock()
consumer_mock.return_value = client
client.complete = complete
complete_response = Mock()
complete.return_value = complete_response
complete_response.endpoint = endpoint
complete_response.endpoint.server_url = "http://me.yahoo.com"
complete_response.status = consumer.SUCCESS
complete_response.identity_url = "http://dummy/john/"
with patch(
"allauth.socialaccount.providers.openid.utils.SRegResponse"
) as sr_mock:
with patch(
"allauth.socialaccount.providers.openid.utils.FetchResponse"
) as fr_mock:
sreg_mock = Mock()
ax_mock = Mock()
sr_mock.fromSuccessResponse = sreg_mock
fr_mock.fromSuccessResponse = ax_mock
sreg_mock.return_value = {}
ax_mock.return_value = {
AXAttribute.CONTACT_EMAIL: ["raymond@example.com"],
AXAttribute.PERSON_FIRST_NAME: ["raymond"],
"http://axschema.org/contact/phone/default": ["123456789"],
}
resp = self.client.post(reverse("openid_callback"))
self.assertRedirects(
resp,
"/accounts/profile/",
fetch_redirect_response=False,
)
socialaccount = SocialAccount.objects.get(
user__first_name="raymond"
)
self.assertEqual(socialaccount.extra_data.get("phone"), "123456789")