django - 如何创建用于测试目的的 django-allauth 常规和社交帐户?

标签 django unit-testing django-allauth

managed to create a regular user使用 Django-allauth 登录时发生的情况.

我一直在尝试为社交帐户(Github)做同样的事情,但我真的很挣扎。我想这里一定有人为了测试目的而必须创建一个社交帐户。谁能展示一下他们是如何做到的?

此外,如果您知道创建普通用户的更好方法,我们将不胜感激。

最佳答案

以下来自 django-allauth tests 的片段展示了如何做到这一点:

from allauth.account import app_settings as account_settings
from allauth.account.models import EmailAddress
from allauth.account.utils import user_email
from allauth.socialaccount.helpers import complete_social_login
from allauth.socialaccount.models import SocialApp, SocialAccount, SocialLogin
from allauth.utils import get_user_model
from django.contrib.auth.models import AnonymousUser
from django.contrib.auth.models import User
from django.contrib.messages.middleware import MessageMiddleware
from django.contrib.sessions.middleware import SessionMiddleware
from django.test import TestCase
from django.test.client import Client
from django.test.client import RequestFactory
from django.test.utils import override_settings


class SocialAccountTests(TestCase):

    @override_settings(
        SOCIALACCOUNT_AUTO_SIGNUP=True,
        ACCOUNT_SIGNUP_FORM_CLASS=None,
        ACCOUNT_EMAIL_VERIFICATION=account_settings.EmailVerificationMethod.NONE  # noqa
    )
    def test_email_address_created(self):
        factory = RequestFactory()
        request = factory.get('/accounts/login/callback/')
        request.user = AnonymousUser()
        SessionMiddleware().process_request(request)
        MessageMiddleware().process_request(request)

        User = get_user_model()
        user = User()
        setattr(user, account_settings.USER_MODEL_USERNAME_FIELD, 'test')
        setattr(user, account_settings.USER_MODEL_EMAIL_FIELD, 'test@test.com')

        account = SocialAccount(user=user, provider='openid', uid='123')
        sociallogin = SocialLogin(account)
        complete_social_login(request, sociallogin)

        user = User.objects.get(
            **{account_settings.USER_MODEL_USERNAME_FIELD: 'test'}
        )
        self.assertTrue(
            SocialAccount.objects.filter(user=user, uid=account.uid).exists()
        )
        self.assertTrue(
            EmailAddress.objects.filter(user=user,
                                        email=user_email(user)).exists()
        )

关于django - 如何创建用于测试目的的 django-allauth 常规和社交帐户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21414095/

相关文章:

python - 如何使用 Django ORM 计算从出生年份到注册日期的用户年龄

python - 属性错误 : 'RegexURLPattern' object has no attribute '_callback'

python - 如何使用 CSS 自定义 ModelForm - Django

django - 如何在基于类的 View django 中过滤对象

node.js - authenticateUser 的单元测试 - aws-cognito-identity-js - sinon/proxyquire

django - Allauth - 如何禁用社交帐户的重置密码?

c++ - 是否可以将 TDD 与图像处理算法一起使用?

java - 如何注入(inject)java.io.File然后设置其名称

django - 阻止 django-allauth 在确认电子邮件上登录

python - django-allauth 社交帐户在登录时连接到现有帐户