mirror of
https://github.com/SickGear/SickGear.git
synced 2024-12-23 19:23:37 +00:00
192 lines
6.9 KiB
Python
192 lines
6.9 KiB
Python
|
# coding=UTF-8
|
||
|
# Author: Dennis Lutter <lad1337@gmail.com>
|
||
|
#
|
||
|
# This file is part of SickGear.
|
||
|
#
|
||
|
# SickGear is free software: you can redistribute it and/or modify
|
||
|
# it under the terms of the GNU General Public License as published by
|
||
|
# the Free Software Foundation, either version 3 of the License, or
|
||
|
# (at your option) any later version.
|
||
|
#
|
||
|
# SickGear is distributed in the hope that it will be useful,
|
||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
# GNU General Public License for more details.
|
||
|
#
|
||
|
# You should have received a copy of the GNU General Public License
|
||
|
# along with SickGear. If not, see <http://www.gnu.org/licenses/>.
|
||
|
|
||
|
from __future__ import print_function
|
||
|
import warnings
|
||
|
warnings.filterwarnings('ignore', module=r'.*fuz.*', message='.*Sequence.*')
|
||
|
|
||
|
import os.path
|
||
|
import sys
|
||
|
import test_lib as test
|
||
|
import unittest
|
||
|
|
||
|
import sickgear
|
||
|
from sickgear.helpers import real_path
|
||
|
from sickgear.name_cache import addNameToCache
|
||
|
from sickgear.postProcessor import PostProcessor
|
||
|
from sickgear.processTV import ProcessTVShow
|
||
|
from sickgear.tv import TVEpisode, TVShow, logger
|
||
|
from sickgear.indexers.indexer_config import TVINFO_TVDB, TVINFO_TVMAZE
|
||
|
|
||
|
if 'win32' == sys.platform:
|
||
|
root_folder_tests = [
|
||
|
# root_dirs, path, expected
|
||
|
('1|C:\\dir', 'C:\\folder', None),
|
||
|
('1|c:\\dir', 'c:\\dir', 'c:\\dir'),
|
||
|
('1|c:\\dir2', 'c:\\dir2\\dir', 'c:\\dir2'),
|
||
|
('1|c:\\tv_complete|c:\\tv', 'c:\\tv', 'c:\\tv')
|
||
|
]
|
||
|
else:
|
||
|
root_folder_tests = [
|
||
|
# root_dirs, path, expected
|
||
|
('1|~/dir', '~/dir/dir', '~/dir'),
|
||
|
('1|/mnt/hdd/dir', '/mnt/hdd/folder', None),
|
||
|
('1|/mnt/hdd/dir', '/mnt/hdd/dir', '/mnt/hdd/dir'),
|
||
|
('1|/mnt/hdd/dir2', '/mnt/hdd/dir2/dir', '/mnt/hdd/dir2'),
|
||
|
('1|/mnt/hdd/tv_complete|/mnt/hdd/tv', '/mnt/hdd/tv', '/mnt/hdd/tv')
|
||
|
]
|
||
|
|
||
|
script_tests = [{'name': 'TheTVdb',
|
||
|
'EXTRA_SCRIPTS': 'extra_script.py',
|
||
|
'SG_EXTRA_SCRIPTS': 'sg_extra_script.py',
|
||
|
'file_path': '/mnt/hdd/folder/',
|
||
|
'tvid': TVINFO_TVDB,
|
||
|
'result': [False, False]},
|
||
|
{'name': 'TVmaze',
|
||
|
'EXTRA_SCRIPTS': 'extra_script.py',
|
||
|
'SG_EXTRA_SCRIPTS': 'sg_extra_script.py',
|
||
|
'file_path': '/mnt/hdd/folder/',
|
||
|
'tvid': TVINFO_TVMAZE,
|
||
|
'result': [True, False]},
|
||
|
]
|
||
|
|
||
|
|
||
|
class PPInitTests(unittest.TestCase):
|
||
|
|
||
|
def setUp(self):
|
||
|
self.pp = PostProcessor(test.FILEPATH)
|
||
|
|
||
|
def test_init_file_name(self):
|
||
|
self.assertEqual(self.pp.file_name, test.FILENAME)
|
||
|
|
||
|
def test_init_folder_name(self):
|
||
|
self.assertEqual(self.pp.folder_name, test.SHOWNAME)
|
||
|
|
||
|
|
||
|
class PPBasicTests(test.SickbeardTestDBCase):
|
||
|
|
||
|
def test_process(self):
|
||
|
show_obj = TVShow(1, 3)
|
||
|
show_obj.tvid = TVINFO_TVDB
|
||
|
show_obj.name = test.SHOWNAME
|
||
|
show_obj.location = test.SHOWDIR
|
||
|
show_obj.save_to_db()
|
||
|
|
||
|
sickgear.showList = [show_obj]
|
||
|
sickgear.showDict = {show_obj.sid_int: show_obj}
|
||
|
ep_obj = TVEpisode(show_obj, test.SEASON, test.EPISODE)
|
||
|
ep_obj.name = 'some ep name'
|
||
|
ep_obj.release_name = 'test setter'
|
||
|
ep_obj.save_to_db()
|
||
|
|
||
|
addNameToCache('show name', tvid=TVINFO_TVDB, prodid=3)
|
||
|
sickgear.PROCESS_METHOD = 'move'
|
||
|
|
||
|
pp = PostProcessor(test.FILEPATH)
|
||
|
self.assertTrue(pp.process())
|
||
|
|
||
|
|
||
|
class PPFolderTests(test.SickbeardTestDBCase):
|
||
|
|
||
|
def test_root_folder(self):
|
||
|
for root_dirs, path, expected in root_folder_tests:
|
||
|
sickgear.ROOT_DIRS = root_dirs
|
||
|
self.assertEqual(expected and real_path(expected) or expected, ProcessTVShow.find_parent(path))
|
||
|
|
||
|
|
||
|
class PPTest(PostProcessor):
|
||
|
|
||
|
def __init__(self, file_path, nzb_name=None, process_method=None, force_replace=None, use_trash=None,
|
||
|
webhandler=None, show_obj=None):
|
||
|
super(PPTest, self).__init__(file_path, nzb_name, process_method, force_replace,
|
||
|
use_trash, webhandler, show_obj)
|
||
|
self.has_errors = []
|
||
|
self.current_script = None
|
||
|
self.current_script_num = -1
|
||
|
|
||
|
def _execute_extra_scripts(self, script_name, ep_obj, new_call=False):
|
||
|
if self.current_script != script_name:
|
||
|
self.current_script_num += 1
|
||
|
self.has_errors.append(False)
|
||
|
self.current_script = script_name
|
||
|
super(PPTest, self)._execute_extra_scripts(script_name, ep_obj, new_call)
|
||
|
|
||
|
def _log(self, message, level=logger.MESSAGE):
|
||
|
if logger.ERROR == level:
|
||
|
self.has_errors[self.current_script_num] = True
|
||
|
if 'Script result: ' in message and 'ERROR' in message:
|
||
|
self.has_errors[self.current_script_num] = True
|
||
|
super(PPTest, self)._log(message, level)
|
||
|
|
||
|
|
||
|
class PPScriptTests(test.SickbeardTestDBCase):
|
||
|
|
||
|
@staticmethod
|
||
|
def _create_ep(tvid):
|
||
|
show_obj = TVShow(tvid, 3)
|
||
|
show_obj.name = test.SHOWNAME
|
||
|
show_obj.location = test.SHOWDIR
|
||
|
show_obj.save_to_db()
|
||
|
|
||
|
sickgear.showList = [show_obj]
|
||
|
sickgear.showDict = {show_obj.sid_int: show_obj}
|
||
|
ep_obj = TVEpisode(show_obj, test.SEASON, test.EPISODE)
|
||
|
ep_obj.name = 'some ep name'
|
||
|
ep_obj.location = '/mnt/hdd/folder/the show/season 01/the show - s01e01 - name.mkv'
|
||
|
ep_obj.save_to_db()
|
||
|
return ep_obj
|
||
|
|
||
|
@staticmethod
|
||
|
def _remove_show(ep_obj):
|
||
|
ep_obj.show_obj.delete_show()
|
||
|
|
||
|
def test_extra_script(self):
|
||
|
self.longMessage = True
|
||
|
base_path = os.path.join(test.TESTDIR, 'scripts')
|
||
|
|
||
|
for t in script_tests:
|
||
|
self.has_errors = []
|
||
|
self.current_script = None
|
||
|
self.current_script_num = -1
|
||
|
sickgear.EXTRA_SCRIPTS = ['%s %s' % (sys.executable, os.path.join(base_path, t['EXTRA_SCRIPTS']))]
|
||
|
sickgear.SG_EXTRA_SCRIPTS = ['%s %s' % (sys.executable, os.path.join(base_path, t['SG_EXTRA_SCRIPTS']))]
|
||
|
pp = PPTest(t['file_path'])
|
||
|
ep_obj = self._create_ep(t['tvid'])
|
||
|
pp._run_extra_scripts(ep_obj)
|
||
|
self.assertEqual(t['result'], pp.has_errors, msg='Test Case: %s' % t['name'])
|
||
|
self._remove_show(ep_obj)
|
||
|
|
||
|
|
||
|
if '__main__' == __name__:
|
||
|
|
||
|
print('===============================')
|
||
|
print('STARTING - Post Processor TESTS')
|
||
|
print('===============================')
|
||
|
|
||
|
suite = unittest.TestLoader().loadTestsFromTestCase(PPInitTests)
|
||
|
unittest.TextTestRunner(verbosity=2).run(suite)
|
||
|
suite = unittest.TestLoader().loadTestsFromTestCase(PPBasicTests)
|
||
|
unittest.TextTestRunner(verbosity=2).run(suite)
|
||
|
suite = unittest.TestLoader().loadTestsFromTestCase(PPFolderTests)
|
||
|
unittest.TextTestRunner(verbosity=2).run(suite)
|
||
|
# disabled due to security alert... https://github.com/clinton-hall/nzbToMedia/issues/1721
|
||
|
# suite = unittest.TestLoader().loadTestsFromTestCase(PPScriptTests)
|
||
|
# unittest.TextTestRunner(verbosity=2).run(suite)
|
||
|
|
||
|
print('===============================')
|