Fixed #18: added v1 namespace under API

merge-requests/154/head
Eliot Berriot 2017-06-26 20:19:09 +02:00
rodzic 3c2a6914ce
commit 70634048c6
12 zmienionych plików z 44 dodań i 40 usunięć

Wyświetl plik

@ -14,9 +14,9 @@ router.register(r'import-batches', views.ImportBatchViewSet, 'import-batches')
router.register(r'submit', views.SubmitViewSet, 'submit') router.register(r'submit', views.SubmitViewSet, 'submit')
router.register(r'playlists', playlists_views.PlaylistViewSet, 'playlists') router.register(r'playlists', playlists_views.PlaylistViewSet, 'playlists')
router.register(r'playlist-tracks', playlists_views.PlaylistTrackViewSet, 'playlist-tracks') router.register(r'playlist-tracks', playlists_views.PlaylistTrackViewSet, 'playlist-tracks')
urlpatterns = router.urls v1_patterns = router.urls
urlpatterns += [ v1_patterns += [
url(r'^providers/', include('funkwhale_api.providers.urls', namespace='providers')), url(r'^providers/', include('funkwhale_api.providers.urls', namespace='providers')),
url(r'^favorites/', include('funkwhale_api.favorites.urls', namespace='favorites')), url(r'^favorites/', include('funkwhale_api.favorites.urls', namespace='favorites')),
url(r'^search$', views.Search.as_view(), name='search'), url(r'^search$', views.Search.as_view(), name='search'),
@ -26,3 +26,7 @@ urlpatterns += [
url(r'^token/', jwt_views.obtain_jwt_token), url(r'^token/', jwt_views.obtain_jwt_token),
url(r'^token/refresh/', jwt_views.refresh_jwt_token), url(r'^token/refresh/', jwt_views.refresh_jwt_token),
] ]
urlpatterns = [
url(r'^v1/', include(v1_patterns, namespace='v1'))
]

Wyświetl plik

@ -24,7 +24,7 @@ class TestFavorites(TestCase):
def test_user_can_get_his_favorites(self): def test_user_can_get_his_favorites(self):
favorite = TrackFavorite.add(self.track, self.user) favorite = TrackFavorite.add(self.track, self.user)
url = reverse('api:favorites:tracks-list') url = reverse('api:v1:favorites:tracks-list')
self.client.login(username=self.user.username, password='test') self.client.login(username=self.user.username, password='test')
response = self.client.get(url) response = self.client.get(url)
@ -41,7 +41,7 @@ class TestFavorites(TestCase):
self.assertEqual(expected, parsed_json['results']) self.assertEqual(expected, parsed_json['results'])
def test_user_can_add_favorite_via_api(self): def test_user_can_add_favorite_via_api(self):
url = reverse('api:favorites:tracks-list') url = reverse('api:v1:favorites:tracks-list')
self.client.login(username=self.user.username, password='test') self.client.login(username=self.user.username, password='test')
response = self.client.post(url, {'track': self.track.pk}) response = self.client.post(url, {'track': self.track.pk})
@ -60,7 +60,7 @@ class TestFavorites(TestCase):
def test_user_can_remove_favorite_via_api(self): def test_user_can_remove_favorite_via_api(self):
favorite = TrackFavorite.add(self.track, self.user) favorite = TrackFavorite.add(self.track, self.user)
url = reverse('api:favorites:tracks-detail', kwargs={'pk': favorite.pk}) url = reverse('api:v1:favorites:tracks-detail', kwargs={'pk': favorite.pk})
self.client.login(username=self.user.username, password='test') self.client.login(username=self.user.username, password='test')
response = self.client.delete(url, {'track': self.track.pk}) response = self.client.delete(url, {'track': self.track.pk})
self.assertEqual(response.status_code, 204) self.assertEqual(response.status_code, 204)
@ -69,7 +69,7 @@ class TestFavorites(TestCase):
def test_user_can_remove_favorite_via_api_using_track_id(self): def test_user_can_remove_favorite_via_api_using_track_id(self):
favorite = TrackFavorite.add(self.track, self.user) favorite = TrackFavorite.add(self.track, self.user)
url = reverse('api:favorites:tracks-remove') url = reverse('api:v1:favorites:tracks-remove')
self.client.login(username=self.user.username, password='test') self.client.login(username=self.user.username, password='test')
response = self.client.delete( response = self.client.delete(
url, json.dumps({'track': self.track.pk}), url, json.dumps({'track': self.track.pk}),
@ -83,7 +83,7 @@ class TestFavorites(TestCase):
def test_can_restrict_api_views_to_authenticated_users(self): def test_can_restrict_api_views_to_authenticated_users(self):
urls = [ urls = [
('api:favorites:tracks-list', 'get'), ('api:v1:favorites:tracks-list', 'get'),
] ]
for route_name, method in urls: for route_name, method in urls:
@ -103,7 +103,7 @@ class TestFavorites(TestCase):
def test_can_filter_tracks_by_favorites(self): def test_can_filter_tracks_by_favorites(self):
favorite = TrackFavorite.add(self.track, self.user) favorite = TrackFavorite.add(self.track, self.user)
url = reverse('api:tracks-list') url = reverse('api:v1:tracks-list')
self.client.login(username=self.user.username, password='test') self.client.login(username=self.user.username, password='test')
response = self.client.get(url, data={'favorites': True}) response = self.client.get(url, data={'favorites': True})

Wyświetl plik

@ -23,7 +23,7 @@ class TestHistory(TestCase):
def test_anonymous_user_can_create_listening_via_api(self): def test_anonymous_user_can_create_listening_via_api(self):
track = mommy.make('music.Track') track = mommy.make('music.Track')
url = self.reverse('api:history:listenings-list') url = self.reverse('api:v1:history:listenings-list')
response = self.client.post(url, { response = self.client.post(url, {
'track': track.pk, 'track': track.pk,
}) })
@ -38,7 +38,7 @@ class TestHistory(TestCase):
self.client.login(username=self.user.username, password='test') self.client.login(username=self.user.username, password='test')
url = self.reverse('api:history:listenings-list') url = self.reverse('api:v1:history:listenings-list')
response = self.client.post(url, { response = self.client.post(url, {
'track': track.pk, 'track': track.pk,
}) })

Wyświetl plik

@ -314,7 +314,7 @@ class Track(APIModelMixin):
return work return work
def get_lyrics_url(self): def get_lyrics_url(self):
return reverse('api:tracks-lyrics', kwargs={'pk': self.pk}) return reverse('api:v1:tracks-lyrics', kwargs={'pk': self.pk})
@property @property
def full_name(self): def full_name(self):

Wyświetl plik

@ -20,7 +20,7 @@ class TestAPI(TMPDirTestCaseMixin, TestCase):
def test_can_submit_youtube_url_for_track_import(self, *mocks): def test_can_submit_youtube_url_for_track_import(self, *mocks):
mbid = '9968a9d6-8d92-4051-8f76-674e157b6eed' mbid = '9968a9d6-8d92-4051-8f76-674e157b6eed'
video_id = 'tPEE9ZwTmy0' video_id = 'tPEE9ZwTmy0'
url = reverse('api:submit-single') url = reverse('api:v1:submit-single')
user = User.objects.create_superuser(username='test', email='test@test.com', password='test') user = User.objects.create_superuser(username='test', email='test@test.com', password='test')
self.client.login(username=user.username, password='test') self.client.login(username=user.username, password='test')
response = self.client.post(url, {'import_url': 'https://www.youtube.com/watch?v={0}'.format(video_id), 'mbid': mbid}) response = self.client.post(url, {'import_url': 'https://www.youtube.com/watch?v={0}'.format(video_id), 'mbid': mbid})
@ -33,7 +33,7 @@ class TestAPI(TMPDirTestCaseMixin, TestCase):
user = User.objects.create_superuser(username='test', email='test@test.com', password='test') user = User.objects.create_superuser(username='test', email='test@test.com', password='test')
mbid = '9968a9d6-8d92-4051-8f76-674e157b6eed' mbid = '9968a9d6-8d92-4051-8f76-674e157b6eed'
video_id = 'tPEE9ZwTmy0' video_id = 'tPEE9ZwTmy0'
url = reverse('api:submit-single') url = reverse('api:v1:submit-single')
self.client.login(username=user.username, password='test') self.client.login(username=user.username, password='test')
with self.settings(CELERY_ALWAYS_EAGER=False): with self.settings(CELERY_ALWAYS_EAGER=False):
response = self.client.post(url, {'import_url': 'https://www.youtube.com/watch?v={0}'.format(video_id), 'mbid': mbid}) response = self.client.post(url, {'import_url': 'https://www.youtube.com/watch?v={0}'.format(video_id), 'mbid': mbid})
@ -69,7 +69,7 @@ class TestAPI(TMPDirTestCaseMixin, TestCase):
}, },
] ]
} }
url = reverse('api:submit-album') url = reverse('api:v1:submit-album')
self.client.login(username=user.username, password='test') self.client.login(username=user.username, password='test')
with self.settings(CELERY_ALWAYS_EAGER=False): with self.settings(CELERY_ALWAYS_EAGER=False):
response = self.client.post(url, json.dumps(payload), content_type="application/json") response = self.client.post(url, json.dumps(payload), content_type="application/json")
@ -123,7 +123,7 @@ class TestAPI(TMPDirTestCaseMixin, TestCase):
} }
] ]
} }
url = reverse('api:submit-artist') url = reverse('api:v1:submit-artist')
self.client.login(username=user.username, password='test') self.client.login(username=user.username, password='test')
with self.settings(CELERY_ALWAYS_EAGER=False): with self.settings(CELERY_ALWAYS_EAGER=False):
response = self.client.post(url, json.dumps(payload), content_type="application/json") response = self.client.post(url, json.dumps(payload), content_type="application/json")
@ -159,7 +159,7 @@ class TestAPI(TMPDirTestCaseMixin, TestCase):
batch = models.ImportBatch.objects.create(submitted_by=user1) batch = models.ImportBatch.objects.create(submitted_by=user1)
job = models.ImportJob.objects.create(batch=batch, mbid=mbid, source=source) job = models.ImportJob.objects.create(batch=batch, mbid=mbid, source=source)
url = reverse('api:import-batches-list') url = reverse('api:v1:import-batches-list')
self.client.login(username=user2.username, password='test') self.client.login(username=user2.username, password='test')
response2 = self.client.get(url) response2 = self.client.get(url)
@ -175,7 +175,7 @@ class TestAPI(TMPDirTestCaseMixin, TestCase):
artist2 = models.Artist.objects.create(name='Test2') artist2 = models.Artist.objects.create(name='Test2')
query = 'test1' query = 'test1'
expected = '[{0}]'.format(json.dumps(serializers.ArtistSerializerNested(artist1).data)) expected = '[{0}]'.format(json.dumps(serializers.ArtistSerializerNested(artist1).data))
url = self.reverse('api:artists-search') url = self.reverse('api:v1:artists-search')
response = self.client.get(url + '?query={0}'.format(query)) response = self.client.get(url + '?query={0}'.format(query))
self.assertJSONEqual(expected, json.loads(response.content.decode('utf-8'))) self.assertJSONEqual(expected, json.loads(response.content.decode('utf-8')))
@ -187,17 +187,17 @@ class TestAPI(TMPDirTestCaseMixin, TestCase):
track2 = models.Track.objects.create(artist=artist2, title="test_track2") track2 = models.Track.objects.create(artist=artist2, title="test_track2")
query = 'test track 1' query = 'test track 1'
expected = '[{0}]'.format(json.dumps(serializers.TrackSerializerNested(track1).data)) expected = '[{0}]'.format(json.dumps(serializers.TrackSerializerNested(track1).data))
url = self.reverse('api:tracks-search') url = self.reverse('api:v1:tracks-search')
response = self.client.get(url + '?query={0}'.format(query)) response = self.client.get(url + '?query={0}'.format(query))
self.assertJSONEqual(expected, json.loads(response.content.decode('utf-8'))) self.assertJSONEqual(expected, json.loads(response.content.decode('utf-8')))
def test_can_restrict_api_views_to_authenticated_users(self): def test_can_restrict_api_views_to_authenticated_users(self):
urls = [ urls = [
('api:tags-list', 'get'), ('api:v1:tags-list', 'get'),
('api:tracks-list', 'get'), ('api:v1:tracks-list', 'get'),
('api:artists-list', 'get'), ('api:v1:artists-list', 'get'),
('api:albums-list', 'get'), ('api:v1:albums-list', 'get'),
] ]
for route_name, method in urls: for route_name, method in urls:

