Fix Bug 4010 - API method to register does not return authentification token (#4092)
* Return auth token key on register without email verification When email verification is turned off using all-auth settings, then on registration, return the auth token key. * Add tests for user registration without email verification * Add test case for user registration when email confirmation is manadatory * Refactor register api tests and add its docstring * updated the license header for iam tests * Add pull request link to changelog * Add comment to explain overriding of ROOT_URLConf * Refactor tests for user registration Split the test case for user registration without email verification into two test cases by overriding ACCOUNT_EMAIL_VERIFICATION as 'none' and 'optional' * Fix doc string * updated changelog Co-authored-by: karthik <gkraja@mindkosh.com> Co-authored-by: Andrey Zhavoronkov <andrey.zhavoronkov@intel.com>main
parent
7a7b4b1391
commit
566eb2aaa5
@ -0,0 +1,72 @@
|
||||
# Copyright (C) 2021 Intel Corporation
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
from django.urls import reverse
|
||||
from rest_framework import status
|
||||
from rest_framework.test import APITestCase
|
||||
from rest_framework.authtoken.models import Token
|
||||
from django.test import override_settings
|
||||
from cvat.apps.iam.urls import urlpatterns as iam_url_patterns
|
||||
from django.urls import path, re_path
|
||||
from allauth.account.views import ConfirmEmailView, EmailVerificationSentView
|
||||
|
||||
|
||||
urlpatterns = iam_url_patterns + [
|
||||
re_path(r'^account-confirm-email/(?P<key>[-:\w]+)/$', ConfirmEmailView.as_view(),
|
||||
name='account_confirm_email'),
|
||||
path('register/account-email-verification-sent', EmailVerificationSentView.as_view(),
|
||||
name='account_email_verification_sent'),
|
||||
]
|
||||
|
||||
|
||||
class UserRegisterAPITestCase(APITestCase):
|
||||
|
||||
user_data = {'first_name': 'test_first', 'last_name': 'test_last', 'username': 'test_username',
|
||||
'email': 'test_email@test.com', 'password1': '$Test357Test%', 'password2': '$Test357Test%',
|
||||
'confirmations': []}
|
||||
|
||||
def _run_api_v1_user_register(self, data):
|
||||
url = reverse('rest_register')
|
||||
response = self.client.post(url, data, format='json')
|
||||
return response
|
||||
|
||||
def _check_response(self, response, data):
|
||||
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
|
||||
self.assertEqual(response.data, data)
|
||||
|
||||
@override_settings(ACCOUNT_EMAIL_VERIFICATION='none')
|
||||
def test_api_v1_user_register_with_email_verification_none(self):
|
||||
"""
|
||||
Ensure we can register a user and get auth token key when email verification is none
|
||||
"""
|
||||
response = self._run_api_v1_user_register(self.user_data)
|
||||
user_token = Token.objects.get(user__username=response.data['username'])
|
||||
self._check_response(response, {'first_name': 'test_first', 'last_name': 'test_last',
|
||||
'username': 'test_username', 'email': 'test_email@test.com',
|
||||
'email_verification_required': False, 'key': user_token.key})
|
||||
|
||||
# Since URLConf is executed before running the tests, so we have to manually configure the url patterns for
|
||||
# the tests and pass it using ROOT_URLCONF in the override settings decorator
|
||||
|
||||
@override_settings(ACCOUNT_EMAIL_VERIFICATION='optional', ROOT_URLCONF=__name__)
|
||||
def test_api_v1_user_register_with_email_verification_optional(self):
|
||||
"""
|
||||
Ensure we can register a user and get auth token key when email verification is optional
|
||||
"""
|
||||
response = self._run_api_v1_user_register(self.user_data)
|
||||
user_token = Token.objects.get(user__username=response.data['username'])
|
||||
self._check_response(response, {'first_name': 'test_first', 'last_name': 'test_last',
|
||||
'username': 'test_username', 'email': 'test_email@test.com',
|
||||
'email_verification_required': False, 'key': user_token.key})
|
||||
|
||||
@override_settings(ACCOUNT_EMAIL_REQUIRED=True, ACCOUNT_EMAIL_VERIFICATION='mandatory',
|
||||
EMAIL_BACKEND='django.core.mail.backends.console.EmailBackend', ROOT_URLCONF=__name__)
|
||||
def test_register_account_with_email_verification_mandatory(self):
|
||||
"""
|
||||
Ensure we can register a user and it does not return auth token key when email verification is mandatory
|
||||
"""
|
||||
response = self._run_api_v1_user_register(self.user_data)
|
||||
self._check_response(response, {'first_name': 'test_first', 'last_name': 'test_last',
|
||||
'username': 'test_username', 'email': 'test_email@test.com',
|
||||
'email_verification_required': True, 'key': None})
|
||||
Loading…
Reference in New Issue