tiddl3 (#194)

This commit is contained in:
Oskar Dudziński
2025-11-08 15:18:44 +01:00
committed by GitHub
parent c255d42283
commit b87888536e
80 changed files with 4029 additions and 2204 deletions
+206
View File
@@ -0,0 +1,206 @@
import pytest
from pytest_mock import MockerFixture, MockType
from tiddl.core.api.api import (
TidalAPI,
TidalClient,
Limits,
DO_NOT_CACHE,
EXPIRE_IMMEDIATELY,
)
from tiddl.core.api.models import (
Album,
Artist,
Playlist,
Track,
Video,
AlbumItems,
AlbumItemsCredits,
ArtistAlbumsItems,
Favorites,
TrackLyrics,
PlaylistItems,
MixItems,
Search,
SessionResponse,
TrackStream,
VideoStream,
)
def test_tidal_api_init(mocker: MockerFixture):
mock_client = mocker.Mock(spec=TidalClient)
api = TidalAPI(client=mock_client, user_id="u123", country_code="US")
assert api.client is mock_client
assert api.user_id == "u123"
assert api.country_code == "US"
@pytest.fixture
def mock_client(mocker: MockerFixture):
return mocker.Mock(spec=TidalClient)
@pytest.fixture
def api(mock_client: MockType):
return TidalAPI(client=mock_client, user_id="u123", country_code="US")
def test_get_album(api: TidalAPI, mock_client: MockType):
api.get_album(album_id=1)
mock_client.fetch.assert_called_once_with(
Album, "albums/1", {"countryCode": "US"}, expire_after=3600
)
def test_get_album_items(api: TidalAPI, mock_client: MockType):
api.get_album_items(1)
mock_client.fetch.assert_called_once_with(
AlbumItems,
"albums/1/items",
{"countryCode": "US", "limit": Limits.ALBUM_ITEMS, "offset": 0},
expire_after=3600,
)
def test_get_album_items_credits(api: TidalAPI, mock_client: MockType):
api.get_album_items_credits(1)
mock_client.fetch.assert_called_once_with(
AlbumItemsCredits,
"albums/1/items/credits",
{"countryCode": "US", "limit": Limits.ALBUM_ITEMS, "offset": 0},
expire_after=3600,
)
def test_get_artist(api: TidalAPI, mock_client: MockType):
api.get_artist(1)
mock_client.fetch.assert_called_once_with(
Artist, "artists/1", {"countryCode": "US"}, expire_after=3600
)
def test_get_artist_albums(api: TidalAPI, mock_client: MockType):
api.get_artist_albums(1)
mock_client.fetch.assert_called_once_with(
ArtistAlbumsItems,
"artists/1/albums",
{
"countryCode": "US",
"limit": Limits.ARTIST_ALBUMS,
"offset": 0,
"filter": "ALBUMS",
},
expire_after=3600,
)
def test_get_mix(api: TidalAPI, mock_client: MockType):
api.get_mix_items("abcd-1234")
mock_client.fetch.assert_called_once_with(
MixItems,
"mixes/abcd-1234/items",
{"countryCode": "US", "limit": Limits.MIX_ITEMS, "offset": 0},
expire_after=3600,
)
def test_get_favorites(api: TidalAPI, mock_client: MockType):
api.get_favorites()
mock_client.fetch.assert_called_once_with(
Favorites,
"users/u123/favorites/ids",
{"countryCode": "US"},
expire_after=EXPIRE_IMMEDIATELY,
)
def test_get_playlist(api: TidalAPI, mock_client: MockType):
api.get_playlist("uuid")
mock_client.fetch.assert_called_once_with(
Playlist,
"playlists/uuid",
{"countryCode": "US"},
expire_after=EXPIRE_IMMEDIATELY,
)
def test_get_playlist_items(api: TidalAPI, mock_client: MockType):
api.get_playlist_items("uuid")
mock_client.fetch.assert_called_once_with(
PlaylistItems,
"playlists/uuid/items",
{"countryCode": "US", "limit": Limits.PLAYLIST_ITEMS, "offset": 0},
expire_after=EXPIRE_IMMEDIATELY,
)
def test_get_search(api: TidalAPI, mock_client: MockType):
api.get_search("query")
mock_client.fetch.assert_called_once_with(
Search,
"search",
{"countryCode": "US", "query": "query"},
expire_after=DO_NOT_CACHE,
)
def test_get_session(api: TidalAPI, mock_client: MockType):
api.get_session()
mock_client.fetch.assert_called_once_with(
SessionResponse, "sessions", expire_after=DO_NOT_CACHE
)
def test_get_track_lyrics(api: TidalAPI, mock_client: MockType):
api.get_track_lyrics(1)
mock_client.fetch.assert_called_once_with(
TrackLyrics,
"tracks/1/lyrics",
{"countryCode": "US"},
expire_after=3600,
)
def test_get_track(api: TidalAPI, mock_client: MockType):
api.get_track(1)
mock_client.fetch.assert_called_once_with(
Track,
"tracks/1",
{"countryCode": "US"},
expire_after=3600,
)
def test_get_track_stream(api: TidalAPI, mock_client: MockType):
api.get_track_stream(1, "HIGH")
mock_client.fetch.assert_called_once_with(
TrackStream,
"tracks/1/playbackinfopostpaywall",
{"audioquality": "HIGH", "playbackmode": "STREAM", "assetpresentation": "FULL"},
expire_after=DO_NOT_CACHE,
)
def test_get_video(api: TidalAPI, mock_client: MockType):
api.get_video(1)
mock_client.fetch.assert_called_once_with(
Video,
"videos/1",
{"countryCode": "US"},
expire_after=3600,
)
def test_get_video_stream(api: TidalAPI, mock_client: MockType):
api.get_video_stream(1, "HIGH")
mock_client.fetch.assert_called_once_with(
VideoStream,
"videos/1/playbackinfopostpaywall",
{"videoquality": "HIGH", "playbackmode": "STREAM", "assetpresentation": "FULL"},
expire_after=DO_NOT_CACHE,
)