mirror of
https://github.com/IRBorisov/ConceptPortal.git
synced 2025-06-26 04:50:36 +03:00
196 lines
7.0 KiB
Python
196 lines
7.0 KiB
Python
''' Testing views '''
|
|
from rest_framework.test import APIClient, APITestCase
|
|
|
|
from apps.rsform.models import LibraryItem, LibraryItemType
|
|
from apps.users.models import User
|
|
|
|
|
|
class TestUserAPIViews(APITestCase):
|
|
def setUp(self):
|
|
self.username = 'UserTest'
|
|
self.email = 'test@test.com'
|
|
self.password = 'password'
|
|
self.user = User.objects.create_user(
|
|
self.username, self.email, self.password
|
|
)
|
|
self.client = APIClient()
|
|
|
|
def test_login(self):
|
|
data = {'username': self.username, 'password': self.password}
|
|
response = self.client.post(
|
|
'/users/api/login',
|
|
data=data, format='json'
|
|
)
|
|
self.assertEqual(response.status_code, 202)
|
|
|
|
def test_logout(self):
|
|
self.assertEqual(self.client.post('/users/api/logout').status_code, 403)
|
|
|
|
self.client.force_login(user=self.user)
|
|
self.assertEqual(self.client.get('/users/api/logout').status_code, 405)
|
|
self.assertEqual(self.client.post('/users/api/logout').status_code, 204)
|
|
|
|
self.assertEqual(self.client.post('/users/api/logout').status_code, 403)
|
|
|
|
def test_auth(self):
|
|
LibraryItem.objects.create(item_type=LibraryItemType.RSFORM, title='T1')
|
|
item = LibraryItem.objects.create(
|
|
item_type=LibraryItemType.RSFORM,
|
|
title='Test',
|
|
alias='T1',
|
|
is_common=True,
|
|
owner=self.user
|
|
)
|
|
response = self.client.get('/users/api/auth')
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.data['id'], None)
|
|
self.assertEqual(response.data['username'], '')
|
|
self.assertEqual(response.data['is_staff'], False)
|
|
self.assertEqual(response.data['subscriptions'], [])
|
|
|
|
self.client.force_login(self.user)
|
|
response = self.client.get('/users/api/auth')
|
|
self.assertEqual(response.status_code, 200)
|
|
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'], [item.pk])
|
|
|
|
|
|
class TestUserUserProfileAPIView(APITestCase):
|
|
def setUp(self):
|
|
self.username = 'UserTest'
|
|
self.email = 'test@test.com'
|
|
self.password = 'password'
|
|
self.first_name = 'John'
|
|
self.user = User.objects.create_user(
|
|
self.username, self.email, self.password
|
|
)
|
|
self.user.first_name = self.first_name
|
|
self.user.save()
|
|
self.client = APIClient()
|
|
|
|
def test_read_profile(self):
|
|
self.assertEqual(self.client.get('/users/api/profile').status_code, 403)
|
|
self.client.force_login(user=self.user)
|
|
response = self.client.get('/users/api/profile')
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.data['username'], self.username)
|
|
self.assertEqual(response.data['email'], self.email)
|
|
self.assertEqual(response.data['first_name'], self.first_name)
|
|
self.assertEqual(response.data['last_name'], '')
|
|
|
|
def test_patch_profile(self):
|
|
self.client.force_login(user=self.user)
|
|
data = {
|
|
'email': '123@mail.ru',
|
|
'first_name': 'firstName',
|
|
'last_name': 'lastName',
|
|
}
|
|
response = self.client.patch(
|
|
'/users/api/profile',
|
|
data=data, format='json'
|
|
)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.data['email'], '123@mail.ru')
|
|
self.assertEqual(response.data['first_name'], 'firstName')
|
|
self.assertEqual(response.data['last_name'], 'lastName')
|
|
|
|
def test_edit_profile(self):
|
|
new_mail = 'newmail@gmail.com'
|
|
data = {'email': new_mail}
|
|
response = self.client.patch(
|
|
'/users/api/profile',
|
|
data=data, format='json'
|
|
)
|
|
self.assertEqual(response.status_code, 403)
|
|
|
|
self.client.force_login(user=self.user)
|
|
response = self.client.patch(
|
|
'/users/api/profile',
|
|
data=data, format='json'
|
|
)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.data['username'], self.username)
|
|
self.assertEqual(response.data['email'], new_mail)
|
|
|
|
def test_change_password(self):
|
|
newpassword = 'pw2'
|
|
data = {
|
|
'old_password': self.password,
|
|
'new_password': newpassword
|
|
}
|
|
response = self.client.patch(
|
|
'/users/api/change-password',
|
|
data=data, format='json'
|
|
)
|
|
self.assertEqual(response.status_code, 403)
|
|
self.assertFalse(self.client.login(username=self.user.username, password=newpassword))
|
|
self.assertTrue(self.client.login(username=self.user.username, password=self.password))
|
|
|
|
invalid = {
|
|
'old_password': 'invalid',
|
|
'new_password': newpassword
|
|
}
|
|
response = self.client.patch(
|
|
'/users/api/change-password',
|
|
data=invalid, format='json'
|
|
)
|
|
self.assertEqual(response.status_code, 400)
|
|
|
|
oldHash = self.user.password
|
|
self.client.force_login(user=self.user)
|
|
response = self.client.patch(
|
|
'/users/api/change-password',
|
|
data=data, format='json'
|
|
)
|
|
self.user.refresh_from_db()
|
|
self.assertEqual(response.status_code, 204)
|
|
self.assertNotEqual(self.user.password, oldHash)
|
|
self.assertTrue(self.client.login(username=self.user.username, password=newpassword))
|
|
self.assertFalse(self.client.login(username=self.user.username, password=self.password))
|
|
|
|
def test_password_reset_request(self):
|
|
data = {
|
|
'email': 'invalid@gmail.com'
|
|
}
|
|
response = self.client.post(
|
|
'/users/api/password-reset',
|
|
data=data, format='json'
|
|
)
|
|
self.assertEqual(response.status_code, 400)
|
|
|
|
data = {
|
|
'email': self.email
|
|
}
|
|
response = self.client.post(
|
|
'/users/api/password-reset',
|
|
data=data, format='json'
|
|
)
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
class TestSignupAPIView(APITestCase):
|
|
def setUp(self):
|
|
self.client = APIClient()
|
|
|
|
def test_signup(self):
|
|
data = {
|
|
'username': 'TestUser',
|
|
'email': 'email@mail.ru',
|
|
'password': 'Test@@123',
|
|
'password2': 'Test@@123',
|
|
'first_name': 'firstName',
|
|
'last_name': 'lastName',
|
|
}
|
|
response = self.client.post(
|
|
'/users/api/signup',
|
|
data=data, format='json'
|
|
)
|
|
self.assertEqual(response.status_code, 201)
|
|
self.assertTrue('id' in response.data)
|
|
self.assertEqual(response.data['username'], 'TestUser')
|
|
self.assertEqual(response.data['email'], 'email@mail.ru')
|
|
self.assertEqual(response.data['first_name'], 'firstName')
|
|
self.assertEqual(response.data['last_name'], 'lastName')
|