ConceptPortal-public/rsconcept/backend/apps/users/tests/t_views.py

193 lines
6.1 KiB
Python
Raw Normal View History

''' Testing API: users. '''
2024-05-24 18:31:14 +03:00
from rest_framework.test import APIClient, APITestCase
2023-07-15 17:46:19 +03:00
from apps.rsform.tests.EndpointTester import EndpointTester, decl_endpoint
2024-05-24 18:31:14 +03:00
from apps.users.models import User
2023-07-15 17:46:19 +03:00
class TestUserAPIViews(EndpointTester):
''' Testing Authentication views. '''
2023-07-15 17:46:19 +03:00
def setUp(self):
2024-07-15 12:36:18 +03:00
super().setUpFullUsers()
2023-07-15 17:46:19 +03:00
@decl_endpoint('/users/api/login', method='post')
2023-07-15 17:46:19 +03:00
def test_login(self):
self.logout()
data = {'username': self.user.username, 'password': 'invalid'}
self.executeBadData(data)
data = {'username': self.user.username, 'password': 'password'}
self.executeAccepted(data)
self.executeAccepted(data)
2024-05-28 15:29:35 +03:00
self.logout()
data = {'username': self.user.email, 'password': 'password'}
self.executeAccepted(data)
2023-07-15 17:46:19 +03:00
@decl_endpoint('/users/api/logout', method='post')
2023-07-15 17:46:19 +03:00
def test_logout(self):
self.logout()
self.executeForbidden()
2023-07-15 17:46:19 +03:00
self.login()
self.executeNoContent()
self.executeNoContent()
2023-07-15 17:46:19 +03:00
@decl_endpoint('/users/api/auth', method='get')
2023-08-26 17:26:49 +03:00
def test_auth(self):
response = self.executeOK()
self.assertEqual(response.data['id'], self.user.pk)
self.assertEqual(response.data['username'], self.user.username)
self.assertEqual(response.data['is_staff'], self.user.is_staff)
self.assertEqual(response.data['subscriptions'], [])
2024-06-03 01:17:27 +03:00
self.assertEqual(response.data['editor'], [])
self.logout()
response = self.executeOK()
2023-08-26 17:26:49 +03:00
self.assertEqual(response.data['id'], None)
self.assertEqual(response.data['username'], '')
self.assertEqual(response.data['is_staff'], False)
self.assertEqual(response.data['subscriptions'], [])
2024-06-03 01:17:27 +03:00
self.assertEqual(response.data['editor'], [])
2023-08-26 17:26:49 +03:00
class TestUserUserProfileAPIView(EndpointTester):
''' Testing User profile views. '''
2023-07-15 17:46:19 +03:00
def setUp(self):
2024-07-15 12:36:18 +03:00
super().setUpFullUsers()
self.user.first_name = 'John'
self.user.second_name = 'Smith'
2023-07-15 17:46:19 +03:00
self.user.save()
@decl_endpoint('/users/api/profile', method='get')
2023-07-15 17:46:19 +03:00
def test_read_profile(self):
response = self.executeOK()
self.assertEqual(response.data['username'], self.user.username)
self.assertEqual(response.data['email'], self.user.email)
self.assertEqual(response.data['first_name'], self.user.first_name)
self.assertEqual(response.data['last_name'], self.user.last_name)
self.logout()
self.executeForbidden()
@decl_endpoint('/users/api/profile', method='patch')
def test_edit_profile(self):
2023-09-25 14:17:52 +03:00
data = {
2023-07-28 18:23:37 +03:00
'email': '123@mail.ru',
'first_name': 'firstName',
'last_name': 'lastName',
2023-09-25 14:17:52 +03:00
}
response = self.executeOK(data)
self.user.refresh_from_db()
2023-07-28 18:23:37 +03:00
self.assertEqual(response.data['email'], '123@mail.ru')
self.assertEqual(self.user.email, '123@mail.ru')
2023-07-28 18:23:37 +03:00
self.assertEqual(response.data['first_name'], 'firstName')
self.assertEqual(self.user.first_name, 'firstName')
2023-07-28 18:23:37 +03:00
self.assertEqual(response.data['last_name'], 'lastName')
self.assertEqual(self.user.last_name, 'lastName')
data = {
'email': data['email'],
'first_name': 'new',
'last_name': 'new2',
}
self.executeOK(data)
data = {'email': self.user2.email}
self.executeBadData(data)
self.logout()
self.executeForbidden()
2023-07-28 18:23:37 +03:00
2023-07-15 17:46:19 +03:00
@decl_endpoint('/users/api/change-password', method='patch')
2023-08-10 18:53:54 +03:00
def test_change_password(self):
2023-09-25 14:17:52 +03:00
data = {
'old_password': 'invalid',
'new_password': 'password2'
2023-09-25 14:17:52 +03:00
}
self.executeBadData(data)
2023-08-10 18:53:54 +03:00
data = {
'old_password': 'password',
'new_password': 'password2'
}
2023-08-10 18:53:54 +03:00
oldHash = self.user.password
response = self.executeNoContent(data)
2023-08-10 18:53:54 +03:00
self.user.refresh_from_db()
self.assertNotEqual(self.user.password, oldHash)
self.assertTrue(self.client.login(username=self.user.username, password='password2'))
self.assertFalse(self.client.login(username=self.user.username, password='password'))
2023-08-10 18:53:54 +03:00
self.logout()
self.executeForbidden()
@decl_endpoint('/users/api/password-reset', method='post')
2024-02-25 20:55:30 +03:00
def test_password_reset_request(self):
self.executeBadData({'email': 'invalid@mail.ru'})
self.executeOK({'email': self.user.email})
# TODO: check if mail server actually sent email and if reset procedure works
2024-02-25 20:55:30 +03:00
class TestSignupAPIView(EndpointTester):
''' Testing signup. '''
2023-07-15 17:46:19 +03:00
def setUp(self):
super().setUp()
2023-07-15 17:46:19 +03:00
@decl_endpoint('/users/api/signup', method='post')
2023-07-15 17:46:19 +03:00
def test_signup(self):
2023-09-25 14:17:52 +03:00
data = {
'username': 'NewUser',
'email': 'newMail@mail.ru',
'password': 'Test@@123',
'password2': 'Test@@123456',
'first_name': 'firstName',
'last_name': 'lastName'
}
self.executeBadData(data)
data = {
'username': 'NewUser',
'email': 'newMail@mail.ru',
2023-07-15 17:46:19 +03:00
'password': 'Test@@123',
'password2': 'Test@@123',
'first_name': 'firstName',
'last_name': 'lastName'
2023-09-25 14:17:52 +03:00
}
response = self.executeCreated(data)
2023-07-15 17:46:19 +03:00
self.assertTrue('id' in response.data)
self.assertEqual(response.data['username'], data['username'])
self.assertEqual(response.data['email'], data['email'])
self.assertEqual(response.data['first_name'], data['first_name'])
self.assertEqual(response.data['last_name'], data['last_name'])
data = {
'username': 'NewUser',
'email': 'newMail2@mail.ru',
'password': 'Test@@123',
'password2': 'Test@@123',
'first_name': 'firstName',
'last_name': 'lastName'
}
self.executeBadData(data)
data = {
'username': 'NewUser2',
'email': self.user.email,
'password': 'Test@@123',
'password2': 'Test@@123',
'first_name': 'firstName',
'last_name': 'lastName'
}
self.executeBadData(data)