funkwhale/api/tests/playlists/test_urls_v2.py

149 wiersze
5.9 KiB
Python

import json
from defusedxml import ElementTree as etree
from django.shortcuts import resolve_url
from django.urls import reverse
def test_can_get_playlist_list(factories, logged_in_api_client):
logged_in_api_client.user.create_actor()
factories["playlists.Playlist"].create_batch(5)
url = reverse("api:v2:playlists-list")
headers = {"Content-Type": "application/json"}
response = logged_in_api_client.get(url, headers=headers)
data = json.loads(response.content)
assert response.status_code == 200
assert data["count"] == 5
def test_can_get_playlists_octet_stream(factories, logged_in_api_client):
logged_in_api_client.user.create_actor()
pl = factories["playlists.Playlist"]()
factories["playlists.PlaylistTrack"](playlist=pl)
factories["playlists.PlaylistTrack"](playlist=pl)
factories["playlists.PlaylistTrack"](playlist=pl)
url = reverse("api:v2:playlists-detail", kwargs={"uuid": pl.uuid})
headers = {"Accept": "application/octet-stream"}
response = logged_in_api_client.get(url, headers=headers)
el = etree.fromstring(response.content)
ns = {"xspf": "http://xspf.org/ns/0/"}
assert response.status_code == 200
assert el.findtext("./xspf:title", namespaces=ns) == pl.name
def test_can_get_playlists_json(factories, logged_in_api_client):
logged_in_api_client.user.create_actor()
pl = factories["playlists.Playlist"]()
url = reverse("api:v2:playlists-detail", kwargs={"uuid": pl.uuid})
response = logged_in_api_client.get(url, format="json")
assert response.status_code == 200
assert response.data["name"] == pl.name
def test_can_get_user_playlists_list(factories, logged_in_api_client):
logged_in_api_client.user.create_actor()
user = factories["users.User"](with_actor=True)
factories["playlists.Playlist"](actor=user.actor)
url = reverse("api:v2:playlists-list")
url = resolve_url(url) + "?user=me"
response = logged_in_api_client.get(url)
data = json.loads(response.content.decode("utf-8"))
assert response.status_code == 200
assert data["count"] == 1
def test_can_post_user_playlists(logged_in_api_client):
logged_in_api_client.user.create_actor()
playlist = {"name": "Les chiennes de l'hexagone", "privacy_level": "me"}
url = reverse("api:v2:playlists-list")
response = logged_in_api_client.post(url, playlist, format="json")
data = json.loads(response.content.decode("utf-8"))
assert response.status_code == 201
assert data["name"] == "Les chiennes de l'hexagone"
assert data["privacy_level"] == "me"
def test_can_post_playlists_octet_stream(factories, logged_in_api_client):
logged_in_api_client.user.create_actor()
artist = factories["music.Artist"](name="Davinhor")
album = factories["music.Album"](
title="Racisme en pls", artist_credit__artist=artist
)
factories["music.Track"](
title="Opinel 12", artist_credit__artist=artist, album=album
)
url = reverse("api:v2:playlists-list")
data = open("./tests/playlists/test.xspf", "rb").read()
response = logged_in_api_client.post(url, data=data, format="xspf")
data = json.loads(response.content)
assert response.status_code == 201
assert data["name"] == "Test"
def test_can_post_playlists_octet_stream_invalid_track(factories, logged_in_api_client):
logged_in_api_client.user.create_actor()
url = reverse("api:v2:playlists-list")
data = open("./tests/playlists/test.xspf", "rb").read()
response = logged_in_api_client.post(url, data=data, format="xspf")
data = json.loads(response.content)
assert response.status_code == 201
assert data["name"] == "Test"
def test_can_patch_playlists_octet_stream(factories, logged_in_api_client):
logged_in_api_client.user.create_actor()
pl = factories["playlists.Playlist"](actor=logged_in_api_client.user.actor)
artist = factories["music.Artist"](name="Davinhor")
album = factories["music.Album"](
title="Racisme en pls", artist_credit__artist=artist
)
track = factories["music.Track"](
title="Opinel 12", artist_credit__artist=artist, album=album
)
url = reverse("api:v2:playlists-detail", kwargs={"uuid": pl.uuid})
data = open("./tests/playlists/test.xspf", "rb").read()
response = logged_in_api_client.patch(url, data=data, format="xspf")
pl.refresh_from_db()
assert response.status_code == 201
assert pl.name == "Test"
assert pl.playlist_tracks.all()[0].track.title == track.title
def test_can_get_playlists_track(factories, logged_in_api_client):
logged_in_api_client.user.create_actor()
pl = factories["playlists.Playlist"]()
plt = factories["playlists.PlaylistTrack"](playlist=pl)
url = reverse("api:v2:playlists-tracks", kwargs={"uuid": pl.uuid})
response = logged_in_api_client.get(url)
data = json.loads(response.content.decode("utf-8"))
assert response.status_code == 200
assert data["count"] == 1
assert data["results"][0]["track"]["title"] == plt.track.title
def test_can_get_playlists_releases(factories, logged_in_api_client):
logged_in_api_client.user.create_actor()
playlist = factories["playlists.Playlist"]()
plt = factories["playlists.PlaylistTrack"](playlist=playlist)
url = reverse("api:v2:playlists-albums", kwargs={"uuid": playlist.uuid})
response = logged_in_api_client.get(url)
data = json.loads(response.content)
assert response.status_code == 200
assert data[0]["title"] == plt.track.album.title
def test_can_get_playlists_artists(factories, logged_in_api_client):
logged_in_api_client.user.create_actor()
playlist = factories["playlists.Playlist"]()
plt = factories["playlists.PlaylistTrack"](playlist=playlist)
url = reverse("api:v2:playlists-artists", kwargs={"uuid": playlist.uuid})
response = logged_in_api_client.get(url)
data = json.loads(response.content)
assert response.status_code == 200
assert data[0]["name"] == plt.track.get_artist_credit_string