Files
musiclist-server/lists/test.py
2020-07-04 00:39:36 -04:00

139 lines
5.1 KiB
Python

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)