Skip to content

Commit 05f174e

Browse files
committed
Add test
1 parent d37cfd4 commit 05f174e

File tree

2 files changed

+91
-48
lines changed

2 files changed

+91
-48
lines changed

cvat/apps/engine/tests/test_rest_api.py

Lines changed: 34 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -80,31 +80,40 @@
8080
logging.getLogger("libav").setLevel(logging.ERROR)
8181

8282

83-
def create_db_users(cls):
84-
(group_admin, _) = Group.objects.get_or_create(name="admin")
85-
(group_user, _) = Group.objects.get_or_create(name="user")
86-
(group_annotator, _) = Group.objects.get_or_create(name="worker")
87-
(group_somebody, _) = Group.objects.get_or_create(name="somebody")
88-
89-
user_admin = User.objects.create_superuser(username="admin", email="", password="admin")
90-
user_admin.groups.add(group_admin)
91-
user_owner = User.objects.create_user(username="user1", password="user1")
92-
user_owner.groups.add(group_user)
93-
user_assignee = User.objects.create_user(username="user2", password="user2")
94-
user_assignee.groups.add(group_annotator)
95-
user_annotator = User.objects.create_user(username="user3", password="user3")
96-
user_annotator.groups.add(group_annotator)
97-
user_somebody = User.objects.create_user(username="user4", password="user4")
98-
user_somebody.groups.add(group_somebody)
99-
user_dummy = User.objects.create_user(username="user5", password="user5")
100-
user_dummy.groups.add(group_user)
101-
102-
cls.admin = user_admin
103-
cls.owner = cls.user1 = user_owner
104-
cls.assignee = cls.user2 = user_assignee
105-
cls.annotator = cls.user3 = user_annotator
106-
cls.somebody = cls.user4 = user_somebody
107-
cls.user = cls.user5 = user_dummy
83+
def create_db_users(
84+
cls: type[ApiTestBase],
85+
*,
86+
admin: bool = True,
87+
primary: bool = True,
88+
extra: bool = True,
89+
):
90+
if admin:
91+
(group_admin, _) = Group.objects.get_or_create(name="admin")
92+
user_admin = User.objects.create_superuser(username="admin", email="", password="admin")
93+
user_admin.groups.add(group_admin)
94+
cls.admin = user_admin
95+
96+
if primary:
97+
(group_user, _) = Group.objects.get_or_create(name="user")
98+
(group_annotator, _) = Group.objects.get_or_create(name="worker")
99+
user_owner = User.objects.create_user(username="user1", password="user1")
100+
user_owner.groups.add(group_user)
101+
user_assignee = User.objects.create_user(username="user2", password="user2")
102+
user_assignee.groups.add(group_annotator)
103+
user_annotator = User.objects.create_user(username="user3", password="user3")
104+
user_annotator.groups.add(group_annotator)
105+
cls.owner = cls.user1 = user_owner
106+
cls.assignee = cls.user2 = user_assignee
107+
cls.annotator = cls.user3 = user_annotator
108+
109+
if extra:
110+
(group_somebody, _) = Group.objects.get_or_create(name="somebody")
111+
user_somebody = User.objects.create_user(username="user4", password="user4")
112+
user_somebody.groups.add(group_somebody)
113+
user_dummy = User.objects.create_user(username="user5", password="user5")
114+
user_dummy.groups.add(group_user)
115+
cls.somebody = cls.user4 = user_somebody
116+
cls.user = cls.user5 = user_dummy
108117

109118

110119
def create_db_task(data):

cvat/apps/iam/tests/test_rest_api.py

Lines changed: 57 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,18 @@
44
# SPDX-License-Identifier: MIT
55

66
from allauth.account.views import EmailVerificationSentView
7+
from django.contrib.auth.models import User
78
from django.test import override_settings
89
from django.urls import path, re_path, reverse
910
from rest_framework import status
1011
from rest_framework.authtoken.models import Token
11-
from rest_framework.test import APIClient, APITestCase
1212

