SMART-42 added tests for retrieve user profile endpoint

This commit is contained in:
s460930 2020-12-09 20:57:11 +01:00
parent dae0990207
commit f3e9c33034
6 changed files with 112 additions and 13 deletions

Binary file not shown.

View File

@ -1,29 +1,63 @@
"""
@author: p.dolata
"""
from django.test import TestCase from django.test import TestCase
from django.urls import reverse from django.urls import reverse
from rest_framework import serializers from rest_framework import serializers
from rest_framework import status from rest_framework import status
from rest_framework.test import APITestCase, APIClient from rest_framework.test import APITestCase, APIClient
from smartpicasso.app.user.models import User, UserManager from smartpicasso.app.user.models import User
from smartpicasso.app.user.serializers import UserLoginSerializer, UserRegistrationSerializer from smartpicasso.app.user.serializers import UserLoginSerializer, UserRegistrationSerializer
from smartpicasso.app.user_profile.models import UserProfile
class UserApiTest(APITestCase): class UserApiTest(APITestCase):
client = APIClient() client = APIClient()
authenticate_url = reverse('authenticate')
register_url = reverse('register')
profile = {"username": 'test', "first_name": "test", "last_name": "test"}
def test_login_when_user_non_exist(self): def test_login_when_user_non_exist(self):
url = reverse('authenticate') response = self.client.post(self.authenticate_url, {'email': 'non-exist', 'password': '123'}, format='json')
response = self.client.post(url, {'email': 'non-exist', 'password': '123'}, format='json')
assert response.status_code == 400 assert response.status_code == 400
def test_login_when_user_exist(self): def test_login_when_user_exist(self):
User.objects.create_user(email='test@test.com', password='test') User.objects.create_user(email='test@test.com', password='test')
url = reverse('authenticate') response = self.client.post(self.authenticate_url, {'email': 'test@test.com', 'password': 'test'},
response = self.client.post(url, {'email': 'test@test.com', 'password': 'test'}, format='json') format='json')
self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data['success'], 'True') self.assertEqual(response.data['success'], 'True')
self.assertIn('token', response.data) self.assertIn('token', response.data)
def test_register_when_user_non_exist(self):
response = self.client.post(self.register_url, {'email': 'test@test.com', 'password': 'test',
'profile': self.profile}, format='json')
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
self.assertEqual(response.data['success'], 'True')
def test_register_when_email_exist(self):
User.objects.create_user(email='test@test.com', password='test')
response = self.client.post(self.register_url, {'email': 'test@test.com', 'password': 'test',
'profile': self.profile}, format='json')
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
self.assertIn('email', response.data)
def test_register_when_username_exist(self):
user = User.objects.create_user(email='test2@test.com', password='test')
UserProfile.objects.create(
user=user,
username=self.profile['username'],
first_name=self.profile['first_name'],
last_name=self.profile['last_name']
)
response = self.client.post(self.register_url, {'email': 'test@test.com', 'password': 'test',
'profile': self.profile}, format='json')
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
self.assertIn('profile', response.data)
self.assertIn('username', response.data['profile'])
class UserTest(TestCase): class UserTest(TestCase):
@ -52,7 +86,7 @@ class UserRegistrationSerializerTest(TestCase):
serializer = UserRegistrationSerializer() serializer = UserRegistrationSerializer()
def test_create(self): def test_create(self):
profile = {"first_name": "test", "last_name": "test"} profile = {"username": 'test', "first_name": "test", "last_name": "test"}
user = self.serializer.create({"email": "test@test.com", "password": "test", "profile": profile}) user = self.serializer.create({"email": "test@test.com", "password": "test", "profile": profile})
self.assertNotEqual(user, None) self.assertNotEqual(user, None)

View File

