kopia lustrzana https://dev.funkwhale.audio/funkwhale/funkwhale
149 wiersze
5.9 KiB
Python
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
|