from django.test import TestCase from django.urls import reverse from rest_framework import serializers from rest_framework import status from rest_framework.test import APITestCase, APIClient from smartpicasso.app.user.models import User, UserManager from smartpicasso.app.user.serializers import UserLoginSerializer, UserRegistrationSerializer class UserApiTest(APITestCase): client = APIClient() def test_login_when_user_non_exist(self): url = reverse('authenticate') response = self.client.post(url, {'email': 'non-exist', 'password': '123'}, format='json') assert response.status_code == 400 def test_login_when_user_exist(self): User.objects.create_user(email='test@test.com', password='test') url = reverse('authenticate') response = self.client.post(url, {'email': 'test@test.com', 'password': 'test'}, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data['success'], 'True') self.assertIn('token', response.data) class UserTest(TestCase): def test_user_str(self): email = 'test@test.com' user = User.objects.create_user(email=email, password='test') self.assertEqual(str(user), email) class UserLoginSerializerTest(TestCase): serializer = UserLoginSerializer() def test_validate_wrong_credentials(self): data = {'email': 'test@test.com', 'password': '123'} self.assertRaises(serializers.ValidationError, self.serializer.validate, data) def test_validate_success(self): User.objects.create_user(email='test@test.com', password='test') data = {'email': 'test@test.com', 'password': 'test'} result = self.serializer.validate(data) self.assertEqual(result['email'], 'test@test.com') self.assertIn('token', result) class UserRegistrationSerializerTest(TestCase): serializer = UserRegistrationSerializer() def test_create(self): profile = {"first_name": "test", "last_name": "test"} user = self.serializer.create({"email": "test@test.com", "password": "test", "profile": profile}) self.assertNotEqual(user, None) self.assertEqual(user.email, "test@test.com") class UserManagerTest(TestCase): manager = User.objects def test_create_user_none_email(self): email = None self.assertRaises(ValueError, self.manager.create_user, email) def test_create_user(self): user = self.manager.create_user("test@test.pl", "test") self.assertNotEqual(user, None) self.assertEqual(user.email, "test@test.pl") self.assertEqual(user.is_active, True) self.assertEqual(user.is_superuser, False) self.assertEqual(user.is_staff, False) def test_create_superuser_none_password(self): password = None self.assertRaises(TypeError, self.manager.create_superuser, "super@test.pl", password) def test_create_superuser(self): user = self.manager.create_superuser("super@test.pl", "test") self.assertNotEqual(user, None) self.assertEqual(user.email, "super@test.pl") self.assertEqual(user.is_active, True) self.assertEqual(user.is_superuser, True) self.assertEqual(user.is_staff, True)