@ -17,6 +17,9 @@ class UserProfile(models.Model):
first_name = models.CharField(max_length=50, unique=False) first_name = models.CharField(max_length=50, unique=False)
last_name = models.CharField(max_length=50, unique=False) last_name = models.CharField(max_length=50, unique=False)
def __str__(self):
return str(self.username) + ' - ' + str(self.first_name) + ' ' + str(self.last_name)
class Meta: class Meta:
""" """
Meta to se table name in database Meta to se table name in database

View File

@ -1,3 +1,65 @@
from django.test import TestCase """
@author: p.dolata
"""
# Create your tests here. from django.test import TestCase
from django.urls import reverse
from rest_framework import status
from rest_framework.test import APITestCase, APIClient
from smartpicasso.app.user.models import User
from smartpicasso.app.user_profile.models import UserProfile
class UserProfileApiTest(APITestCase):
client = APIClient()
profile_url = reverse('profile')
authenticate_url = reverse('authenticate')
profile = {"username": 'test_user', "first_name": "first", "last_name": "last"}
def test_get_profile_without_auth(self):
response = self.client.get(self.profile_url, format='json')
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
def test_get_profile_with_invalid_token(self):
self.client.force_authenticate(user=None)
response = self.client.get(self.profile_url, format='json')
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
def test_get_profile_when_user_without_profile(self):
user = User.objects.create_user(email='test@test.com', password='test')
self.client.force_authenticate(user=user)
response = self.client.get(self.profile_url, format='json')
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
self.assertEqual(response.data['success'], 'False')
def test_get_profile(self):
user = User.objects.create_user(email='test@test.com', password='test')
UserProfile.objects.create(
user=user,
username=self.profile['username'],
first_name=self.profile['first_name'],
last_name=self.profile['last_name']
)
self.client.force_authenticate(user=user)
response = self.client.get(self.profile_url, format='json')
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data['success'], 'True')
profile = response.data['profile']
self.assertEqual(profile['username'], self.profile['username'])
self.assertEqual(profile['first_name'], self.profile['first_name'])
self.assertEqual(profile['last_name'], self.profile['last_name'])
class UserProfileTest(TestCase):
profile = {"username": 'test_user', "first_name": "first", "last_name": "last"}
def test_user_profile_str(self):
user = User.objects.create_user(email='test@test.com', password='test')
user_profile = UserProfile.objects.create(
user=user,
username=self.profile['username'],
first_name=self.profile['first_name'],
last_name=self.profile['last_name']
)
self.assertEqual(str(user_profile), 'test_user - first last')

View File

@ -13,17 +13,17 @@ from smartpicasso.app.user_profile.models import UserProfile
class UserProfileView(RetrieveAPIView): class UserProfileView(RetrieveAPIView):
permission_classes = (IsAuthenticated,) permission_classes = (IsAuthenticated,)
authentication_classes = JSONWebTokenAuthentication authentication_class = JSONWebTokenAuthentication
def get(self, request): def get(self, request):
try: try:
user_profile = UserProfile.objects.get(user=request.user) user_profile = UserProfile.objects.get(user=request.user)
status_code = status.HTTP_200_OK status_code = status.HTTP_200_OK
response = { response = {
'success': 'true', 'success': 'True',
'status_code': status_code, 'status_code': status_code,
'message': 'User profile fetched successfully', 'message': 'User profile fetched successfully',
'data': { 'profile': {
'username': user_profile.username, 'username': user_profile.username,
'first_name': user_profile.first_name, 'first_name': user_profile.first_name,
'last_name': user_profile.last_name 'last_name': user_profile.last_name
@ -32,9 +32,9 @@ class UserProfileView(RetrieveAPIView):
except Exception as e: except Exception as e:
status_code = status.HTTP_400_BAD_REQUEST status_code = status.HTTP_400_BAD_REQUEST
response = { response = {
'success': 'false', 'success': 'False',
'status_code': status_code, 'status_code': status_code,
'message': 'User does not exist', 'message': 'User profile does not exist',
'error': str(e) 'error': str(e)
} }
return Response(response, status=status_code) return Response(response, status=status_code)