From 28a2169c8567d28907831808d5310714dac48f8f Mon Sep 17 00:00:00 2001 From: Chris Fulljames Date: Fri, 4 Apr 2025 19:16:13 -0400 Subject: [PATCH] Separate song list tests --- test/test_offline.py | 127 ++--------------------------------------- test/test_songlists.py | 111 +++++++++++++++++++++++++++++++++++ test/utils.py | 8 +++ 3 files changed, 124 insertions(+), 122 deletions(-) create mode 100644 test/test_songlists.py diff --git a/test/test_offline.py b/test/test_offline.py index 4984015..b4b7419 100644 --- a/test/test_offline.py +++ b/test/test_offline.py @@ -1,128 +1,11 @@ -import html -import json -import re from pathlib import Path import pytest -from .utils import create_user, create_user_and_song, upload_song +from .utils import create_user, create_user_and_song, upload_song, get_song_list_from_page TEST_DATA = Path(__file__).parent / "data" -################################################################################ -# Song Lists (Profile/Homepage/Songs) -################################################################################ - -# Profile - -def _get_song_list_from_page(client, url): - response = client.get(url) - matches = re.findall('data-song="(.*)">', response.data.decode()) - return [json.loads(html.unescape(m)) for m in matches] - -def test_profile_songs_one_song(client): - create_user_and_song(client) - songs = _get_song_list_from_page(client, "/users/user") - - assert len(songs) == 1 - assert songs[0]["title"] == "song title" - -def test_profile_songs_two_songs(client): - create_user_and_song(client) - upload_song(client, b"Success", title="title2") - songs = _get_song_list_from_page(client, "/users/user") - - # Newest first - assert len(songs) == 2 - assert songs[0]["title"] == "title2" - assert songs[1]["title"] == "song title" - -# Homepage - -def test_homepage_songs_two_songs(client): - create_user(client, "user1", "password", login=True) - upload_song(client, b"Success", user="user1", title="song1") - - create_user(client, "user2", "password", login=True) - upload_song(client, b"Success", user="user2", title="song2") - - songs = _get_song_list_from_page(client, "/") - - # Newest first (all songs) - assert len(songs) == 2 - assert songs[0]["title"] == "song2" - assert songs[0]["username"] == "user2" - - assert songs[1]["title"] == "song1" - assert songs[1]["username"] == "user1" - -# Songs by tag - -def test_songs_by_tag_no_user(client): - create_user(client, "user1", "password", login=True) - upload_song(client, b"Success", user="user1", title="song1", tags="tag") - - create_user(client, "user2", "password", login=True) - upload_song(client, b"Success", user="user2", title="song2", tags="") - upload_song(client, b"Success", user="user2", title="song3", tags="tag") - - songs = _get_song_list_from_page(client, "/songs?tag=tag") - - # Newest first - assert len(songs) == 2 - assert songs[0]["title"] == "song3" - assert songs[0]["username"] == "user2" - - # Song 2 not shown, no tag - - assert songs[1]["title"] == "song1" - assert songs[1]["username"] == "user1" - -def test_songs_by_tag_with_user(client): - create_user(client, "user1", "password", login=True) - upload_song(client, b"Success", user="user1", title="song1", tags="tag") - upload_song(client, b"Success", user="user1", title="song2", tags="") - - create_user(client, "user2", "password", login=True) - upload_song(client, b"Success", user="user2", title="song3", tags="tag") - - songs = _get_song_list_from_page(client, "/songs?tag=tag&user=user1") - - assert len(songs) == 1 - assert songs[0]["title"] == "song1" - assert songs[0]["username"] == "user1" - # Song 2 not shown, no tag; song 3 not shown, by different user - -def test_songs_by_user(client): - create_user(client, "user1", "password", login=True) - upload_song(client, b"Success", user="user1", title="song1", tags="tag") - upload_song(client, b"Success", user="user1", title="song2", tags="") - - create_user(client, "user2", "password", login=True) - upload_song(client, b"Success", user="user2", title="song3", tags="tag") - - songs = _get_song_list_from_page(client, "/songs?user=user1") - - # Newest first - assert len(songs) == 2 - assert songs[0]["title"] == "song2" - assert songs[0]["username"] == "user1" - - assert songs[1]["title"] == "song1" - assert songs[1]["username"] == "user1" - - # Song 3 not shown, by different user - -def test_single_song(client): - create_user(client, "user1", "password", login=True) - upload_song(client, b"Success", user="user1", title="song1", tags="tag") - - songs = _get_song_list_from_page(client, "/song/1/1?action=view") - - assert len(songs) == 1 - assert songs[0]["title"] == "song1" - assert songs[0]["username"] == "user1" - ################################################################################ # Site News ################################################################################ @@ -657,12 +540,12 @@ def test_edit_playlist_change_song_order(client): upload_song(client, b"Successfully uploaded") client.post("/append-to-playlist", data={"playlistid": "1", "songid": "1"}) client.post("/append-to-playlist", data={"playlistid": "1", "songid": "2"}) - songs = _get_song_list_from_page(client, "/playlists/1") + songs = get_song_list_from_page(client, "/playlists/1") assert songs[0]["songid"] == 1 assert songs[1]["songid"] == 2 client.post("/edit-playlist/1", data={"name": "my playlist", "type": "private", "songids": "2,1"}) - songs = _get_song_list_from_page(client, "/playlists/1") + songs = get_song_list_from_page(client, "/playlists/1") assert songs[0]["songid"] == 2 assert songs[1]["songid"] == 1 @@ -671,11 +554,11 @@ def test_edit_playlist_remove_song(client): upload_song(client, b"Successfully uploaded") client.post("/append-to-playlist", data={"playlistid": "1", "songid": "1"}) client.post("/append-to-playlist", data={"playlistid": "1", "songid": "2"}) - songs = _get_song_list_from_page(client, "/playlists/1") + songs = get_song_list_from_page(client, "/playlists/1") assert len(songs) == 2 client.post("/edit-playlist/1", data={"name": "my playlist", "type": "private", "songids": "2"}) - songs = _get_song_list_from_page(client, "/playlists/1") + songs = get_song_list_from_page(client, "/playlists/1") assert len(songs) == 1 assert songs[0]["songid"] == 2 diff --git a/test/test_songlists.py b/test/test_songlists.py new file mode 100644 index 0000000..d86f3ab --- /dev/null +++ b/test/test_songlists.py @@ -0,0 +1,111 @@ +from .utils import create_user_and_song, create_user, upload_song, get_song_list_from_page + +################################################################################ +# Song Lists (Profile/Homepage/Songs) +################################################################################ + +# Profile + +def test_profile_songs_one_song(client): + create_user_and_song(client) + songs = get_song_list_from_page(client, "/users/user") + + assert len(songs) == 1 + assert songs[0]["title"] == "song title" + +def test_profile_songs_two_songs(client): + create_user_and_song(client) + upload_song(client, b"Success", title="title2") + songs = get_song_list_from_page(client, "/users/user") + + # Newest first + assert len(songs) == 2 + assert songs[0]["title"] == "title2" + assert songs[1]["title"] == "song title" + +# Homepage + +def test_homepage_songs_two_songs(client): + create_user(client, "user1", "password", login=True) + upload_song(client, b"Success", user="user1", title="song1") + + create_user(client, "user2", "password", login=True) + upload_song(client, b"Success", user="user2", title="song2") + + songs = get_song_list_from_page(client, "/") + + # Newest first (all songs) + assert len(songs) == 2 + assert songs[0]["title"] == "song2" + assert songs[0]["username"] == "user2" + + assert songs[1]["title"] == "song1" + assert songs[1]["username"] == "user1" + +# Songs by tag + +def test_songs_by_tag_no_user(client): + create_user(client, "user1", "password", login=True) + upload_song(client, b"Success", user="user1", title="song1", tags="tag") + + create_user(client, "user2", "password", login=True) + upload_song(client, b"Success", user="user2", title="song2", tags="") + upload_song(client, b"Success", user="user2", title="song3", tags="tag") + + songs = get_song_list_from_page(client, "/songs?tag=tag") + + # Newest first + assert len(songs) == 2 + assert songs[0]["title"] == "song3" + assert songs[0]["username"] == "user2" + + # Song 2 not shown, no tag + + assert songs[1]["title"] == "song1" + assert songs[1]["username"] == "user1" + +def test_songs_by_tag_with_user(client): + create_user(client, "user1", "password", login=True) + upload_song(client, b"Success", user="user1", title="song1", tags="tag") + upload_song(client, b"Success", user="user1", title="song2", tags="") + + create_user(client, "user2", "password", login=True) + upload_song(client, b"Success", user="user2", title="song3", tags="tag") + + songs = get_song_list_from_page(client, "/songs?tag=tag&user=user1") + + assert len(songs) == 1 + assert songs[0]["title"] == "song1" + assert songs[0]["username"] == "user1" + # Song 2 not shown, no tag; song 3 not shown, by different user + +def test_songs_by_user(client): + create_user(client, "user1", "password", login=True) + upload_song(client, b"Success", user="user1", title="song1", tags="tag") + upload_song(client, b"Success", user="user1", title="song2", tags="") + + create_user(client, "user2", "password", login=True) + upload_song(client, b"Success", user="user2", title="song3", tags="tag") + + songs = get_song_list_from_page(client, "/songs?user=user1") + + # Newest first + assert len(songs) == 2 + assert songs[0]["title"] == "song2" + assert songs[0]["username"] == "user1" + + assert songs[1]["title"] == "song1" + assert songs[1]["username"] == "user1" + + # Song 3 not shown, by different user + +def test_single_song(client): + create_user(client, "user1", "password", login=True) + upload_song(client, b"Success", user="user1", title="song1", tags="tag") + + songs = get_song_list_from_page(client, "/song/1/1?action=view") + + assert len(songs) == 1 + assert songs[0]["title"] == "song1" + assert songs[0]["username"] == "user1" + diff --git a/test/utils.py b/test/utils.py index bd46d7c..229d5f8 100644 --- a/test/utils.py +++ b/test/utils.py @@ -1,3 +1,6 @@ +import html +import json +import re from pathlib import Path HOST = "http://littlesong.place:8000" @@ -61,3 +64,8 @@ def upload_song(client, msg, error=False, songid=None, user="user", userid=1, fi response = client.get(f"/users/{user}") assert msg in response.data +def get_song_list_from_page(client, url): + response = client.get(url) + matches = re.findall('data-song="(.*)">', response.data.decode()) + return [json.loads(html.unescape(m)) for m in matches] + -- 2.39.5