i3pystatus/tests/test_plexstatus.py
2024-06-13 12:09:04 -05:00

59 lines
4.2 KiB
Python

"""
Basic test for the plexstatus module
"""
import unittest
from unittest.mock import patch, MagicMock
from urllib.request import urlopen
from i3pystatus import plexstatus
# inline xml of stream info from plex server
STREAM = b'''<?xml version="1.0" encoding="UTF-8"?>
<MediaContainer size="1">
<Video addedAt="1421001383" art="/library/metadata/46/art/1454407842" chapterSource="" contentRating="G" duration="596462" guid="com.plexapp.agents.themoviedb://10378?lang=en" key="/library/metadata/46" librarySectionID="1" originallyAvailableAt="2008-04-10" rating="6.7" ratingKey="46" sessionKey="146" studio="Blender Foundation" summary="Follow a day of the life of Big Buck Bunny when he meets three bullying rodents: Frank, Rinky, and Gamera. The rodents amuse themselves by harassing helpless creatures by throwing fruits, nuts and rocks at them. After the deaths of two of Bunny&apos;s favorite butterflies, and an offensive attack on Bunny himself, Bunny sets aside his gentle nature and orchestrates a complex plan for revenge." thumb="/library/metadata/46/thumb/1454407842" title="Big Buck Bunny" type="movie" updatedAt="1454407842" year="2008">
<Media aspectRatio="1.78" audioChannels="6" audioCodec="aac" audioProfile="lc" bitrate="9725" container="mov" duration="596462" has64bitOffsets="0" height="1080" id="46" optimizedForStreaming="1" videoCodec="h264" videoFrameRate="24p" videoProfile="main" videoResolution="1080" width="1920">
<Part audioProfile="lc" container="mov" duration="596462" file="Big Buck Bunny.mov" has64bitOffsets="0" id="46" indexes="sd" key="/library/parts/46/file.mov" optimizedForStreaming="1" size="725106140" videoProfile="main">
<Stream bitDepth="8" bitrate="9283" cabac="0" chromaSubsampling="4:2:0" codec="h264" codecID="avc1" colorRange="tv" colorSpace="bt709" default="1" duration="596458" frameRate="24.000" frameRateMode="cfr" hasScalingMatrix="0" height="1080" id="315" index="0" language="English" languageCode="eng" level="41" pixelFormat="yuv420p" profile="main" refFrames="2" scanType="progressive" streamIdentifier="1" streamType="1" width="1920" />
<Stream audioChannelLayout="5.1" bitrate="448" bitrateMode="cbr" channels="6" codec="aac" codecID="40" default="1" duration="596462" id="316" index="2" language="English" languageCode="eng" profile="lc" samplingRate="48000" selected="1" streamIdentifier="3" streamType="2" />
</Part>
</Media>
<Genre count="79" id="124" tag="Animation" />
<Genre count="209" id="177" tag="Comedy" />
<Director id="894" tag="Sacha Goedegebure" />
<Producer id="895" tag="Ton Roosendaal" />
<Country count="2" id="896" tag="Netherlands" />
<User id="1" thumb="https://plex.tv/users/a111111111a11111/avatar" title="user" />
<Player address="1.1.1.1" device="Linux" machineIdentifier="1aa1a11a-a1a1-1a1a-111a-1a1aa11a1111" platform="Chrome" product="Plex Web" state="playing" title="Plex Web (Chrome)" />
<TranscodeSession key="1aaa1a11aaa1aaa111a1aaaa11" throttled="1" progress="24.200000762939453" speed="0" duration="596000" remaining="2155" context="streaming" videoDecision="copy" audioDecision="transcode" protocol="http" container="mkv" videoCodec="h264" audioCodec="aac" audioChannels="2" />
</Video>
</MediaContainer>'''
class PlexstatusTest(unittest.TestCase):
@patch('i3pystatus.plexstatus.urlopen', autospec=True)
def test_not_stream(self, urlopen):
"""
Test output when nothing is being streamed
"""
null_stream = b'<?xml version="1.0" encoding="UTF-8"?>\n<MediaContainer size="0">\n</MediaContainer>'
plexstatus.urlopen.return_value.read.return_value = null_stream
plxstat = plexstatus.Plexstatus(apikey='111111', address='127.0.0.1')
plxstat.run()
self.assertTrue(plxstat.output == {})
@patch('i3pystatus.plexstatus.urlopen', autospec=True)
def test_streaming(self, urlopen):
"""
Test output from side-loaded xml (generated from a real plex server
response)
"""
plexstatus.urlopen.return_value.read.return_value = STREAM
plxstat = plexstatus.Plexstatus(apikey='111111', address='127.0.0.1')
plxstat.run()
self.assertTrue(plxstat.output['full_text'] == 'Chrome: Big Buck Bunny')
if __name__ == '__main__':
unittest.main()