mirror of
https://github.com/oskvr37/tiddl.git
synced 2026-06-13 04:05:08 +03:00
207 lines
5.3 KiB
Python
207 lines
5.3 KiB
Python
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,
|
|
)
|