Issue #9 y #13 API basica de lista

This commit is contained in:
Daniel Cortes
2020-07-04 00:39:36 -04:00
parent 76a65371ce
commit f3a43de9ef
11 changed files with 449 additions and 13 deletions

138
lists/test.py Normal file
View File

@@ -0,0 +1,138 @@
import json
from datetime import timedelta
from django.test import TestCase
from django.utils import timezone
from lists.models import ListItem, Entity, Tag
from users.models import User
class TestList(TestCase):
def setUp(self):
self.user = User.objects.create_user(username='user', email='email@email.com', password='superpassword')
self.other = User.objects.create_user(username='other', email='email@email.com', password='superpassword')
self.entities = [
Entity.objects.create(mbid='a', entity_type='artist'),
Entity.objects.create(mbid='b', entity_type='release-group'),
Entity.objects.create(mbid='c', entity_type='recording'),
]
self.tags = [
Tag.objects.create(user=self.user, name='1'),
Tag.objects.create(user=self.user, name='2'),
Tag.objects.create(user=self.user, name='3')
]
for tag in self.tags:
self.user.tags.add(tag)
list_item = ListItem.objects.create(user_id=self.user.id, entity=self.entities[0])
list_item.tags.set(self.tags)
self.user.list.add(list_item)
tomorrow = timezone.now() + timedelta(1)
self.user_token = self.user.oauth2_provider_accesstoken.create(expires=tomorrow, token='usertoken')
self.other_token = self.other.oauth2_provider_accesstoken.create(expires=tomorrow, token='ohnotoken')
def _user_bearer_token(self):
return f'Bearer {self.user_token.token}'
def _other_bearer_token(self):
return f'Bearer {self.other_token.token}'
def test_get_list(self):
response = self.client.get('/api/lists/list/1', follow=True)
self.assertEqual(response.status_code, 200)
self.assertTrue('list' in response.json())
for list_item in response.json()['list']:
self.assertTrue('entity' in list_item)
self.assertTrue('tags' in list_item)
def test_get_list_user_doesnt_exists(self):
response = self.client.get('/api/lists/list/3', follow=True)
self.assertEqual(response.status_code, 404)
def test_add_to_list_is_protected(self):
response = self.client.post('/api/lists/list/1/')
self.assertEqual(response.status_code, 403)
response = self.client.post('/api/lists/list/1/',
HTTP_AUTHORIZATION=self._other_bearer_token())
self.assertEqual(response.status_code, 403)
def test_add_to_list(self):
to_add = {
'entity': 'b',
'tags': ['1', '2']
}
response = self.client.post('/api/lists/list/1/', json.dumps(to_add),
content_type='application/json',
HTTP_AUTHORIZATION=self._user_bearer_token())
self.assertEqual(response.status_code, 200)
list_item = ListItem.objects.filter(pk=2)
self.assertEqual(list_item.count(), 1)
list_item = list_item[0]
self.assertEqual(list_item.user_id, self.user.id)
self.assertEqual(list_item.entity_id, to_add['entity'])
self.assertEqual(list_item.tags.count(), len(to_add['tags']))
def test_delete_list_item_is_protected(self):
response = self.client.delete('/api/lists/list/1/1/')
self.assertEqual(response.status_code, 403)
response = self.client.delete('/api/lists/list/1/1/',
HTTP_AUTHORIZATION=self._other_bearer_token())
self.assertEqual(response.status_code, 403)
def test_delete_list_item(self):
self.assertEqual(ListItem.objects.filter(pk=1).count(), 1)
response = self.client.delete('/api/lists/list/1/1/',
HTTP_AUTHORIZATION=self._user_bearer_token())
self.assertEqual(response.status_code, 200)
self.assertEqual(ListItem.objects.filter(pk=1).count(), 0)
def test_get_list_item(self):
response = self.client.get('/api/lists/list/1/1', follow=True)
self.assertEqual(response.status_code, 200)
list_item = response.json()
self.assertEqual(list_item['entity']['mbid'], 'a')
self.assertEqual(list_item['entity']['type'], 'artist')
self.assertEqual(len(list_item['tags']), 3)
def test_update_list_item_is_protected(self):
response = self.client.put('/api/lists/list/1/1/')
self.assertEqual(response.status_code, 403)
response = self.client.put('/api/lists/list/1/1/',
HTTP_AUTHORIZATION=self._other_bearer_token())
self.assertEqual(response.status_code, 403)
def test_update_list_item(self):
self.assertEqual(ListItem.objects.get(pk=1).tags.count(), 3)
to_update = {
'entity': 'a',
'tags': ['1', '2']
}
response = self.client.put('/api/lists/list/1/1/', json.dumps(to_update),
content_type='application/json',
HTTP_AUTHORIZATION=self._user_bearer_token())
self.assertEqual(response.status_code, 200)
self.assertEqual(ListItem.objects.get(pk=1).tags.count(), 2)