python-plexapi/tests/test_client.py

83 lines
3.8 KiB
Python

# -*- coding: utf-8 -*-
import pytest, time
def _check_capabilities(client, capabilities):
supported = client.protocolCapabilities
for capability in capabilities:
if capability not in supported:
pytest.skip('Client doesnt support %s capability.', capability)
def _check_proxy(plex, client, proxy):
if proxy:
client.proxyThroughServer(server=plex)
@pytest.mark.client
def test_list_clients(account, plex):
assert account.resources(), 'MyPlex is not listing any devlices.'
assert account.devices(), 'MyPlex is not listing any devlices.'
assert plex.clients(), 'PlexServer is not listing any clients.'
@pytest.mark.client
@pytest.mark.parametrize('proxy', [False, True])
def test_client_navigation(plex, client, episode, artist, proxy):
_check_capabilities(client, ['navigation'])
_check_proxy(plex, client, proxy)
try:
print('\nclient.moveUp()'); client.moveUp(); time.sleep(0.5)
print('client.moveLeft()'); client.moveLeft(); time.sleep(0.5)
print('client.moveDown()'); client.moveDown(); time.sleep(0.5)
print('client.moveRight()'); client.moveRight(); time.sleep(0.5)
print('client.select()'); client.select(); time.sleep(3)
print('client.goBack()'); client.goBack(); time.sleep(1)
print('client.goToMedia(episode)'); client.goToMedia(episode); time.sleep(5)
print('client.goToMedia(artist)'); client.goToMedia(artist); time.sleep(5)
#print('client.contextMenu'); client.contextMenu(); time.sleep(3) # socket.timeout
finally:
print('client.goToHome()'); client.goToHome(); time.sleep(2)
@pytest.mark.client
@pytest.mark.parametrize('proxy', [False, True])
def test_client_playback(plex, client, movie, proxy):
_check_capabilities(client, ['playback'])
_check_proxy(plex, client, proxy)
try:
# Need a movie with subtitles
print('mtype=video'); mtype = 'video'
movie = plex.library.section('Movies').get('Moana').reload()
subs = [stream for stream in movie.subtitleStreams() if stream.language == 'English']
print('client.playMedia(movie)'); client.playMedia(movie); time.sleep(5)
print('client.pause(mtype)'); client.pause(mtype); time.sleep(2)
print('client.stepForward(mtype)'); client.stepForward(mtype); time.sleep(5)
print('client.play(mtype)'); client.play(mtype); time.sleep(3)
print('client.stepBack(mtype)'); client.stepBack(mtype); time.sleep(5)
print('client.play(mtype)'); client.play(mtype); time.sleep(3)
print('client.seekTo(10*60*1000)'); client.seekTo(10*60*1000); time.sleep(5)
print('client.setSubtitleStream(0)'); client.setSubtitleStream(0, mtype); time.sleep(10)
print('client.setSubtitleStream(subs[0])'); client.setSubtitleStream(subs[0].id, mtype); time.sleep(10)
print('client.stop(mtype)'); client.stop(mtype); time.sleep(1)
finally:
print('movie.markWatched'); movie.markWatched(); time.sleep(2)
@pytest.mark.client
@pytest.mark.parametrize('proxy', [False, True])
def test_client_timeline(plex, client, movie, proxy):
_check_capabilities(client, ['timeline'])
_check_proxy(plex, client, proxy)
try:
# Note: We noticed the isPlaying flag could take up to a full
# 30 seconds to be updated, hence the long sleeping.
print('mtype=video'); mtype = 'video'
print('time.sleep(30)'); time.sleep(30) # clear isPlaying flag
assert client.isPlayingMedia() is False
print('client.playMedia(movie)'); client.playMedia(movie); time.sleep(30)
assert client.isPlayingMedia() is True
print('client.stop(mtype)'); client.stop(mtype); time.sleep(30)
assert client.isPlayingMedia() is False
finally:
print('movie.markWatched()'); movie.markWatched(); time.sleep(2)