python-plexapi/tests/test_playlist.py

113 lines
4.6 KiB
Python

# -*- coding: utf-8 -*-
import pytest, time
def test_create_playlist(plex, show):
# create the playlist
title = 'test_create_playlist_show'
#print('Creating playlist %s..' % title)
episodes = show.episodes()
playlist = plex.createPlaylist(title, episodes[:3])
try:
items = playlist.items()
# Test create playlist
assert playlist.title == title, 'Playlist not created successfully.'
assert len(items) == 3, 'Playlist does not contain 3 items.'
assert items[0].ratingKey == episodes[0].ratingKey, 'Items not in proper order [0a].'
assert items[1].ratingKey == episodes[1].ratingKey, 'Items not in proper order [1a].'
assert items[2].ratingKey == episodes[2].ratingKey, 'Items not in proper order [2a].'
# Test move items around (b)
playlist.moveItem(items[1])
items = playlist.items()
assert items[0].ratingKey == episodes[1].ratingKey, 'Items not in proper order [0b].'
assert items[1].ratingKey == episodes[0].ratingKey, 'Items not in proper order [1b].'
assert items[2].ratingKey == episodes[2].ratingKey, 'Items not in proper order [2b].'
# Test move items around (c)
playlist.moveItem(items[0], items[1])
items = playlist.items()
assert items[0].ratingKey == episodes[0].ratingKey, 'Items not in proper order [0c].'
assert items[1].ratingKey == episodes[1].ratingKey, 'Items not in proper order [1c].'
assert items[2].ratingKey == episodes[2].ratingKey, 'Items not in proper order [2c].'
# Test add item
playlist.addItems(episodes[3])
items = playlist.items()
assert items[3].ratingKey == episodes[3].ratingKey, 'Missing added item: %s' % episodes[3]
# Test add two items
playlist.addItems(episodes[4:6])
items = playlist.items()
assert items[4].ratingKey == episodes[4].ratingKey, 'Missing added item: %s' % episodes[4]
assert items[5].ratingKey == episodes[5].ratingKey, 'Missing added item: %s' % episodes[5]
assert len(items) == 6, 'Playlist should have 6 items, %s found' % len(items)
# Test remove item
toremove = items[3]
playlist.removeItem(toremove)
items = playlist.items()
assert toremove not in items, 'Removed item still in playlist: %s' % items[3]
assert len(items) == 5, 'Playlist should have 5 items, %s found' % len(items)
finally:
playlist.delete()
@pytest.mark.client
def test_playlist_play(plex, client, artist, album):
try:
playlist_name = 'test_play_playlist'
playlist = plex.createPlaylist(playlist_name, album)
client.playMedia(playlist); time.sleep(5)
client.stop('music'); time.sleep(1)
finally:
playlist.delete()
assert playlist_name not in [i.title for i in plex.playlists()]
def test_playlist_photos(plex, photoalbum):
album = photoalbum
photos = album.photos()
try:
playlist_name = 'test_playlist_photos'
playlist = plex.createPlaylist(playlist_name, photos)
assert len(playlist.items()) >= 1
finally:
playlist.delete()
assert playlist_name not in [i.title for i in plex.playlists()]
def test_playlist_playQueue(plex, album):
try:
playlist = plex.createPlaylist('test_playlist', album)
playqueue = playlist.playQueue(**dict(shuffle=1))
assert 'shuffle=1' in playqueue._initpath
assert playqueue.playQueueShuffled is True
finally:
playlist.delete()
@pytest.mark.client
def test_play_photos(plex, client, photoalbum):
photos = photoalbum.photos()
for photo in photos[:4]:
client.playMedia(photo)
time.sleep(2)
def test_playqueues(plex):
episode = plex.library.section('TV Shows').get('the 100').get('Pilot')
playqueue = plex.createPlayQueue(episode)
assert len(playqueue.items) == 1, 'No items in play queue.'
assert playqueue.items[0].title == episode.title, 'Wrong show queued.'
assert playqueue.playQueueID, 'Play queue ID not set.'
def test_copyToUser(plex, show, fresh_plex):
# Skip out if we do not have plexpass
if not plex.myPlexSubscription:
pytest.skip('PlexPass subscription required for test.')
episodes = show.episodes()
playlist = plex.createPlaylist('shared_from_test_plexapi', episodes)
try:
playlist.copyToUser('plexapi2')
user = plex.myPlexAccount().user('plexapi2')
user_plex = fresh_plex(plex._baseurl, user.get_token(plex.machineIdentifier))
assert playlist.title in [p.title for p in user_plex.playlists()]
finally:
playlist.delete()