diff --git a/tests/conftest.py b/tests/conftest.py index bb3faad0..9b1aefe0 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,11 +1,8 @@ -from functools import partial -import os -import betamax +# -*- coding: utf-8 -*- +import betamax, os, plexapi +import pytest, requests from betamax_serializers import pretty_json -import pytest -import requests - -import plexapi +from functools import partial token = os.environ.get('PLEX_TOKEN') test_token = os.environ.get('PLEX_TEST_TOKEN') @@ -16,25 +13,18 @@ test_password = os.environ.get('PLEX_TEST_PASSWORD') @pytest.fixture(scope='session') def pms(request): from plexapi.server import PlexServer - sess = requests.Session() - - """ - CASSETTE_LIBRARY_DIR = 'response/' - - betamax.Betamax.register_serializer(pretty_json.PrettyJSONSerializer) - config = betamax.Betamax.configure() - config.define_cassette_placeholder('MASKED', token) - config.define_cassette_placeholder('MASKED', test_token) - - recorder = betamax.Betamax(sess, cassette_library_dir=CASSETTE_LIBRARY_DIR) - recorder.use_cassette('http_responses', serialize_with='prettyjson') # record='new_episodes' - recorder.start() - """ + # CASSETTE_LIBRARY_DIR = 'response/' + # betamax.Betamax.register_serializer(pretty_json.PrettyJSONSerializer) + # config = betamax.Betamax.configure() + # config.define_cassette_placeholder('MASKED', token) + # config.define_cassette_placeholder('MASKED', test_token) + # recorder = betamax.Betamax(sess, cassette_library_dir=CASSETTE_LIBRARY_DIR) + # recorder.use_cassette('http_responses', serialize_with='prettyjson') # record='new_episodes' + # recorder.start() url = 'http://138.68.157.5:32400' assert test_token assert url - pms = PlexServer(url, test_token, session=sess) #request.addfinalizer(recorder.stop) return pms @@ -43,20 +33,17 @@ def pms(request): @pytest.fixture() def freshpms(): from plexapi.server import PlexServer - sess = requests.Session() - url = 'http://138.68.157.5:32400' assert test_token assert url - pms = PlexServer(url, test_token, session=sess) return pms def pytest_addoption(parser): parser.addoption("--req_client", action="store_true", - help="Run tests that interact with a client") + help="Run tests that interact with a client") def pytest_runtest_setup(item): @@ -83,7 +70,6 @@ def a_movie(pms): return m[0] - @pytest.fixture() def a_tv_section(pms): sec = pms.library.section('TV Shows') @@ -146,7 +132,6 @@ def a_episode(a_show): return ep - @pytest.fixture() def a_photo_album(pms): sec = pms.library.section('Photos') diff --git a/tests/test_actions.py b/tests/test_actions.py index 3108462a..37a6e8d2 100644 --- a/tests/test_actions.py +++ b/tests/test_actions.py @@ -1,3 +1,5 @@ +# -*- coding: utf-8 -*- + def test_mark_movie_watched(a_movie): a_movie.markUnwatched() print('Marking movie watched: %s' % a_movie) diff --git a/tests/test_audio.py b/tests/test_audio.py index ac216cf4..a00ac0c3 100644 --- a/tests/test_audio.py +++ b/tests/test_audio.py @@ -1,6 +1,5 @@ # -*- coding: utf-8 -*- - def test_audio_Artist_attr(a_artist): m = a_artist m.reload() @@ -50,10 +49,6 @@ def test_audio_Artist_albums(a_artist): assert len(albums) == 1 and albums[0].title == 'Unmastered Impulses' - - - - def test_audio_Album_attrs(a_music_album): m = a_music_album assert str(m.addedAt.date()) == '2017-01-17' @@ -113,11 +108,9 @@ def test_audio_Album_tracks(a_music_album): assert tracks[0].viewOffset == 0 - def test_audio_Album_track(a_music_album): # this is not reloaded. its not that much info missing. track = a_music_album.track('Holy Moment') - assert str(track.addedAt.date()) == '2017-01-17' assert track.duration == 298606 assert track.grandparentKey == '/library/metadata/20' @@ -176,12 +169,11 @@ def test_audio_Album_track(a_music_album): assert par0.size == 14360402 - - def test_audio_Album_get(): - """ just a alias for track, lets skip it""" + """ Just a alias for track(); skip it. """ pass + def test_audio_Album_artist(a_music_album): artist = a_music_album.artist() artist.title == 'Infinite State' @@ -190,7 +182,6 @@ def test_audio_Album_artist(a_music_album): def test_audio_Track_attrs(a_music_album): track = a_music_album.get('Holy Moment') track.reload() - assert str(track.addedAt.date()) == '2017-01-17' assert str(track.art) == '__NA__' assert str(track.chapterSource) == '__NA__' @@ -286,10 +277,10 @@ def test_audio_Track_attrs(a_music_album): assert str0.type == 2 - def test_audio_Track_album(a_music_album): assert a_music_album.tracks()[0].album() == a_music_album + def test_audio_Track_artist(a_music_album, a_artist): assert a_music_album.tracks()[0].artist() == a_artist @@ -298,7 +289,6 @@ def test_audio_Audio_section(a_artist, a_music_album, a_track): assert a_artist.section() assert a_music_album.section() assert a_track.section() - assert a_track.section() == a_music_album.section() == a_artist.section() @@ -315,16 +305,3 @@ def test_audio_album_download(monkeydownload, a_music_album, tmpdir): def test_audio_Artist_download(monkeydownload, a_artist, tmpdir): f = a_artist.download(savepath=str(tmpdir)) assert len(f) == 14 - - - - - - - - - - - - - diff --git a/tests/test_client.py b/tests/test_client.py index 14d14fb0..e6b6cd7a 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -1,173 +1,217 @@ +# -*- coding: utf-8 -*- import pytest + @pytest.mark.req_client def _test_client_PlexClient__loadData(pms): pass + @pytest.mark.req_client def _test_client_PlexClient_connect(pms): pass + @pytest.mark.req_client def _test_client_PlexClient_contextMenu(pms): pass + @pytest.mark.req_client def _test_client_PlexClient_goBack(pms): pass + @pytest.mark.req_client def _test_client_PlexClient_goToHome(pms): pass + @pytest.mark.req_client def _test_client_PlexClient_goToMedia(pms): pass + @pytest.mark.req_client def _test_client_PlexClient_goToMusic(pms): pass + @pytest.mark.req_client def _test_client_PlexClient_headers(pms): pass + @pytest.mark.req_client def _test_client_PlexClient_isPlayingMedia(pms): pass + @pytest.mark.req_client def _test_client_PlexClient_moveDown(pms): pass + @pytest.mark.req_client def _test_client_PlexClient_moveLeft(pms): pass + @pytest.mark.req_client def _test_client_PlexClient_moveRight(pms): pass + @pytest.mark.req_client def _test_client_PlexClient_moveUp(pms): pass + @pytest.mark.req_client def _test_client_PlexClient_nextLetter(pms): pass + @pytest.mark.req_client def _test_client_PlexClient_pageDown(pms): pass + @pytest.mark.req_client def _test_client_PlexClient_pageUp(pms): pass + @pytest.mark.req_client def _test_client_PlexClient_pause(pms): pass + @pytest.mark.req_client def _test_client_PlexClient_play(pms): pass + @pytest.mark.req_client def _test_client_PlexClient_playMedia(pms): pass + @pytest.mark.req_client def _test_client_PlexClient_previousLetter(pms): pass + @pytest.mark.req_client def _test_client_PlexClient_proxyThroughServer(pms): pass + @pytest.mark.req_client def _test_client_PlexClient_query(pms): pass + @pytest.mark.req_client def _test_client_PlexClient_refreshPlayQueue(pms): pass + @pytest.mark.req_client def _test_client_PlexClient_seekTo(pms): pass + @pytest.mark.req_client def _test_client_PlexClient_select(pms): pass + @pytest.mark.req_client def _test_client_PlexClient_sendCommand(pms): pass + @pytest.mark.req_client def _test_client_PlexClient_setAudioStream(pms): pass + @pytest.mark.req_client def _test_client_PlexClient_setParameters(pms): pass + @pytest.mark.req_client def _test_client_PlexClient_setRepeat(pms): pass + @pytest.mark.req_client def _test_client_PlexClient_setShuffle(pms): pass + @pytest.mark.req_client def _test_client_PlexClient_setStreams(pms): pass + @pytest.mark.req_client def _test_client_PlexClient_setSubtitleStream(pms): pass + @pytest.mark.req_client def _test_client_PlexClient_setVideoStream(pms): pass + @pytest.mark.req_client def _test_client_PlexClient_setVolume(pms): pass + @pytest.mark.req_client def _test_client_PlexClient_skipNext(pms): pass + @pytest.mark.req_client def _test_client_PlexClient_skipPrevious(pms): pass + @pytest.mark.req_client def _test_client_PlexClient_skipTo(pms): pass + @pytest.mark.req_client def _test_client_PlexClient_stepBack(pms): pass + @pytest.mark.req_client def _test_client_PlexClient_stepForward(pms): pass + @pytest.mark.req_client def _test_client_PlexClient_stop(pms): pass + @pytest.mark.req_client def _test_client_PlexClient_timeline(pms): pass + @pytest.mark.req_client def _test_client_PlexClient_toggleOSD(pms): pass + @pytest.mark.req_client def _test_client_PlexClient_url(pms): pass diff --git a/tests/test_library.py b/tests/test_library.py index fde5c9f2..6403e2a4 100644 --- a/tests/test_library.py +++ b/tests/test_library.py @@ -1,20 +1,14 @@ # -*- coding: utf-8 -*- import pytest - from plexapi.exceptions import NotFound -# func naming should follow: -# tests_file_class_method_some_description - def test_library_Library_section(pms): sections = pms.library.sections() assert len(sections) == 4 - lfs = 'TV Shows' section_name = pms.library.section(lfs) assert section_name.title == lfs - with pytest.raises(NotFound): assert pms.library.section('gfdsas') @@ -23,11 +17,9 @@ def test_library_Library_sectionByID_is_equal_section(pms, freshpms): # test that sctionmyID refreshes the section if the key is missing # this is needed if there isnt any cached sections assert freshpms.library.sectionByID('1') - assert pms.library.sectionByID('1').uuid == pms.library.section('Movies').uuid - def test_library_sectionByID_with_attrs(pms): m = pms.library.sectionByID('1') assert m.agent == 'com.plexapp.agents.imdb' @@ -72,6 +64,7 @@ def test_library_get(pms): m = pms.library.get('16 blocks') assert m.title == '16 Blocks' + def test_library_Library_cleanBundle(pms): pms.library.cleanBundles() @@ -79,9 +72,11 @@ def test_library_Library_cleanBundle(pms): def test_library_Library_optimize(pms): pms.library.optimize() + def test_library_Library_emptyTrash(pms): pms.library.emptyTrash() + def _test_library_Library_refresh(pms): pms.library.refresh() # fix mangle and proof the sections attrs @@ -134,18 +129,11 @@ def test_library_PhotoSection_searchAlbums(a_photo_section): print([i.TYPE for i in albums]) - def test_library_PhotoSection_searchPhotos(a_photo_section): assert len(a_photo_section.searchPhotos('lolcat2')) - - - - - -#### Start on library search - +# Start on library search def test_library_and_section_search_for_movie(pms): find = '16 blocks' l_search = pms.library.search(find) @@ -157,7 +145,6 @@ def test_search_with_apostrophe(pms): show_title = "Marvel's Daredevil" # Test ' in show title result_server = pms.search(show_title) result_shows = pms.library.section('TV Shows').search(show_title) - assert result_server assert result_shows assert result_server == result_shows @@ -166,7 +153,6 @@ def test_search_with_apostrophe(pms): def test_crazy_search(pms, a_movie): movie = a_movie movies = pms.library.section('Movies') - assert movie in pms.library.search(genre=29, libtype='movie') assert movie in movies.search(actor=movie.actors[0], sort='titleSort'), 'Unable to search movie by actor.' assert movie in movies.search(director=movie.directors[0]), 'Unable to search movie by director.' diff --git a/tests/test_myplex.py b/tests/test_myplex.py index 1c6dbc0c..5164d068 100644 --- a/tests/test_myplex.py +++ b/tests/test_myplex.py @@ -1,13 +1,10 @@ # -*- coding: utf-8 -*- -import pytest - def test_myplex_accounts(plex_account, pms): account = plex_account assert account, 'Must specify username, password & resource to run this test.' print('MyPlexAccount:') print('username: %s' % account.username) - #print('authenticationToken: %s' % account.authenticationToken) print('email: %s' % account.email) print('home: %s' % account.home) print('queueEmail: %s' % account.queueEmail) @@ -57,7 +54,7 @@ def test_myplex_devices(plex_account): assert devices, 'No devices found for account: %s' % account.name -#@pytest.mark.req_client # this need to be recorded? +#@pytest.mark.req_client # this need to be recorded? def _test_myplex_connect_to_device(plex_account): account = plex_account devices = account.devices() diff --git a/tests/test_navigation.py b/tests/test_navigation.py index 2b462d4f..3f65fb6a 100644 --- a/tests/test_navigation.py +++ b/tests/test_navigation.py @@ -1,16 +1,11 @@ # -*- coding: utf-8 -*- -import pytest - - def test_navigate_around_show(plex_account, pms): show = pms.library.section('TV Shows').get('The 100') seasons = show.seasons() season = show.season('Season 1') - episodes = show.episodes() episode = show.episode('Pilot') - assert 'Season 1' in [s.title for s in seasons], 'Unable to list season:' assert 'Pilot' in [e.title for e in episodes], 'Unable to list episode:' assert show.season(1) == season @@ -21,22 +16,22 @@ def test_navigate_around_show(plex_account, pms): assert episode.season() == season, 'episode.season() doesnt match expected season.' -def _test_navigate_around_artist(plex_account, pms): - artist = pms.library.section(CONFIG.audio_section).get(CONFIG.audio_artist) +def test_navigate_around_artist(plex_account, pms): + artist = pms.library.section('Music').get('Infinite State') albums = artist.albums() - album = artist.album(CONFIG.audio_album) + album = artist.album('Unmastered Impulses') tracks = artist.tracks() - track = artist.track(CONFIG.audio_track) + track = artist.track('Mantra') print('Navigating around artist: %s' % artist) print('Albums: %s...' % albums[:3]) print('Album: %s' % album) print('Tracks: %s...' % tracks[:3]) print('Track: %s' % track) - assert CONFIG.audio_album in [a.title for a in albums], 'Unable to list album: %s' % CONFIG.audio_album - assert CONFIG.audio_track in [e.title for e in tracks], 'Unable to list track: %s' % CONFIG.audio_track - assert artist.album(CONFIG.audio_album) == album, 'Unable to get artist album: %s' % CONFIG.audio_album - assert artist.track(CONFIG.audio_track) == track, 'Unable to get artist track: %s' % CONFIG.audio_track - assert album.track(CONFIG.audio_track) == track, 'Unable to get album track: %s' % CONFIG.audio_track + assert 'Unmastered Impulses' in [a.title for a in albums], 'Unable to list album.' + assert 'Mantra' in [e.title for e in tracks], 'Unable to list track.' + assert artist.album('Unmastered Impulses') == album, 'Unable to get artist album.' + assert artist.track('Mantra') == track, 'Unable to get artist track.' + assert album.track('Mantra') == track, 'Unable to get album track.' assert album.artist() == artist, 'album.artist() doesnt match expected artist.' assert track.artist() == artist, 'track.artist() doesnt match expected artist.' assert track.album() == album, 'track.album() doesnt match expected album.' diff --git a/tests/test_playlist.py b/tests/test_playlist.py index 569b143c..e49ba7aa 100644 --- a/tests/test_playlist.py +++ b/tests/test_playlist.py @@ -1,9 +1,5 @@ # -*- coding: utf-8 -*- -import time -import pytest - - - +import pytest, time def test_create_playlist(pms, a_show): @@ -68,13 +64,10 @@ def test_playlist_play(pms): pl_name = 'test_play_playlist' playlist = plex.createPlaylist(pl_name, album) try: - #print('Playing playlist: %s' % playlist) client.playMedia(playlist); time.sleep(5) - #print('stop..') client.stop('music'); time.sleep(1) finally: playlist.delete() - assert pl_name not in [i.title for i in pms.playlists()] @@ -83,12 +76,10 @@ def test_playlist_photos(pms, a_photo_album): photos = album.photos() pl_name = 'test_playlist_photos' playlist = pms.createPlaylist(pl_name, photos) - try: assert len(playlist.items()) == 4 finally: playlist.delete() - assert pl_name not in [i.title for i in pms.playlists()] diff --git a/tests/test_search.py b/tests/test_search.py index 73669d29..4b16fee8 100644 --- a/tests/test_search.py +++ b/tests/test_search.py @@ -1,3 +1,2 @@ -# test search. - -# Many more tests is for search later. +# -*- coding: utf-8 -*- +# TODO: Many more tests is for search later. diff --git a/tests/test_server.py b/tests/test_server.py index 037f0cc0..537375c2 100644 --- a/tests/test_server.py +++ b/tests/test_server.py @@ -1,6 +1,5 @@ -import pytest -import os - +# -*- coding: utf-8 -*- +import os, pytest from plexapi.exceptions import BadRequest, NotFound from plexapi.utils import download @@ -38,62 +37,52 @@ def test_server_url(pms): def test_server_transcodeImage(tmpdir, pms, a_show): # Ideally we should also test the black white but this has to do for now. - height = 500 - width = 500 + from PIL import Image + width, height = 500, 500 img_url_resize = pms.transcodeImage(a_show.banner, height, width) gray = img_url_resize = pms.transcodeImage(a_show.banner, height, width, saturation=0) - resized_image = download(img_url_resize, savepath=str(tmpdir), filename='resize_image') org_image = download(a_show.server.url(a_show.banner), savepath=str(tmpdir), filename='org_image') gray_image = download(gray, savepath=str(tmpdir), filename='gray_image') - - - from PIL import Image, ImageStat - with Image.open(resized_image) as im: assert width, height == im.size - with Image.open(org_image) as im: assert width, height != im.size + assert _detect_color_image(gray_image, thumb_size=150) == 'grayscale' - - def detect_color_image(file, thumb_size=150, MSE_cutoff=22, adjust_color_bias=True): - #from http://stackoverflow.com/questions/20068945/detect-if-image-is-color-grayscale-or-black-and-white-with-python-pil - pil_img = Image.open(file) - bands = pil_img.getbands() - if bands == ('R', 'G', 'B') or bands == ('R', 'G', 'B', 'A'): - thumb = pil_img.resize((thumb_size, thumb_size)) - SSE, bias = 0, [0, 0, 0] - if adjust_color_bias: - bias = ImageStat.Stat(thumb).mean[:3] - bias = [b - sum(bias) / 3 for b in bias] - for pixel in thumb.getdata(): - mu = sum(pixel) / 3 - SSE += sum((pixel[i] - mu - bias[i]) * (pixel[i] - mu - bias[i]) for i in [0, 1, 2]) - MSE = float(SSE) / (thumb_size * thumb_size) - if MSE <= MSE_cutoff: - return 'grayscale' - else: - return 'color' - elif len(bands) == 1: - return 'blackandwhite' - - assert detect_color_image(gray_image, thumb_size=150) == 'grayscale' - +def _detect_color_image(file, thumb_size=150, MSE_cutoff=22, adjust_color_bias=True): + # from http://stackoverflow.com/questions/20068945/detect-if-image-is-color-grayscale-or-black-and-white-with-python-pil + from PIL import Image, ImageStat + pil_img = Image.open(file) + bands = pil_img.getbands() + if bands == ('R', 'G', 'B') or bands == ('R', 'G', 'B', 'A'): + thumb = pil_img.resize((thumb_size, thumb_size)) + SSE, bias = 0, [0, 0, 0] + if adjust_color_bias: + bias = ImageStat.Stat(thumb).mean[:3] + bias = [b - sum(bias) / 3 for b in bias] + for pixel in thumb.getdata(): + mu = sum(pixel) / 3 + SSE += sum((pixel[i] - mu - bias[i]) * (pixel[i] - mu - bias[i]) for i in [0, 1, 2]) + MSE = float(SSE) / (thumb_size * thumb_size) + if MSE <= MSE_cutoff: + return 'grayscale' + else: + return 'color' + elif len(bands) == 1: + return 'blackandwhite' def test_server_search(pms): # basic search. see test_search.py assert pms.search('16 Blocks') - assert pms.search('16 blocks', mediatype='movie') def test_server_playlist(pms): pl = pms.playlist('some_playlist') assert pl.title == 'some_playlist' - with pytest.raises(NotFound): pms.playlist('124xxx11y') @@ -110,19 +99,15 @@ def test_server_history(pms): def test_server_Server_query(pms): assert pms.query('/') - from plexapi.server import PlexServer - with pytest.raises(BadRequest): assert pms.query('/asdasdsada/12123127/aaaa', headers={'random_headers': '1337'}) - with pytest.raises(NotFound): # This is really requests.exceptions.HTTPError: # 401 Client Error: Unauthorized for url: PlexServer('http://138.68.157.5:32400', '1234') - def test_server_Server_session(): from requests import Session from plexapi.server import PlexServer @@ -133,17 +118,12 @@ def test_server_Server_session(): self.plexapi_session_test = True plex = PlexServer('http://138.68.157.5:32400', - os.environ.get('PLEX_TEST_TOKEN'), - session=MySession()) - + os.environ.get('PLEX_TEST_TOKEN'), session=MySession()) assert hasattr(plex.session, 'plexapi_session_test') - pl = plex.playlists() assert hasattr(pl[0].server.session, 'plexapi_session_test') - - # check client - # check myplex. - + # TODO: Check client in test_server_Server_session. + # TODO: Check myplex in test_server_Server_session. def test_server_token_in_headers(pms): @@ -155,6 +135,7 @@ def _test_server_createPlayQueue(): # see test_playlists.py pass + def _test_server_createPlaylist(): # see test_playlists.py pass @@ -162,13 +143,14 @@ def _test_server_createPlaylist(): def test_server_client_not_found(pms): with pytest.raises(NotFound): - pms.client('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa') + pms.client('') @pytest.mark.req_client def test_server_client(pms): assert pms.client('Plex Web (Chrome)') + def test_server_Server_sessions(pms): assert len(pms.sessions()) == 0 @@ -189,7 +171,6 @@ def test_server_clients(pms): assert m.protocolCapabilities == ['timeline', 'playback', 'navigation', 'mirror', 'playqueues'] assert m.protocolVersion == '1' assert m.server.baseurl == 'http://138.68.157.5:32400' - #assert m.session == assert m.state is None assert m.title == 'Plex Web (Chrome)' assert m.token is None @@ -200,7 +181,8 @@ def test_server_clients(pms): def test_server_account(pms): acc = pms.account() assert acc.authToken - #assert acc.mappingError == 'publisherror' # this is missing from time to time.. why? + # TODO: Figure out why this is missing from time to time. + #assert acc.mappingError == 'publisherror' assert acc.mappingErrorMessage is None assert acc.mappingState == 'mapped' assert acc.privateAddress == '138.68.157.5' @@ -212,5 +194,3 @@ def test_server_account(pms): assert acc.subscriptionFeatures is None assert acc.subscriptionState == 'Unknown' assert acc.username == 'testplexapi@gmail.com' - - diff --git a/tests/test_utils.py b/tests/test_utils.py index 2c79b987..4b4923ee 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -1,6 +1,5 @@ +# -*- coding: utf-8 -*- import pytest - - import plexapi.utils as utils from plexapi.exceptions import NotFound @@ -10,24 +9,28 @@ def test_utils_toDatetime(): assert str(utils.toDatetime('0'))[:-9] == '1970-01-01' # should this handle args as '0' # no need element attrs are strings. + def _test_utils_threaded(): + # TODO: Implement test_utils_threaded pass + def test_utils_searchType(): st = utils.searchType('movie') assert st == 1 - movie = utils.searchType(1) assert movie == '1' - with pytest.raises(NotFound): utils.searchType('kekekekeke') def _test_utils_listItems(): + # TODO: Implement test_utils_listItems pass + def _test_utils_listChoices(pms): + # TODO: Implement test_utils_listChoices pass @@ -41,27 +44,35 @@ def test_utils_isInt(): assert utils.isInt('got_you') is False assert utils.isInt('1337') is True + def _test_utils_findUsername(): + # TODO: Implement test_utils_findUsername pass + def _test_utils_findStreams(): + # TODO: Implement test_utils_findStreams pass + def _test_utils_findPlayer(): + # TODO: Implement test_utils_findPlayer pass def _test_utils_findLocations(): + # TODO: Implement test_utils_findLocations pass + def _test_utils_findItem(): + # TODO: Implement test_utils_findItem pass def test_utils_findKey(pms): with pytest.raises(NotFound): assert utils.findKey(pms, '9999999') - assert utils.findKey(pms, '1') @@ -79,22 +90,18 @@ def test_utils_cast(): assert t_bool_int is True assert t_float_float == 1.0 and isinstance(t_float_float, float) assert t_float_str != t_float_str # nan is never equal - with pytest.raises(ValueError): t_bool_str = utils.cast(bool, 'kek') # should we catch this in cast? - def test_utils_download(a_episode): # this files is really getting downloaded.. - without_session = utils.download(a_episode.getStreamURL(), filename=a_episode.location, mocked=True) + without_session = utils.download(a_episode.getStreamURL(), + filename=a_episode.location, mocked=True) assert without_session - with_session = utils.download(a_episode.getStreamURL(), - filename=a_episode.location, - session=a_episode.server.session, - mocked=True) + filename=a_episode.location, session=a_episode.server.session, + mocked=True) assert with_session - img = utils.download(a_episode.thumbUrl, filename=a_episode.title, mocked=True) assert img diff --git a/tests/test_video.py b/tests/test_video.py index e9f65e02..16352177 100644 --- a/tests/test_video.py +++ b/tests/test_video.py @@ -1,10 +1,5 @@ # -*- coding: utf-8 -*- -#test_the_file_class_method - -import os - -import pytest - +import os, pytest from plexapi.exceptions import NotFound @@ -12,21 +7,21 @@ def test_video_Movie(a_movie_section): m = a_movie_section.get('Cars') assert m.title == 'Cars' + def test_video_Movie_getStreamURL(a_movie): assert a_movie.getStreamURL() == "http://138.68.157.5:32400/video/:/transcode/universal/start.m3u8?X-Plex-Platform=Chrome©ts=1&mediaIndex=0&offset=0&path=%2Flibrary%2Fmetadata%2F1&X-Plex-Token={0}".format(os.environ.get('PLEX_TEST_TOKEN')) assert a_movie.getStreamURL(videoResolution='800x600') == "http://138.68.157.5:32400/video/:/transcode/universal/start.m3u8?X-Plex-Platform=Chrome©ts=1&mediaIndex=0&offset=0&path=%2Flibrary%2Fmetadata%2F1&videoResolution=800x600&X-Plex-Token={0}".format(os.environ.get('PLEX_TEST_TOKEN')) + def test_video_Movie_isFullObject_and_reload(pms): movie = pms.library.section('Movies').get('16 Blocks') assert movie.isFullObject() is False movie.reload() assert movie.isFullObject() is True - movie_via_search = pms.library.search('16 Blocks')[0] assert movie_via_search.isFullObject() is False movie_via_search.reload() assert movie_via_search.isFullObject() is True - movie_via_section_search = pms.library.section('Movies').search('16 Blocks')[0] assert movie_via_section_search.isFullObject() is False movie_via_section_search.reload() @@ -42,19 +37,16 @@ def test_video_Movie_isPartialObject(a_movie): def test_video_Movie_iterParts(a_movie): assert len(list(a_movie.iterParts())) == 1 + def test_video_Movie_download(monkeydownload, tmpdir, a_movie): downloaded_movie = a_movie.download(savepath=str(tmpdir)) assert len(downloaded_movie) == 1 - downloaded_movie2 = a_movie.download(savepath=str(tmpdir), **{'videoResolution': '500x300'}) assert len(downloaded_movie2) == 1 - - def test_video_Movie_attrs_as_much_as_possible(a_movie_section): m = a_movie_section.get('Cars') - assert m.location == '/media/movies/cars/cars.mp4' assert str(m.addedAt.date()) == '2017-01-17' assert m.art == '/library/metadata/2/art/1484690715' @@ -239,7 +231,6 @@ def test_video_Movie_attrs_as_much_as_possible(a_movie_section): assert str1.type == 2 - def test_video_Show(a_show): assert a_show.title == 'The 100' @@ -286,9 +277,11 @@ def test_video_Show_watched(a_show): watched = a_show.watched() assert len(watched) == 1 and watched[0].title == 'Pilot' + def test_video_Show_unwatched(a_show): assert len(a_show.unwatched()) == 8 + def test_video_Show_location(pms): # This should be a part of test test_video_Show_attrs # But is excluded because of https://github.com/mjs7231/python-plexapi/issues/97 @@ -305,13 +298,13 @@ def test_video_Show_reload(pms): assert len(s.roles) > 3 - def test_video_Show_episodes(a_show): inc_watched = a_show.episodes() ex_watched = a_show.episodes(watched=False) assert len(inc_watched) == 9 assert len(ex_watched) == 8 + def test_video_Show_download(monkeydownload, tmpdir, a_show): f = a_show.download(savepath=str(tmpdir)) assert len(f) == 9 @@ -319,27 +312,26 @@ def test_video_Show_download(monkeydownload, tmpdir, a_show): def test_video_Season_download(monkeydownload, tmpdir, a_show): sn = a_show.season('Season 1') - f = sn.download(savepath=str(tmpdir)) assert len(f) == 8 + def test_video_Episode_download(monkeydownload, tmpdir, a_episode): f = a_episode.download(savepath=str(tmpdir)) assert len(f) == 1 - with_sceen_size = a_episode.download(savepath=str(tmpdir), **{'videoResolution': '500x300'}) assert len(with_sceen_size) == 1 - - def test_video_Show_thumbUrl(a_show): assert 'http://138.68.157.5:32400/library/metadata/12/thumb/' in a_show.thumbUrl + @pytest.mark.xfail def test_video_Show_analyze(a_show): show = a_show.analyze() # this isnt possble.. should it even be available? + def test_video_Show_markWatched(a_tv_section): show = a_tv_section.get("Marvel's Daredevil") show.markWatched() @@ -373,13 +365,12 @@ def test_video_Show_section(a_show): # BROKEN! def test_video_Episode(a_show): pilot = a_show.episode('Pilot') assert pilot == a_show.episode(season=1, episode=1) - with pytest.raises(TypeError): a_show.episode() - with pytest.raises(NotFound): a_show.episode(season=1337, episode=1337) + def test_video_Episode_analyze(a_tv_section): ep = a_tv_section.get("Marvel's Daredevil").episode(season=1, episode=1) ep.analyze() @@ -520,52 +511,33 @@ def test_video_Season_episodes(a_show): assert len(sn_eps) == 1 - -#### MISC def test_that_reload_return_the_same_object(pms): # we want to check this that all the urls are correct movie_library_search = pms.library.section('Movies').search('16 Blocks')[0] movie_search = pms.search('16 Blocks')[0] movie_section_get = pms.library.section('Movies').get('16 Blocks') - movie_library_search_key = movie_library_search.key movie_search_key = movie_search.key movie_section_get_key = movie_section_get.key - assert movie_library_search_key == movie_library_search.reload().key == movie_search_key == movie_search.reload().key == movie_section_get_key == movie_section_get.reload().key - tvshow_library_search = pms.library.section('TV Shows').search('The 100')[0] tvshow_search = pms.search('The 100')[0] tvshow_section_get = pms.library.section('TV Shows').get('The 100') - tvshow_library_search_key = tvshow_library_search.key tvshow_search_key = tvshow_search.key tvshow_section_get_key = tvshow_section_get.key - assert tvshow_library_search_key == tvshow_library_search.reload().key == tvshow_search_key == tvshow_search.reload().key == tvshow_section_get_key == tvshow_section_get.reload().key - season_library_search = tvshow_library_search.season(1) season_search = tvshow_search.season(1) season_section_get = tvshow_section_get.season(1) - season_library_search_key = season_library_search.key season_search_key = season_search.key season_section_get_key = season_section_get.key - assert season_library_search_key == season_library_search.reload().key == season_search_key == season_search.reload().key == season_section_get_key == season_section_get.reload().key - episode_library_search = tvshow_library_search.episode(season=1, episode=1) episode_search = tvshow_search.episode(season=1, episode=1) episode_section_get = tvshow_section_get.episode(season=1, episode=1) - episode_library_search_key = episode_library_search.key episode_search_key = episode_search.key episode_section_get_key = episode_section_get.key - assert episode_library_search_key == episode_library_search.reload().key == episode_search_key == episode_search.reload().key == episode_section_get_key == episode_section_get.reload().key - - - - - -