Wyświetl plik

@ -59,7 +59,7 @@ Is it me you're looking for?"""
work=None, work=None,
mbid='07ca77cf-f513-4e9c-b190-d7e24bbad448') mbid='07ca77cf-f513-4e9c-b190-d7e24bbad448')
url = reverse('api:tracks-lyrics', kwargs={'pk': track.pk}) url = reverse('api:v1:tracks-lyrics', kwargs={'pk': track.pk})
user = User.objects.create_user( user = User.objects.create_user(
username='test', email='test@test.com', password='test') username='test', email='test@test.com', password='test')
self.client.login(username=user.username, password='test') self.client.login(username=user.username, password='test')

Wyświetl plik

@ -13,7 +13,7 @@ class TestAPI(TestCase):
return_value=api_data.recordings['search']['brontide matador']) return_value=api_data.recordings['search']['brontide matador'])
def test_can_search_recording_in_musicbrainz_api(self, *mocks): def test_can_search_recording_in_musicbrainz_api(self, *mocks):
query = 'brontide matador' query = 'brontide matador'
url = reverse('api:providers:musicbrainz:search-recordings') url = reverse('api:v1:providers:musicbrainz:search-recordings')
expected = api_data.recordings['search']['brontide matador'] expected = api_data.recordings['search']['brontide matador']
response = self.client.get(url, data={'query': query}) response = self.client.get(url, data={'query': query})
@ -24,7 +24,7 @@ class TestAPI(TestCase):
return_value=api_data.releases['search']['brontide matador']) return_value=api_data.releases['search']['brontide matador'])
def test_can_search_release_in_musicbrainz_api(self, *mocks): def test_can_search_release_in_musicbrainz_api(self, *mocks):
query = 'brontide matador' query = 'brontide matador'
url = reverse('api:providers:musicbrainz:search-releases') url = reverse('api:v1:providers:musicbrainz:search-releases')
expected = api_data.releases['search']['brontide matador'] expected = api_data.releases['search']['brontide matador']
response = self.client.get(url, data={'query': query}) response = self.client.get(url, data={'query': query})
@ -35,7 +35,7 @@ class TestAPI(TestCase):
return_value=api_data.artists['search']['lost fingers']) return_value=api_data.artists['search']['lost fingers'])
def test_can_search_artists_in_musicbrainz_api(self, *mocks): def test_can_search_artists_in_musicbrainz_api(self, *mocks):
query = 'lost fingers' query = 'lost fingers'
url = reverse('api:providers:musicbrainz:search-artists') url = reverse('api:v1:providers:musicbrainz:search-artists')
expected = api_data.artists['search']['lost fingers'] expected = api_data.artists['search']['lost fingers']
response = self.client.get(url, data={'query': query}) response = self.client.get(url, data={'query': query})
@ -46,7 +46,7 @@ class TestAPI(TestCase):
return_value=api_data.artists['get']['lost fingers']) return_value=api_data.artists['get']['lost fingers'])
def test_can_get_artist_in_musicbrainz_api(self, *mocks): def test_can_get_artist_in_musicbrainz_api(self, *mocks):
uuid = 'ac16bbc0-aded-4477-a3c3-1d81693d58c9' uuid = 'ac16bbc0-aded-4477-a3c3-1d81693d58c9'
url = reverse('api:providers:musicbrainz:artist-detail', kwargs={ url = reverse('api:v1:providers:musicbrainz:artist-detail', kwargs={
'uuid': uuid, 'uuid': uuid,
}) })
response = self.client.get(url) response = self.client.get(url)
@ -60,7 +60,7 @@ class TestAPI(TestCase):
def test_can_broswe_release_group_using_musicbrainz_api(self, *mocks): def test_can_broswe_release_group_using_musicbrainz_api(self, *mocks):
uuid = 'ac16bbc0-aded-4477-a3c3-1d81693d58c9' uuid = 'ac16bbc0-aded-4477-a3c3-1d81693d58c9'
url = reverse( url = reverse(
'api:providers:musicbrainz:release-group-browse', 'api:v1:providers:musicbrainz:release-group-browse',
kwargs={ kwargs={
'artist_uuid': uuid, 'artist_uuid': uuid,
} }
@ -76,7 +76,7 @@ class TestAPI(TestCase):
def test_can_broswe_releases_using_musicbrainz_api(self, *mocks): def test_can_broswe_releases_using_musicbrainz_api(self, *mocks):
uuid = 'f04ed607-11b7-3843-957e-503ecdd485d1' uuid = 'f04ed607-11b7-3843-957e-503ecdd485d1'
url = reverse( url = reverse(
'api:providers:musicbrainz:release-browse', 'api:v1:providers:musicbrainz:release-browse',
kwargs={ kwargs={
'release_group_uuid': uuid, 'release_group_uuid': uuid,
} }

Wyświetl plik

@ -38,7 +38,7 @@ class TestPlayLists(TestCase):
def test_can_create_playlist_via_api(self): def test_can_create_playlist_via_api(self):
self.client.login(username=self.user.username, password='test') self.client.login(username=self.user.username, password='test')
url = reverse('api:playlists-list') url = reverse('api:v1:playlists-list')
data = { data = {
'name': 'test', 'name': 'test',
} }
@ -54,7 +54,7 @@ class TestPlayLists(TestCase):
self.client.login(username=self.user.username, password='test') self.client.login(username=self.user.username, password='test')
url = reverse('api:playlist-tracks-list') url = reverse('api:v1:playlist-tracks-list')
data = { data = {
'playlist': playlist.pk, 'playlist': playlist.pk,
'track': tracks[0].pk 'track': tracks[0].pk

Wyświetl plik

@ -26,7 +26,7 @@ class TestAPI(TestCase):
def test_can_get_search_results_from_funkwhale(self, *mocks): def test_can_get_search_results_from_funkwhale(self, *mocks):
query = '8 bit adventure' query = '8 bit adventure'
expected = json.dumps(client.search(query)) expected = json.dumps(client.search(query))
url = self.reverse('api:providers:youtube:search') url = self.reverse('api:v1:providers:youtube:search')
response = self.client.get(url + '?query={0}'.format(query)) response = self.client.get(url + '?query={0}'.format(query))
self.assertJSONEqual(expected, json.loads(response.content.decode('utf-8'))) self.assertJSONEqual(expected, json.loads(response.content.decode('utf-8')))
@ -67,7 +67,7 @@ class TestAPI(TestCase):
} }
expected = json.dumps(client.search_multiple(queries)) expected = json.dumps(client.search_multiple(queries))
url = self.reverse('api:providers:youtube:searchs') url = self.reverse('api:v1:providers:youtube:searchs')
response = self.client.post( response = self.client.post(
url, json.dumps(queries), content_type='application/json') url, json.dumps(queries), content_type='application/json')

Wyświetl plik

@ -94,7 +94,7 @@ class TestRadios(TestCase):
self.assertEqual(radio.session, restarted_radio.session) self.assertEqual(radio.session, restarted_radio.session)
def test_can_get_start_radio_from_api(self): def test_can_get_start_radio_from_api(self):
url = reverse('api:radios:sessions-list') url = reverse('api:v1:radios:sessions-list')
response = self.client.post(url, {'radio_type': 'random'}) response = self.client.post(url, {'radio_type': 'random'})
session = models.RadioSession.objects.latest('id') session = models.RadioSession.objects.latest('id')
self.assertEqual(session.radio_type, 'random') self.assertEqual(session.radio_type, 'random')
@ -107,7 +107,7 @@ class TestRadios(TestCase):
self.assertEqual(session.user, self.user) self.assertEqual(session.user, self.user)
def test_can_start_radio_for_anonymous_user(self): def test_can_start_radio_for_anonymous_user(self):
url = reverse('api:radios:sessions-list') url = reverse('api:v1:radios:sessions-list')
response = self.client.post(url, {'radio_type': 'random'}) response = self.client.post(url, {'radio_type': 'random'})
session = models.RadioSession.objects.latest('id') session = models.RadioSession.objects.latest('id')
@ -118,11 +118,11 @@ class TestRadios(TestCase):
tracks = mommy.make('music.Track', _quantity=1) tracks = mommy.make('music.Track', _quantity=1)
self.client.login(username=self.user.username, password='test') self.client.login(username=self.user.username, password='test')
url = reverse('api:radios:sessions-list') url = reverse('api:v1:radios:sessions-list')
response = self.client.post(url, {'radio_type': 'random'}) response = self.client.post(url, {'radio_type': 'random'})
session = models.RadioSession.objects.latest('id') session = models.RadioSession.objects.latest('id')
url = reverse('api:radios:tracks-list') url = reverse('api:v1:radios:tracks-list')
response = self.client.post(url, {'session': session.pk}) response = self.client.post(url, {'session': session.pk})
data = json.loads(response.content.decode('utf-8')) data = json.loads(response.content.decode('utf-8'))
@ -173,7 +173,7 @@ class TestRadios(TestCase):
def test_can_start_artist_radio_from_api(self): def test_can_start_artist_radio_from_api(self):
artist = mommy.make('music.Artist') artist = mommy.make('music.Artist')
url = reverse('api:radios:sessions-list') url = reverse('api:v1:radios:sessions-list')
response = self.client.post(url, {'radio_type': 'artist', 'related_object_id': artist.id}) response = self.client.post(url, {'radio_type': 'artist', 'related_object_id': artist.id})
session = models.RadioSession.objects.latest('id') session = models.RadioSession.objects.latest('id')

Wyświetl plik

@ -42,7 +42,7 @@ class UserTestCase(TestCase):
self.assertEqual(response.status_code, 403) self.assertEqual(response.status_code, 403)
def test_can_fetch_data_from_api(self): def test_can_fetch_data_from_api(self):
url = self.reverse('api:users:users-me') url = self.reverse('api:v1:users:users-me')
response = self.client.get(url) response = self.client.get(url)
# login required # login required
self.assertEqual(response.status_code, 401) self.assertEqual(response.status_code, 401)

Wyświetl plik

@ -4,7 +4,7 @@ class Config {
if (!this.BACKEND_URL.endsWith('/')) { if (!this.BACKEND_URL.endsWith('/')) {
this.BACKEND_URL += '/' this.BACKEND_URL += '/'
} }
this.API_URL = this.BACKEND_URL + 'api/' this.API_URL = this.BACKEND_URL + 'api/v1/'
} }
} }