def test_buildVideoObject_should_get_video_information_from_getInfo(self): sys.modules["__main__"].settings.getSetting.return_value = "" player = YouTubePlayer() player.getInfo = Mock() player.getInfo.return_value = ({}, 303) player.extractVideoLinksFromYoutube = Mock() player.extractVideoLinksFromYoutube.return_value = ({}, {}) player.buildVideoObject({}) player.getInfo.assert_called_with({})
def test_buildVideoObject_should_not_scrape_webpage_if_local_file_is_found(self): sys.modules["__main__"].subtitles.getLocalFileSource.return_value = "somePath/someTitle.mp4" params = {"videoid": "some_id"} player = YouTubePlayer() player.getInfo = Mock() player.extractVideoLinksFromYoutube = Mock() video = {"videoid": "some_id", "Title": "someTitle"} player.getInfo.return_value = (video, 200) player.buildVideoObject(params) assert(player.extractVideoLinksFromYoutube.call_count == 0)
def test_buildVideoObject_should_use_pre_defined_error_messages_on_missing_url(self): sys.modules["__main__"].settings.getSetting.return_value = "" player = YouTubePlayer() player.getInfo = Mock() player.getInfo.return_value = ({}, 303) player.getLocalFileSource = Mock(return_value="") player.extractVideoLinksFromYoutube = Mock(return_value = ({}, {})) player.buildVideoObject({}) player.getInfo.assert_called_with({}) sys.modules["__main__"].language.assert_called_with(30618)
def test_buildVideoObject_should_call_getVideoLinks_if_local_file_not_found(self): sys.modules["__main__"].subtitles.getLocalFileSource.return_value = "" sys.modules["__main__"].settings.getSetting.return_value = "1" params = {"videoid": "some_id"} player = YouTubePlayer() player.getInfo = Mock() player.extractVideoLinksFromYoutube = Mock() player.extractVideoLinksFromYoutube.return_value = ({}, {}) video = {"videoid": "some_id", "Title": "someTitle"} player.getInfo.return_value = (video, 200) player.buildVideoObject(params) player.extractVideoLinksFromYoutube.assert_any_call(video, params)
def test_buildVideoObject_should_call_selectVideoQuality_if_local_file_not_found_and_remote_links_found(self): sys.modules["__main__"].subtitles.getLocalFileSource.return_value = "" params = {"videoid": "some_id"} video = {"videoid": "some_id", "Title": "someTitle"} player = YouTubePlayer() player.getInfo = Mock() player.getInfo.return_value = (video, 200) player.extractVideoLinksFromYoutube = Mock() player.extractVideoLinksFromYoutube.return_value = ({22: "720p"}, {}) player.selectVideoQuality = Mock() player.buildVideoObject(params) player.selectVideoQuality.assert_called_with(params,{22: "720p"})
def test_playVideo_should_call_remove_from_watch_later_if_viewing_video_from_watch_later_queue( self): player = YouTubePlayer() sys.modules["__main__"].settings.getSetting.return_value = "0" sys.argv = ["test1", "1", "test2"] player.buildVideoObject = Mock() player.buildVideoObject.return_value = ({ "Title": "someTitle", "videoid": "some_id", "thumbnail": "someThumbnail", "video_url": "someUrl" }, 200) player.addSubtitles = Mock() call_params = { "videoid": "some_id", "watch_later": "true", "playlist": "playlist_id", "playlist_entry_id": "entry_id" } player.playVideo(call_params) sys.modules[ "__main__"].core.remove_from_watch_later.assert_called_with( call_params)
def test_playVideo_should_call_getVideoObject(self): player = YouTubePlayer() player.buildVideoObject = Mock(return_value=[{"apierror": "some error"}, 303]) player.playVideo() player.buildVideoObject.assert_called_with({})
def test_playVideo_should_log_and_fail_gracefully_on_apierror(self): player = YouTubePlayer() player.buildVideoObject = Mock() player.buildVideoObject.return_value = [{"apierror": "some error"}, 303] result = player.playVideo() assert(result == False) sys.modules["__main__" ].common.log.assert_called_with("construct video url failed contents of video item {'apierror': 'some error'}")
def test_playVideo_should_update_locally_stored_watched_status(self): sys.modules["__main__"].settings.getSetting.return_value = "0" sys.argv = ["test1", "1", "test2"] player = YouTubePlayer() player.buildVideoObject = Mock() player.buildVideoObject.return_value = ({"Title": "someTitle", "videoid": "some_id", "thumbnail": "someThumbnail", "video_url": "someUrl"}, 200) player.addSubtitles = Mock() player.playVideo({"videoid": "some_id"}) sys.modules["__main__"].storage.storeValue.assert_called_with("vidstatus-some_id", "7" )
def test_playVideo_should_call_addSubtitles(self): video = {"Title": "someTitle", "videoid": "some_id", "thumbnail": "someThumbnail", "video_url": "someUrl"} sys.modules["__main__"].settings.getSetting.return_value = "1" sys.argv = ["test1", "1", "test2"] player = YouTubePlayer() player.buildVideoObject = Mock() player.buildVideoObject.return_value = (video, 200) player.playVideo({"videoid": "some_id"}) sys.modules["__main__"].subtitles.addSubtitles.assert_called_with(video)
def test_playVideo_should_call_xbmc_setResolvedUrl(self): sys.modules["__main__"].settings.getSetting.return_value = "0" player = YouTubePlayer() player.addSubtitles = Mock() player.buildVideoObject = Mock() player.buildVideoObject.return_value = ({"Title": "someTitle", "videoid": "some_id", "thumbnail": "someThumbnail", "video_url": "someUrl"}, 200) sys.argv = ["test1", "1", "test2"] player.playVideo({"videoid": "some_id"}) assert(sys.modules["__main__"].xbmcplugin.setResolvedUrl.call_count > 0)
def test_buildVideoObject_should_use_local_file_for_playback_if_found(self): sys.modules["__main__"].subtitles.getLocalFileSource.return_value = "somePath/someTitle.mp4" params = {"videoid": "some_id"} player = YouTubePlayer() player.getInfo = Mock() video = {"videoid": "some_id", "Title": "someTitle"} player.getInfo.return_value = (video, 200) (video, status) = player.buildVideoObject(params) assert(video["video_url"] == "somePath/someTitle.mp4")
def test_playVideo_should_call_remove_from_watch_later_if_viewing_video_from_watch_later_queue(self): player = YouTubePlayer() sys.modules["__main__"].settings.getSetting.return_value = "0" sys.argv = ["test1", "1", "test2"] player.buildVideoObject = Mock() player.buildVideoObject.return_value = ({"Title": "someTitle", "videoid": "some_id", "thumbnail": "someThumbnail", "video_url": "someUrl"}, 200) player.addSubtitles = Mock() call_params = {"videoid": "some_id", "watch_later": "true", "playlist": "playlist_id", "playlist_entry_id": "entry_id"} player.playVideo(call_params) sys.modules["__main__"].core.remove_from_watch_later.assert_called_with(call_params)
def test_buildVideoObject_should_check_for_local_file_before_scraping(self): sys.modules["__main__"].subtitles.getLocalFileSource.return_value = "somePath/someTitle.mp4" sys.modules["__main__"].settings.getSetting.return_value = "1" params = {"videoid": "some_id"} player = YouTubePlayer() player.getInfo = Mock() video = {"videoid": "some_id", "Title": "someTitle"} player.getInfo.return_value = (video, 200) (video, status) = player.buildVideoObject(params) sys.modules["__main__"].subtitles.getLocalFileSource.assert_called_with(params, video)
def test_buildVideoObject_with_hls(self): sys.modules["__main__"].core._fetchPage.return_value = {"status": 200, "content": self.readTestInput("live-video-hls-page-S_pMsJw-_oA.html", False)} sys.modules["__main__"].subtitles.getLocalFileSource.return_value = "" sys.modules["__main__"].common.parseDOM.return_value = [] params = {"videoid": "some_id"} player = YouTubePlayer() player.getInfo = Mock() video = {"videoid": "some_id", "Title": "someTitle"} player.getInfo.return_value = (video, 200) (video, status) = player.buildVideoObject(params) assert(video["video_url"] == "http://www.youtube.com/api/manifest/hls_variant/id/S_pMsJw-_oA.2/sparams/cp%2Cid%2Cip%2Cipbits%2Cmaudio%2Cplaylist_type%2Cpmbypass%2Csource%2Cexpire/expire/1364700604/playlist_type/DVR/ipbits/8/upn/Ftpj_wWBeuQ/signature/4B46E966BDE27C0772BA90DE72F0B083F7C44E5A.6F1348A5EE63E4167F1E03C1DE268DABA3EB836E/fexp/932000%2C906383%2C902000%2C919512%2C929903%2C931202%2C900821%2C900823%2C931203%2C931401%2C908529%2C919373%2C930803%2C906836%2C920201%2C929602%2C930101%2C930603%2C900824%2C910223/ip/205.178.10.177/key/yt1/maudio/1/sver/3/cp/U0hVSVdLTl9FTkNONV9PRVJHOmtkY0VJTkJQay02/pmbypass/yes/source/yt_live_broadcast/file/index.m3u8")