13-
from cvat.apps.iam.urls import urlpatterns as iam_url_patterns
13+
from cvat.apps.engine.tests.test_rest_api import create_db_users
14+
from cvat.apps.engine.tests.utils import ApiTestBase
15+
from cvat.urls import urlpatterns as original_urlpatterns
1416
from cvat.apps.iam.views import ConfirmEmailViewEx
1517

16-
urlpatterns = iam_url_patterns + [
18+
urlpatterns = original_urlpatterns + [
1719
re_path(
1820
r"^account-confirm-email/(?P<key>[-:\w]+)/$",
1921
ConfirmEmailViewEx.as_view(),
@@ -27,24 +29,7 @@
2729
]
2830

2931

30-
class ForceLogin:
31-
def __init__(self, user, client):
32-
self.user = user
33-
self.client = client
34-
35-
def __enter__(self):
36-
if self.user:
37-
self.client.force_login(self.user, backend="django.contrib.auth.backends.ModelBackend")
38-
39-
return self
40-
41-
def __exit__(self, exception_type, exception_value, traceback):
42-
if self.user:
43-
self.client.logout()
44-
45-
46-
class UserRegisterAPITestCase(APITestCase):
47-
32+
class UserRegisterAPITestCase(ApiTestBase):
4833
user_data = {
4934
"first_name": "test_first",
5035
"last_name": "test_last",
@@ -55,8 +40,10 @@ class UserRegisterAPITestCase(APITestCase):
5540
"confirmations": [],
5641
}
5742

58-
def setUp(self):
59-
self.client = APIClient()
43+
@classmethod
44+
def setUpTestData(cls):
45+
# create only admin account
46+
create_db_users(cls, primary=False, extra=False)
6047

6148
def _run_api_v2_user_register(self, data):
6249
url = reverse("rest_register")
@@ -130,3 +117,50 @@ def test_register_account_with_email_verification_mandatory(self):
130117
"key": None,
131118
},
132119
)
120+
121+
@override_settings(
122+
ACCOUNT_EMAIL_REQUIRED=True,
123+
ACCOUNT_EMAIL_VERIFICATION="mandatory",
124+
EMAIL_BACKEND="django.core.mail.backends.console.EmailBackend",
125+
ROOT_URLCONF=__name__,
126+
)
127+
def test_register_account_with_different_email_case_than_in_invitation(self):
128+
"""
129+
Ensure a user can log in to the account after being invited to an organization
130+
and then registering with the same email but in a different case.
131+
"""
132+
org_slug = "testorg"
133+
response = self._post_request(
134+
"/api/organizations", self.admin, data={"slug": org_slug, "name": "Test organization"}
135+
)
136+
self.assertTrue(response.status_code == status.HTTP_201_CREATED)
137+
response = self._post_request(
138+
"/api/invitations",
139+
self.admin,
140+
data={"role": "worker", "email": self.user_data["email"].upper()},
141+
query_params={"org": org_slug},
142+
)
143+
self.assertTrue(response.status_code == status.HTTP_201_CREATED)
144+
145+
response = self._run_api_v2_user_register(self.user_data)
146+
self._check_response(
147+
response,
148+
{
149+
"first_name": "test_first",
150+
"last_name": "test_last",
151+
"username": "test_username",
152+
"email": "[email protected]",
153+
"email_verification_required": True,
154+
"key": None,
155+
},
156+
)
157+
invited_db_user = User.objects.get(email=self.user_data["email"])
158+
self.assertTrue(invited_db_user.emailaddress_set.update(verified=True))
159+
response = self.client.post(
160+
"/api/auth/login",
161+
format="json",
162+
data={"email": self.user_data["email"], "password": self.user_data["password1"]},
163+
)
164+
self.assertTrue(response.status_code == status.HTTP_200_OK)
165+
self.assertIn("sessionid", response.cookies)
166+
self.assertIn("csrftoken", response.cookies)

0 commit comments

Comments
 (0)