1
0
mirror of https://github.com/spl0k/supysonic.git synced 2024-12-22 08:56:17 +00:00
supysonic/tests/frontend/test_playlist.py
2022-12-31 16:47:24 +01:00

119 lines
3.9 KiB
Python

# This file is part of Supysonic.
# Supysonic is a Python implementation of the Subsonic server API.
#
# Copyright (C) 2017-2022 Alban 'spl0k' Féron
#
# Distributed under terms of the GNU AGPLv3 license.
import unittest
import uuid
from supysonic.db import Folder, Artist, Album, Track, Playlist, User
from .frontendtestbase import FrontendTestBase
class PlaylistTestCase(FrontendTestBase):
def setUp(self):
super().setUp()
folder = Folder.create(name="Root", path="tests/assets", root=True)
artist = Artist.create(name="Artist!")
album = Album.create(name="Album!", artist=artist)
track = Track.create(
path="tests/assets/23bytes",
title="23bytes",
artist=artist,
album=album,
folder=folder,
root_folder=folder,
duration=2,
disc=1,
number=1,
bitrate=320,
last_modification=0,
)
playlist = Playlist.create(name="Playlist!", user=User.get(name="alice"))
for _ in range(4):
playlist.add(track)
playlist.save()
self.playlistid = playlist.id
def test_index(self):
self._login("alice", "Alic3")
rv = self.client.get("/playlist")
self.assertIn("My playlists", rv.data)
def test_details(self):
self._login("alice", "Alic3")
rv = self.client.get("/playlist/string", follow_redirects=True)
self.assertIn("Invalid", rv.data)
rv = self.client.get("/playlist/" + str(uuid.uuid4()), follow_redirects=True)
self.assertIn("Unknown", rv.data)
rv = self.client.get("/playlist/" + str(self.playlistid))
self.assertIn("Playlist!", rv.data)
self.assertIn("23bytes", rv.data)
self.assertIn("Artist!", rv.data)
self.assertIn("Album!", rv.data)
def test_update(self):
self._login("bob", "B0b")
rv = self.client.post("/playlist/string", follow_redirects=True)
self.assertIn("Invalid", rv.data)
rv = self.client.post("/playlist/" + str(uuid.uuid4()), follow_redirects=True)
self.assertIn("Unknown", rv.data)
rv = self.client.post(
"/playlist/" + str(self.playlistid), follow_redirects=True
)
self.assertNotIn("updated", rv.data)
self.assertIn("not allowed", rv.data)
self._logout()
self._login("alice", "Alic3")
rv = self.client.post(
"/playlist/" + str(self.playlistid), follow_redirects=True
)
self.assertNotIn("updated", rv.data)
self.assertIn("Missing", rv.data)
self.assertEqual(Playlist[self.playlistid].name, "Playlist!")
rv = self.client.post(
"/playlist/" + str(self.playlistid),
data={"name": "abc", "public": True},
follow_redirects=True,
)
self.assertIn("updated", rv.data)
self.assertNotIn("not allowed", rv.data)
playlist = Playlist[self.playlistid]
self.assertEqual(playlist.name, "abc")
self.assertTrue(playlist.public)
def test_delete(self):
self._login("bob", "B0b")
rv = self.client.get("/playlist/del/string", follow_redirects=True)
self.assertIn("Invalid", rv.data)
rv = self.client.get(
"/playlist/del/" + str(uuid.uuid4()), follow_redirects=True
)
self.assertIn("Unknown", rv.data)
rv = self.client.get(
"/playlist/del/" + str(self.playlistid), follow_redirects=True
)
self.assertIn("not allowed", rv.data)
self.assertEqual(Playlist.select().count(), 1)
self._logout()
self._login("alice", "Alic3")
rv = self.client.get(
"/playlist/del/" + str(self.playlistid), follow_redirects=True
)
self.assertIn("deleted", rv.data)
self.assertEqual(Playlist.select().count(), 0)
if __name__ == "__main__":
unittest.main()