138 lines
5.2 KiB
Python
138 lines
5.2 KiB
Python
import json
|
|
|
|
from django.test import TestCase
|
|
|
|
from users.models import User, SocialNetworks
|
|
from django.utils import timezone
|
|
from datetime import timedelta
|
|
|
|
|
|
class TestAPIViews(TestCase):
|
|
def setUp(self):
|
|
self.user_admin = User.objects.create_superuser('admin', 'email@email.com', 'superpassword')
|
|
self.user_regular = User.objects.create_user('normal', 'email@email.com', 'superpassword')
|
|
|
|
tomorrow = timezone.now() + timedelta(1)
|
|
|
|
self.user_token = self.user_regular.oauth2_provider_accesstoken.create(expires=tomorrow, token='usertoken')
|
|
self.admin_token = self.user_admin.oauth2_provider_accesstoken.create(expires=tomorrow, token='admintoken')
|
|
|
|
self.user_regular.socialnetworks.twitter = 'twitter'
|
|
self.user_regular.socialnetworks.save()
|
|
|
|
def _admin_header(self):
|
|
return f'Bearer {self.admin_token.token}'
|
|
|
|
def _user_header(self):
|
|
return f'Bearer {self.user_token.token}'
|
|
|
|
def test_get_user_exists(self):
|
|
response = self.client.get('/api/users/user/1', follow=True)
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
def test_get_user_not_exists(self):
|
|
response = self.client.get('/api/users/user/3', follow=True)
|
|
self.assertEqual(response.status_code, 404)
|
|
|
|
def test_put_user_valid(self):
|
|
new_user_data = {
|
|
'username': 'other',
|
|
'email': 'skrd159@gmail.com'
|
|
}
|
|
|
|
response = self.client.put('/api/users/user/2', json.dumps(new_user_data),
|
|
HTTP_AUTHORIZATION=self._user_header())
|
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
user = User.objects.get(pk=2)
|
|
self.assertEqual(user.username, new_user_data['username'])
|
|
self.assertEqual(user.email, new_user_data['email'])
|
|
|
|
def test_put_user_not_all_data(self):
|
|
new_user_data = {
|
|
'username': 'other',
|
|
}
|
|
|
|
response = self.client.put('/api/users/user/2', json.dumps(new_user_data),
|
|
HTTP_AUTHORIZATION=self._user_header())
|
|
|
|
self.assertEqual(response.status_code, 400)
|
|
|
|
def test_put_user_not_modifying_self(self):
|
|
new_user_data = {
|
|
'username': 'other',
|
|
'email': 'skrd159@gmail.com'
|
|
}
|
|
|
|
response = self.client.put('/api/users/user/1', json.dumps(new_user_data),
|
|
HTTP_AUTHORIZATION=self._user_header())
|
|
|
|
self.assertEqual(response.status_code, 403)
|
|
|
|
def test_put_user_admin_not_modifying_self(self):
|
|
new_user_data = {
|
|
'username': 'other',
|
|
'email': 'skrd159@gmail.com'
|
|
}
|
|
|
|
response = self.client.put('/api/users/user/2', json.dumps(new_user_data),
|
|
HTTP_AUTHORIZATION=self._admin_header())
|
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
def test_get_social_networks_exists(self):
|
|
response = self.client.get('/api/users/user/2/social_networks', follow=True)
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertEqual(response.json()['twitter'], 'twitter')
|
|
|
|
def test_get_social_networks_not_exists(self):
|
|
response = self.client.get('/api/users/user/3/social_networks', follow=True)
|
|
self.assertEqual(response.status_code, 404)
|
|
|
|
def test_put_social_networks_valid(self):
|
|
new_social_data = {
|
|
'twitter': 'ryuuji159',
|
|
'facebook': '',
|
|
'instagram': '',
|
|
'youtube': '',
|
|
'twitch': '',
|
|
}
|
|
|
|
response = self.client.put('/api/users/user/2/social_networks', json.dumps(new_social_data),
|
|
HTTP_AUTHORIZATION=self._user_header())
|
|
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
social_networks = SocialNetworks.objects.get(user_id=2)
|
|
self.assertEqual(social_networks.twitter, new_social_data['twitter'])
|
|
self.assertEqual(social_networks.facebook, new_social_data['facebook'])
|
|
self.assertEqual(social_networks.instagram, new_social_data['instagram'])
|
|
self.assertEqual(social_networks.youtube, new_social_data['youtube'])
|
|
self.assertEqual(social_networks.twitch, new_social_data['twitch'])
|
|
|
|
def test_put_social_networks_invalid(self):
|
|
# max length para los fields es 255 => len('toolong'*37) == 259
|
|
new_social_data = {'twitter': 'toolong'*37}
|
|
|
|
response = self.client.put('/api/users/user/2/social_networks', json.dumps(new_social_data),
|
|
HTTP_AUTHORIZATION=self._user_header())
|
|
|
|
self.assertEqual(response.status_code, 400)
|
|
|
|
def test_put_social_networks_not_modifying_self(self):
|
|
new_social_data = {}
|
|
|
|
response = self.client.put('/api/users/user/1/social_networks', json.dumps(new_social_data),
|
|
HTTP_AUTHORIZATION=self._user_header())
|
|
|
|
self.assertEqual(response.status_code, 403)
|
|
|
|
def test_put_social_networks_admin_modifying_other(self):
|
|
new_social_data = {}
|
|
|
|
response = self.client.put('/api/users/user/2/social_networks', json.dumps(new_social_data),
|
|
HTTP_AUTHORIZATION=self._admin_header())
|
|
|
|
self.assertEqual(response.status_code, 200)
|