# -*- coding: utf-8 -*- import os from babelfish import language_converters from subzero.language import Language import pytest from vcr import VCR from urlparse import urlparse, parse_qs from urllib import urlencode from subliminal_patch.providers.assrt import AssrtSubtitle, AssrtProvider, \ language_contains, search_language_in_list, supported_languages def remove_auth_token(request): parsed_uri = urlparse(request.uri) parsed_query = parse_qs(parsed_uri.query) if 'token' in parsed_query: parsed_query['token'] = 'SECRET' parsed_uri = parsed_uri._replace(query=urlencode(parsed_query)) request.uri = parsed_uri.geturl() return request vcr = VCR(path_transformer=lambda path: path + '.yaml', before_record_request=remove_auth_token, record_mode=os.environ.get('VCR_RECORD_MODE', 'once'), match_on=['method', 'scheme', 'host', 'port', 'path', 'body'], cassette_library_dir=os.path.realpath(os.path.join('cassettes', 'assrt'))) TOKEN=os.environ.get('ASSRT_TOKEN', 'NO_TOKEN_PROVIDED') def test_supported_languages(): assert set(supported_languages) == set([('zho', None, None), ('eng', None, None), ('zho', None, 'Hans'), ('zho', None, 'Hant')]) def test_language_contains(): assert language_contains(Language('zho'), Language('zho')) assert language_contains(Language('zho', 'TW', None), Language('zho')) assert language_contains(Language('zho', 'CN', None), Language('zho')) assert language_contains(Language('zho', None, 'Hant'), Language('zho')) assert language_contains(Language('zho', None, 'Hans'), Language('zho')) assert language_contains(Language('zho', 'TW', 'Hant'), Language('zho')) assert language_contains(Language('zho', 'CN', 'Hans'), Language('zho')) assert language_contains(Language('zho', None, 'Hant'), Language('zho', None, 'Hant')) assert language_contains(Language('zho', None, 'Hans'), Language('zho', None, 'Hans')) def test_search_language_in_list(): assert search_language_in_list(Language('zho', None, 'Hant'), [Language('zho', None, 'Hant')]) assert search_language_in_list(Language('zho', None, 'Hans'), [Language('zho', None, 'Hans')]) assert search_language_in_list(Language('zho', None, 'Hant'), [Language('zho')]) assert search_language_in_list(Language('zho', None, 'Hans'), [Language('zho')]) assert search_language_in_list(Language('zho', None, 'Hant'), [Language('eng'), Language('zho')]) assert not search_language_in_list(Language('zho', None, 'Hans'), [Language('zho', None, 'Hant')]) assert search_language_in_list(Language('zho', None, 'Hans'), [Language('zho', None, 'Hant'), Language('zho')]) def test_get_matches_exact_movie_name(movies): subtitle = AssrtSubtitle(Language('zho'), 253629, 'man.of.steel.2013.720p.bluray.x264-felony.mkv', None, None) matches = subtitle.get_matches(movies['man_of_steel']) assert matches == {'title', 'format', 'release_group', 'year', 'video_codec', 'resolution'} def test_get_matches_movie_name(movies): subtitle = AssrtSubtitle(Language('zho'), 618185, 'Man.Of.Steel.2013.BluRay.720p.x264.AC3.2Audios-CMCT', None, None) matches = subtitle.get_matches(movies['man_of_steel']) assert matches == {'title', 'format', 'year', 'video_codec', 'resolution'} @pytest.mark.converter def test_converter_convert_alpha3(): assert language_converters['assrt'].convert('zho', None, 'Hans') == 'chi' assert language_converters['assrt'].convert('zho', None, 'Hant') == 'zht' assert language_converters['assrt'].convert('eng') == 'eng' @pytest.mark.converter def test_converter_reverse(): assert language_converters['assrt'].reverse('chi') == ('zho', None, 'Hans') assert language_converters['assrt'].reverse('zht') == ('zho', None, 'Hant') assert language_converters['assrt'].reverse(u'簡體') == ('zho', None, 'Hans') assert language_converters['assrt'].reverse(u'繁體') == ('zho', None, 'Hant') assert language_converters['assrt'].reverse(u'简体') == ('zho', None, 'Hans') assert language_converters['assrt'].reverse(u'繁体') == ('zho', None, 'Hant') @pytest.mark.integration @vcr.use_cassette def test_query_movie_zh_Hans(movies): languages = [Language('zho', None, 'Hant')] video = movies['man_of_steel'] with AssrtProvider(TOKEN) as provider: subtitles = provider.query(languages, video) assert len(subtitles) == 8 @pytest.mark.integration @vcr.use_cassette def test_query_movie_zh_Hant(movies): languages = [Language('zho', None, 'Hans')] video = movies['man_of_steel'] with AssrtProvider(TOKEN) as provider: subtitles = provider.query(languages, video) assert len(subtitles) == 8 @pytest.mark.integration @vcr.use_cassette def test_query_movie_zh(movies): languages = [Language('zho')] video = movies['man_of_steel'] with AssrtProvider(TOKEN) as provider: subtitles = provider.query(languages, video) assert len(subtitles) == 16 @pytest.mark.integration @vcr.use_cassette def test_query_episode(episodes): video = episodes['bbt_s07e05'] languages = [Language('zho', None, 'Hant'), Language('zho', None, 'Hans')] with AssrtProvider(TOKEN) as provider: subtitles = provider.query(languages, video) assert len(subtitles) == 11 @pytest.mark.integration @vcr.use_cassette def test_query_list_subtitles(movies): languages = [Language('zho', None, 'Hant'), Language('zho', None, 'Hans')] video = movies['man_of_steel'] with AssrtProvider(TOKEN) as provider: subtitles = provider.list_subtitles(video, languages) assert len(subtitles) == 16 @pytest.mark.integration @vcr.use_cassette def test_download_subtitle(movies): languages = [Language('zho', None, 'Hant')] video = movies['man_of_steel'] with AssrtProvider(TOKEN) as provider: subtitles = provider.list_subtitles(video, languages) provider.download_subtitle(subtitles[0]) assert subtitles[0].content is not None assert subtitles[0].language == Language('zho', None, 'Hant') @pytest.mark.integration @vcr.use_cassette def test_download_subtitle_zh(movies): languages = [Language('zho')] video = movies['man_of_steel'] with AssrtProvider(TOKEN) as provider: subtitles = provider.list_subtitles(video, languages) provider.download_subtitle(subtitles[0]) assert subtitles[0].content is not None assert subtitles[0].language == Language('zho') @pytest.mark.integration @vcr.use_cassette def test_download_episode_subtitle(episodes): languages = [Language('zho', None, 'Hant'), Language('zho', None, 'Hans')] video = episodes['bbt_s07e05'] with AssrtProvider(TOKEN) as provider: subtitles = provider.list_subtitles(video, languages) provider.download_subtitle(subtitles[0]) assert subtitles[0].content is not None assert subtitles[0].language == Language('zho', None, 'Hans')