Skip to content

Commit 73c993a

Browse files
committed
Add test
1 parent d37cfd4 commit 73c993a

File tree

2 files changed

+88
-46
lines changed

2 files changed

+88
-46
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: 54 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@
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.engine.tests.test_rest_api import create_db_users
14+
from cvat.apps.engine.tests.utils import ApiTestBase
1315
from cvat.apps.iam.urls import urlpatterns as iam_url_patterns
1416
from cvat.apps.iam.views import ConfirmEmailViewEx
1517

@@ -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,49 @@ 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+
)
126+
def test_register_account_with_different_email_case_than_in_invitation(self):
127+
"""
128+
Ensure a user can log in to the account after being invited to an organization
129+
and then registering with the same email but in a different case.
130+
"""
131+
org_slug = "testorg"
132+
response = self._post_request(
133+
"/api/organizations", self.admin, data={"slug": org_slug, "name": "Test organization"}
134+
)
135+
self.assertTrue(response.status_code == status.HTTP_201_CREATED)
136+
response = self._post_request(
137+
"/api/invitations",
138+
self.admin,
139+
data={"role": "worker", "email": self.user_data["email"].upper()},
140+
query_params={"org": org_slug},
141+
)
142+
self.assertTrue(response.status_code == status.HTTP_201_CREATED)
143+
144+
response = self._run_api_v2_user_register(self.user_data)
145+
self._check_response(
146+
response,
147+
{
148+
"first_name": "test_first",
149+
"last_name": "test_last",
150+
"username": "test_username",
151+
"email": "[email protected]",
152+
"email_verification_required": True,
153+
"key": None,
154+
},
155+
)
156+
invited_db_user = User.objects.get(email=self.user_data["email"])
157+
self.assertTrue(invited_db_user.emailaddress_set.update(verified=True))
158+
response = self.client.post(
159+
"/api/auth/login",
160+
format="json",
161+
data={"email": self.user_data["email"], "password": self.user_data["password1"]},
162+
)
163+
self.assertTrue(response.status_code == status.HTTP_200_OK)
164+
self.assertIn("sessionid", response.cookies)
165+
self.assertIn("csrftoken", response.cookies)

0 commit comments

Comments
 (0)