Fixhancement: better handle removed social apps in profile (#9876)

This commit is contained in:
shamoon 2025-05-11 12:55:33 -07:00 committed by GitHub
parent a61f5ac64c
commit 73f0f1212d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 36 additions and 2 deletions

View File

@ -136,6 +136,36 @@ class TestApiProfile(DirectoriesMixin, APITestCase):
],
)
def test_profile_w_social_removed_app(self):
"""
GIVEN:
- Configured user and setup social account
- Social app has been removed
WHEN:
- API call is made to get profile
THEN:
- Profile is returned with "Unknown App" as name
"""
self.setupSocialAccount()
# Remove the social app
SocialApp.objects.get(provider_id="keycloak-test").delete()
response = self.client.get(self.ENDPOINT)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(
response.data["social_accounts"],
[
{
"id": 1,
"provider": "keycloak-test",
"name": "Unknown App",
},
],
)
def test_update_profile(self):
"""
GIVEN:

View File

@ -4,6 +4,7 @@ from allauth.mfa.adapter import get_adapter as get_mfa_adapter
from allauth.mfa.models import Authenticator
from allauth.mfa.totp.internal.auth import TOTP
from allauth.socialaccount.models import SocialAccount
from allauth.socialaccount.models import SocialApp
from django.contrib.auth.models import Group
from django.contrib.auth.models import Permission
from django.contrib.auth.models import User
@ -146,8 +147,11 @@ class SocialAccountSerializer(serializers.ModelSerializer):
"name",
)
def get_name(self, obj) -> str:
def get_name(self, obj: SocialAccount) -> str:
try:
return obj.get_provider_account().to_str()
except SocialApp.DoesNotExist:
return "Unknown App"
class ProfileSerializer(serializers.ModelSerializer):