ydl_api_ng/unit_tests.py

305 lines
17 KiB
Python

import copy
import unittest
import requests
import config_manager
import download_manager
class TestActualParametersFile(unittest.TestCase):
config_manager = config_manager.ConfigManager()
def test_app(self):
self.assertEqual(80, self.config_manager.get_app_params().get('_listen_port'))
self.assertIsNot(True, self.config_manager.get_app_params().get('_dev_mode'))
self.assertFalse(self.config_manager.get_app_params().get('_enable_users_management'))
self.assertEqual('0.0.0.0', self.config_manager.get_app_params().get('_listen_ip'))
self.assertFalse(self.config_manager.get_app_params().get('_allow_dangerous_post_requests'))
self.assertTrue(self.config_manager.get_app_params().get('_enable_redis'))
class TestConfig(unittest.TestCase):
config_manager = config_manager.ConfigManager('params/params.sample.ini')
def test_meta(self):
self.assertIsInstance(self.config_manager.get_app_params().get('_int_test'), int)
self.assertIsInstance(self.config_manager.get_app_params().get('_float_test'), float)
self.assertIsInstance(self.config_manager.get_app_params().get('_bool_test'), bool)
self.assertIsInstance(self.config_manager.get_app_params().get('_string_test'), str)
self.assertIsInstance(self.config_manager.get_app_params().get('_array_test'), list)
self.assertIsInstance(self.config_manager.get_app_params().get('_object_test'), dict)
def test_sites(self):
self.assertIsNotNone(self.config_manager.get_site_params('www.youtube.com'))
self.assertIsNone(self.config_manager.get_site_params('youteu.be'))
self.assertIsNotNone(self.config_manager.get_site_params('www.youtube.com').get('_hosts'))
def test_presets(self):
self.assertIsNotNone(self.config_manager.get_preset_params('HD'))
self.assertIsNone(self.config_manager.get_preset_params('4K'))
self.assertIsNotNone(self.config_manager.get_preset_params('HD'))
self.assertIsNotNone(self.config_manager.get_preset_params('audio'))
self.assertEqual('bestaudio', self.config_manager.get_preset_params('audio').get('format'))
def test_expand(self):
self.assertEqual('videos/%(webpage_url_domain)s/%(title)s_(%(height)s).%(ext)s', self.config_manager.get_preset_params('DEFAULT').get('outtmpl').get('default'))
self.assertEqual('videos/%(webpage_url_domain)s/%(title)s_(%(height)s).%(ext)s', self.config_manager.get_preset_params('SHARE').get('outtmpl').get('default'))
self.assertNotEqual('/home/videos/%(webpage_url_domain)s/%(title)s_(%(height)s).%(ext)s', self.config_manager.get_preset_params('DEFAULT').get('outtmpl').get('default'))
self.assertFalse(self.config_manager.get_preset_params('playlist').get('noplaylist'))
self.assertTrue(self.config_manager.get_preset_params('DEFAULT').get('noplaylist'))
def test_app(self):
self.assertEqual('/download', self.config_manager.get_app_params().get('_api_route_download'))
self.assertTrue(self.config_manager.get_app_params().get('_unit_test'))
self.assertIsNotNone(self.config_manager.get_app_params().get('_enable_users_management'))
def test_user(self):
self.assertIsNotNone(self.config_manager.get_user_param_by_token('dad_super_password'))
self.assertIsNone(self.config_manager.get_user_param_by_token('doggo_super_password'))
self.assertIsNone(self.config_manager.get_user_param_by_token('dad_super_password').get('doesnotexists'))
self.assertEqual('./downloads/symlink_to_dad_home/', self.config_manager.get_user_param_by_token('dad_super_password').get('paths').get('home'))
def test_auth(self):
self.assertEqual('Totonyus', self.config_manager.get_auth_params('DAILYMOTION').get('username'))
self.assertEqual('is_this_site_still_running_fr_?', self.config_manager.get_auth_params('DAILYMOTION').get('password'))
class TestUtils(unittest.TestCase):
config_manager = config_manager.ConfigManager('params/params.sample.ini')
def test_get_presets(self):
dm = download_manager.DownloadManager(self.config_manager, 'https://www.youtube.com/watch?v=OWCK3413Wuk', None, None)
dm.flush_presets()
self.assertIsNotNone(dm.get_presets_objects(['AUDIO']))
dm.flush_presets()
self.assertEqual(2, len(dm.get_presets_objects(['HD', 'FULLHD'])))
dm.flush_presets()
self.assertEqual(1, len(dm.get_presets_objects(['8K', '4K'])))
dm.flush_presets()
self.assertEqual(1, len(dm.get_presets_objects([])))
dm.flush_presets()
self.assertEqual(1, len(dm.get_presets_objects(None)))
dm.flush_presets()
self.assertEqual('DEFAULT', dm.get_presets_objects([])[0].get('_name'))
dm.flush_presets()
self.assertEqual(1, len(dm.get_presets_objects(['HD', '4K'])))
dm.flush_presets()
dm.get_presets_objects(['HD', 'HD'])
self.assertEqual(1, dm.presets_found)
dm.flush_presets()
dm.get_presets_objects(['HD', '4K'])
self.assertEqual(1, dm.presets_not_found)
dm.flush_presets()
dm.get_presets_objects(['HD', '4K', '8K'])
self.assertEqual(2, dm.presets_not_found)
dm.flush_presets()
dm.get_presets_objects(['HD', 'AUDIO'])
self.assertEqual(2, dm.presets_found)
dm.flush_presets()
dm.get_presets_objects(['HD', '4K', '8K'])
self.assertEqual(1, dm.presets_found)
dm.flush_presets()
dm.get_presets_objects(['HD', '4K', '8K', 'AUDIO'])
self.assertEqual(2, dm.presets_found)
dm.flush_presets()
dm.get_presets_objects(['8K', '4K'])
self.assertTrue(dm.no_preset_found)
dm.flush_presets()
dm.get_presets_objects(['8K', '4K', 'AUDIO'])
self.assertFalse(dm.no_preset_found)
def test_is_from_playlist(self):
dm = download_manager.DownloadManager(self.config_manager, 'https://www.youtube.com/playlist?list=PL8Zccvo5Xlj53ESRIn2Q4lg2DvKIB92sj', None, None)
self.assertTrue(dm.check_if_from_playlist())
dm = download_manager.DownloadManager(self.config_manager, 'https://www.youtube.com/watch?v=5UErWGjj95Y&list=PL8Zccvo5Xlj53ESRIn2Q4lg2DvKIB92sj&index=2', None, None)
self.assertTrue(dm.check_if_from_playlist())
dm = download_manager.DownloadManager(self.config_manager, 'https://www.youtube.com/watch?v=5UErWGjj95Y', None, None)
self.assertFalse(dm.check_if_from_playlist())
dm = download_manager.DownloadManager(self.config_manager, 'https://twitter.com/Totonyus/status/1471896525617909760', None, None)
self.assertIsNone(dm.check_if_from_playlist())
def test_is_video(self):
dm = download_manager.DownloadManager(self.config_manager, 'https://www.youtube.com/playlist?list=PL8Zccvo5Xlj53ESRIn2Q4lg2DvKIB92sj', None, None)
self.assertFalse(dm.check_if_video())
dm = download_manager.DownloadManager(self.config_manager, 'https://www.youtube.com/watch?v=5UErWGjj95Y&list=PL8Zccvo5Xlj53ESRIn2Q4lg2DvKIB92sj&index=2', None, None)
self.assertTrue(dm.check_if_video())
dm = download_manager.DownloadManager(self.config_manager, 'https://www.youtube.com/watch?v=5UErWGjj95Y', None, None)
self.assertTrue(dm.check_if_video())
dm = download_manager.DownloadManager(self.config_manager, 'https://twitter.com/Totonyus/status/1471896525617909760', None, None)
self.assertIsNone(dm.check_if_video())
def test_can_be_checked(self):
default_preset = self.config_manager.get_preset_params('DEFAULT')
playlist_preset = self.config_manager.get_preset_params('PLAYLIST')
dm = download_manager.DownloadManager(self.config_manager, 'https://www.youtube.com/playlist?list=PL8Zccvo5Xlj53ESRIn2Q4lg2DvKIB92sj', None, None)
self.assertFalse(dm.can_url_be_checked(default_preset))
self.assertTrue(dm.presets[0].get('ignoreerrors'))
dm = download_manager.DownloadManager(self.config_manager, 'https://www.youtube.com/watch?v=5UErWGjj95Y&list=PL8Zccvo5Xlj53ESRIn2Q4lg2DvKIB92sj&index=2', None, None)
self.assertTrue(dm.can_url_be_checked(default_preset))
self.assertFalse(dm.presets[0].get('ignoreerrors'))
dm = download_manager.DownloadManager(self.config_manager, 'https://www.youtube.com/watch?v=5UErWGjj95Y', None, None)
self.assertTrue(dm.can_url_be_checked(default_preset))
self.assertFalse(dm.presets[0].get('ignoreerrors'))
dm = download_manager.DownloadManager(self.config_manager, 'https://twitter.com/Totonyus/status/1471896525617909760', None, None)
self.assertTrue(dm.can_url_be_checked(default_preset))
self.assertTrue(dm.presets[0].get('ignoreerrors'))
def test_get_permission(self):
dm = download_manager.DownloadManager(self.config_manager, 'https://www.youtube.com/watch?v=5UErWGjj95Y', None, 'dad_super_password')
self.assertIsInstance(dm.is_user_permitted(True), config_manager.SectionConfig)
dm = download_manager.DownloadManager(self.config_manager, 'https://www.youtube.com/watch?v=5UErWGjj95Y', None, 'doggo_super_password')
self.assertFalse(dm.is_user_permitted(True))
dm = download_manager.DownloadManager(self.config_manager, 'https://www.youtube.com/watch?v=5UErWGjj95Y', None, None)
self.assertFalse(dm.is_user_permitted(True))
dm = download_manager.DownloadManager(self.config_manager, 'https://www.youtube.com/watch?v=5UErWGjj95Y', None, 'dad_super_password')
self.assertIsNone(dm.is_user_permitted(False))
dm = download_manager.DownloadManager(self.config_manager, 'https://www.youtube.com/watch?v=5UErWGjj95Y', None, 'doggo_super_password')
self.assertIsNone(dm.is_user_permitted(False))
dm = download_manager.DownloadManager(self.config_manager, 'https://www.youtube.com/watch?v=5UErWGjj95Y', None, None)
self.assertIsNone(dm.is_user_permitted(False))
def test_get_preset_for_user(self):
default_preset = self.config_manager.get_preset_params('DEFAULT')
dm = download_manager.DownloadManager(self.config_manager, 'https://www.youtube.com/watch?v=5UErWGjj95Y', None, 'totonyus_super_password')
self.assertEqual(['fr', 'en'], dm.get_preset_for_user(copy.deepcopy(default_preset)).get('subtitleslangs'))
dm = download_manager.DownloadManager(self.config_manager, 'https://www.youtube.com/watch?v=5UErWGjj95Y', None, 'totonyus_super_password')
self.assertEqual('./downloads/', dm.get_preset_for_user(copy.deepcopy(default_preset)).get('paths').get('home'))
dm = download_manager.DownloadManager(self.config_manager, 'https://www.youtube.com/watch?v=5UErWGjj95Y', None, 'totonyus_super_password')
self.assertEqual('DEFAULT', dm.get_preset_for_user(copy.deepcopy(default_preset)).get('_name'))
dm = download_manager.DownloadManager(self.config_manager, 'https://www.youtube.com/watch?v=5UErWGjj95Y', None, 'dad_super_password')
self.assertEqual(['en'], dm.get_preset_for_user(copy.deepcopy(default_preset)).get('subtitleslangs'))
dm = download_manager.DownloadManager(self.config_manager, 'https://www.youtube.com/watch?v=5UErWGjj95Y', None, 'dad_super_password')
self.assertEqual('./downloads/symlink_to_dad_home/', dm.get_preset_for_user(copy.deepcopy(default_preset)).get('paths').get('home'))
def test_simulate(self):
default_preset = self.config_manager.get_preset_params('DEFAULT')
dm = download_manager.DownloadManager(self.config_manager, 'https://www.youtube.com/watch?v=5UErWGjj95Y', None, None)
self.assertTrue(dm.simulate_download(default_preset))
dm = download_manager.DownloadManager(self.config_manager, 'https://www.youtube.com/watch?v=5UfErWGjj95', None, None)
self.assertFalse(dm.simulate_download(default_preset))
dm = download_manager.DownloadManager(self.config_manager, 'https://www.youtube.com/playlist?list=PL8Zccvo5Xlj53ESRIn2Q4lg2DvKIB92sj', None, None)
self.assertIsNone(dm.simulate_download(default_preset))
@unittest.skip
def test_process_download(self):
dm = download_manager.DownloadManager(self.config_manager, 'https://www.youtube.com/watch?v=5UErWGjj95Y', ['DEFAULT'], None)
self.assertTrue(dm.process_download(dm.presets[0]))
dm = download_manager.DownloadManager(self.config_manager, 'https://www.youtube.com/watch?v=5UErWGjj95Y', ['AUDIO'], None)
self.assertTrue(dm.process_download(dm.presets[0]))
dm = download_manager.DownloadManager(self.config_manager, 'https://www.youtube.com/watch?v=5dUErWGjj95', ['AUDIO'], None)
self.assertFalse(dm.process_download(dm.presets[0]))
dm = download_manager.DownloadManager(self.config_manager, 'https://www.youtube.com/watch?v=5UErWGjj95Y', ['AUDIO'], 'dad_super_password')
self.assertTrue(dm.process_download(dm.presets[0]))
def test_sanitize(self):
self.config_manager.get_user_param_by_token('dad_super_password'),
self.assertEqual('dad_super_password', self.config_manager.get_user_param_by_token('dad_super_password').get('_token'))
self.assertIsNone(self.config_manager.sanitize_config_object(self.config_manager.get_all_users_params()).get('DAD').get('_token'))
@unittest.skip
class TestAPI(unittest.TestCase):
base_url = "http://localhost:5011/download"
def test_download(self):
self.assertEqual(401, requests.get(f'{self.base_url}?url=https://www.youtube.com/watch?v=OWCK3413Wuk').status_code)
self.assertEqual(202, requests.get(f'{self.base_url}?url=https://www.youtube.com/playlist?list=PL8Zccvo5Xlj53ESRIn2Q4lg2DvKIB92sj&token=dad_super_password').status_code)
self.assertEqual(200, requests.get(f'{self.base_url}?url=https://www.youtube.com/watch?v=OWCK3413Wuk&token=dad_super_password').status_code)
self.assertEqual(401, requests.get(f'{self.base_url}?url=https://www.youtube.com/watch?v=OWCK3413Wuk&token=mom_super_password').status_code)
self.assertEqual(400, requests.get(f'{self.base_url}?url=&token=dad_super_password').status_code)
self.assertEqual(422, requests.get(f'{self.base_url}?token=dad_super_password').status_code)
self.assertEqual(200, requests.get(f'{self.base_url}?url=https://www.youtube.com/watch?v=OWCK3413Wuk&token=dad_super_password&presets=hd').status_code)
self.assertEqual(200, requests.get(f'{self.base_url}?url=https://www.youtube.com/watch?v=OWCK3413Wuk&token=totonyus_super_password&presets=hd').status_code)
self.assertEqual(200, requests.get(f'{self.base_url}?url=https://www.youtube.com/watch?v=OWCK3413Wuk&token=dad_super_password&presets=hd,audio').status_code)
self.assertEqual(200, requests.get(f'{self.base_url}?url=https://www.youtube.com/watch?v=OWCK3413Wuk&token=dad_super_password&presets=HD,AUDIO').status_code)
self.assertEqual(206, requests.get(f'{self.base_url}?url=https://www.youtube.com/watch?v=OWCK3413Wuk&token=dad_super_password&presets=hd,audio,4k').status_code)
def test_download_info(self):
request_json = requests.get(f'{self.base_url}?url=https://www.youtube.com/watch?v=OWCK3413Wuk&token=dad_super_password&presets=hd,audio,4k').json()
self.assertTrue(request_json.get('all_downloads_checked'))
self.assertFalse(request_json.get('no_preset_found'))
self.assertEqual(2, request_json.get('presets_found'))
self.assertEqual(1, request_json.get('presets_not_found'))
self.assertEqual(0, request_json.get('failed_checks'))
self.assertEqual(2, request_json.get('passed_checks'))
self.assertEqual('HD', request_json.get('downloads')[0].get('_name'))
self.assertEqual('AUDIO', request_json.get('downloads')[1].get('_name'))
request_json = requests.get(f'{self.base_url}?url=https://www.youtube.com/watch?v=fdsOWCK3413Wuk&token=dad_super_password&presets=4K,8K').json()
self.assertTrue(request_json.get('all_downloads_checked'))
self.assertTrue(request_json.get('no_preset_found'))
self.assertEqual(0, request_json.get('presets_found'))
self.assertEqual(2, request_json.get('presets_not_found'))
self.assertEqual(1, request_json.get('failed_checks'))
self.assertEqual(0, request_json.get('passed_checks'))
self.assertEqual('DEFAULT', request_json.get('downloads')[0].get('_name'))
request_json = requests.get(f'{self.base_url}?url=https://www.youtube.com/watch?v=OWCK3413Wuk&token=dad_super_password').json()
self.assertTrue(request_json.get('all_downloads_checked'))
self.assertFalse(request_json.get('no_preset_found'))
self.assertEqual(0, request_json.get('presets_found'))
self.assertEqual(0, request_json.get('presets_not_found'))
self.assertEqual(0, request_json.get('failed_checks'))
self.assertEqual(1, request_json.get('passed_checks'))
self.assertEqual('DEFAULT', request_json.get('downloads')[0].get('_name'))
request_json = requests.get(f'{self.base_url}?url=https://www.youtube.com/playlist?list=PL8Zccvo5Xlj53ESRIn2Q4lg2DvKIB92sj&token=dad_super_password').json()
self.assertFalse(request_json.get('all_downloads_checked'))
self.assertFalse(request_json.get('no_preset_found'))
self.assertEqual(0, request_json.get('presets_found'))
self.assertEqual(0, request_json.get('presets_not_found'))
self.assertEqual(0, request_json.get('failed_checks'))
self.assertEqual(1, request_json.get('passed_checks'))
self.assertEqual('DEFAULT', request_json.get('downloads')[0].get('_name'))
if __name__ == '__main__':
unittest.main()