kopia lustrzana https://dev.funkwhale.audio/funkwhale/funkwhale
114 wiersze
4.3 KiB
Python
114 wiersze
4.3 KiB
Python
import json
|
|
from test_plus.test import TestCase
|
|
from django.core.urlresolvers import reverse
|
|
|
|
from funkwhale_api.music.models import Track, Artist
|
|
from funkwhale_api.favorites.models import TrackFavorite
|
|
from funkwhale_api.users.models import User
|
|
|
|
class TestFavorites(TestCase):
|
|
|
|
def setUp(self):
|
|
super().setUp()
|
|
self.artist = Artist.objects.create(name='test')
|
|
self.track = Track.objects.create(title='test', artist=self.artist)
|
|
self.user = User.objects.create_user(username='test', email='test@test.com', password='test')
|
|
|
|
def test_user_can_add_favorite(self):
|
|
TrackFavorite.add(self.track, self.user)
|
|
|
|
favorite = TrackFavorite.objects.latest('id')
|
|
self.assertEqual(favorite.track, self.track)
|
|
self.assertEqual(favorite.user, self.user)
|
|
|
|
def test_user_can_get_his_favorites(self):
|
|
favorite = TrackFavorite.add(self.track, self.user)
|
|
|
|
url = reverse('api:favorites:tracks-list')
|
|
self.client.login(username=self.user.username, password='test')
|
|
|
|
response = self.client.get(url)
|
|
|
|
expected = [
|
|
{
|
|
'track': self.track.pk,
|
|
'id': favorite.id,
|
|
'creation_date': favorite.creation_date.isoformat().replace('+00:00', 'Z'),
|
|
}
|
|
]
|
|
parsed_json = json.loads(response.content.decode('utf-8'))
|
|
|
|
self.assertEqual(expected, parsed_json['results'])
|
|
|
|
def test_user_can_add_favorite_via_api(self):
|
|
url = reverse('api:favorites:tracks-list')
|
|
self.client.login(username=self.user.username, password='test')
|
|
response = self.client.post(url, {'track': self.track.pk})
|
|
|
|
favorite = TrackFavorite.objects.latest('id')
|
|
expected = {
|
|
'track': self.track.pk,
|
|
'id': favorite.id,
|
|
'creation_date': favorite.creation_date.isoformat().replace('+00:00', 'Z'),
|
|
}
|
|
parsed_json = json.loads(response.content.decode('utf-8'))
|
|
|
|
self.assertEqual(expected, parsed_json)
|
|
self.assertEqual(favorite.track, self.track)
|
|
self.assertEqual(favorite.user, self.user)
|
|
|
|
def test_user_can_remove_favorite_via_api(self):
|
|
favorite = TrackFavorite.add(self.track, self.user)
|
|
|
|
url = reverse('api:favorites:tracks-detail', kwargs={'pk': favorite.pk})
|
|
self.client.login(username=self.user.username, password='test')
|
|
response = self.client.delete(url, {'track': self.track.pk})
|
|
self.assertEqual(response.status_code, 204)
|
|
self.assertEqual(TrackFavorite.objects.count(), 0)
|
|
|
|
def test_user_can_remove_favorite_via_api_using_track_id(self):
|
|
favorite = TrackFavorite.add(self.track, self.user)
|
|
|
|
url = reverse('api:favorites:tracks-remove')
|
|
self.client.login(username=self.user.username, password='test')
|
|
response = self.client.delete(
|
|
url, json.dumps({'track': self.track.pk}),
|
|
content_type='application/json'
|
|
)
|
|
|
|
self.assertEqual(response.status_code, 204)
|
|
self.assertEqual(TrackFavorite.objects.count(), 0)
|
|
|
|
from funkwhale_api.users.models import User
|
|
|
|
def test_can_restrict_api_views_to_authenticated_users(self):
|
|
urls = [
|
|
('api:favorites:tracks-list', 'get'),
|
|
]
|
|
|
|
for route_name, method in urls:
|
|
url = self.reverse(route_name)
|
|
with self.settings(API_AUTHENTICATION_REQUIRED=True):
|
|
response = getattr(self.client, method)(url)
|
|
self.assertEqual(response.status_code, 401)
|
|
|
|
self.client.login(username=self.user.username, password='test')
|
|
|
|
for route_name, method in urls:
|
|
url = self.reverse(route_name)
|
|
with self.settings(API_AUTHENTICATION_REQUIRED=False):
|
|
response = getattr(self.client, method)(url)
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
def test_can_filter_tracks_by_favorites(self):
|
|
favorite = TrackFavorite.add(self.track, self.user)
|
|
|
|
url = reverse('api:tracks-list')
|
|
self.client.login(username=self.user.username, password='test')
|
|
|
|
response = self.client.get(url, data={'favorites': True})
|
|
|
|
parsed_json = json.loads(response.content.decode('utf-8'))
|
|
self.assertEqual(parsed_json['count'], 1)
|
|
self.assertEqual(parsed_json['results'][0]['id'], self.track.id)
|