问题描述
当用户使用socialAccount(在我的情况下为Google)进行注册时,我有一个user_signed_up
信号,用于测试用户是否使用了socialAccount进行了注册,如果他们这样做了,则它将socialAccount实例中的数据与用户模型实例。
作为pytest的一部分,我如何使用socialAccount方法创建用户?
信号定义为:
import logging
from allauth.account.signals import user_signed_up
from django.contrib.auth import get_user_model
from django.dispatch import receiver
User = get_user_model()
logger = logging.getLogger("email_app.apps.users")
@receiver(user_signed_up,sender=User,dispatch_uid="apps.users.signals")
def associate_social_data_with_user_model(user,**kwargs):
if user.socialaccount_set.filter(provider='google').count() < 1:
logger.info(f"social account single sign on not used. user signed up the old fashioned way. {user = }")
else:
extra_data = user.socialaccount_set.filter(provider='google')[0].extra_data
user.name = extra_data['given_name']
user.save()
解决方法
看看allauth.tests.MockedResponse
的基础知识,尤其是allauth.socialaccount.providers.google.tests.GoogleTests.test_user_signed_up_signal
。简而言之:信号机制已经在那里进行了测试,您可以使用该测试用例,并使用针对您的数据的测试对其进行扩展。