def test_SceneQuery_repr(keywords, group, episodes, exp_repr): kwargs = {} if group: kwargs['group'] = group if episodes: kwargs['episodes'] = episodes assert repr(find.SceneQuery(*keywords, **kwargs)) == exp_repr
async def test_search_finds_results_from_generated_episodes(query, exp_first_query, exp_perform_episode_searches, mocker): mock_dbs = ('mock db 1', 'mock db 2') mock_episode_queries = ( find.SceneQuery('mock episode query 1'), find.SceneQuery('mock episode query 2'), ) mock_episode_results = (['mock episode result 1', 'mock episode result 2'], ['mock episode result 3', 'mock episode result 4']) mock_only_existing_releases = 'mock only existing releases' generate_episode_queries_mock = mocker.patch( 'upsies.utils.scene.find._generate_episode_queries', return_value=mock_episode_queries, ) multisearch_mock = mocker.patch('upsies.utils.scene.find._multisearch', AsyncMock( side_effect=( (), # First query yields no results ) + mock_episode_results, # The actual results )) if exp_perform_episode_searches: exp_results = [result for results in mock_episode_results for result in results] else: exp_results = None # find.search() is memoized (see utils.asyncmemoize) find.search.clear_cache() results = await find.search(query, mock_dbs, only_existing_releases=mock_only_existing_releases) assert results == exp_results if exp_perform_episode_searches: assert multisearch_mock.call_args_list == [ call(mock_dbs, exp_first_query, mock_only_existing_releases), call(mock_dbs, mock_episode_queries[0], mock_only_existing_releases), call(mock_dbs, mock_episode_queries[1], mock_only_existing_releases), ] assert generate_episode_queries_mock.call_args_list == [ call(query), ] else: assert multisearch_mock.call_args_list == [ call(mock_dbs, exp_first_query, mock_only_existing_releases), ] assert generate_episode_queries_mock.call_args_list == []
async def test_SceneQuery_search(only_existing_releases, exp_only_existing_releases, mocker): query = find.SceneQuery('this', 'that', group='ASDF') mocker.patch.object(query, '_handle_results') search_coro_func = AsyncMock(return_value=('foo', 'bar', 'baz')) return_value = await query.search(search_coro_func, only_existing_releases=only_existing_releases) assert return_value is query._handle_results.return_value assert query._handle_results.call_args_list == [ call(('foo', 'bar', 'baz'), exp_only_existing_releases) ]
async def test_SceneQuery_handle_results_with_only_existing_releases(episodes, exp_matches): query = find.SceneQuery(episodes=episodes) results = [ 'X.2015.x264-ASDF', 'X.S01E01.x264-ASDF', 'X.S01E02.x264-ASDF', 'X.S01E03.x264-ASDF', 'X.S02E01.x264-ASDF', 'X.S02E02.x264-ASDF', 'X.S02E03.x264-ASDF', ] handled_results = query._handle_results(results, only_existing_releases=True) if exp_matches == 'ALL': assert handled_results == results else: assert handled_results == exp_matches
def test_SceneQuery_episodes(): query = find.SceneQuery(episodes={'5': ('10',)}) assert query.episodes == {'5': ('10',)}
def test_SceneQuery_group(): query = find.SceneQuery(group='ASDF') assert query.group == 'ASDF'
def test_SceneQuery_keywords(): query = find.SceneQuery('foo bar', ' - ', 'baz', '', ' ', 21) assert query.keywords == ('foo', 'bar', 'baz', '21')
def test_SceneQuery_init(keywords, exp_keywords, group, episodes, mocker): query = find.SceneQuery(*keywords, group=group, episodes=episodes) assert query.keywords == exp_keywords assert query.episodes == episodes assert query.group == group
async def test_search_finds_query_results_directly(query, exp_query, mocker): mock_results = 'mock results' mock_dbs = ('mock db 1', 'mock db 2') mock_only_existing_releases = 'mock only existing releases' multisearch_mock = mocker.patch('upsies.utils.scene.find._multisearch', AsyncMock(return_value=mock_results)) # find.search() is memoized (see utils.asyncmemoize) find.search.clear_cache() results = await find.search(query, mock_dbs, only_existing_releases=mock_only_existing_releases) assert results == mock_results assert multisearch_mock.call_args_list == [call(mock_dbs, exp_query, mock_only_existing_releases)] @pytest.mark.parametrize( argnames='query, exp_first_query, exp_perform_episode_searches', argvalues=( (find.SceneQuery('mock query'), find.SceneQuery('mock query'), False), (release.ReleaseInfo('release name'), find.SceneQuery.from_release(release.ReleaseInfo('release name')), False), ('mock query', find.SceneQuery('mock query'), True), ), ) @pytest.mark.asyncio async def test_search_finds_results_from_generated_episodes(query, exp_first_query, exp_perform_episode_searches, mocker): mock_dbs = ('mock db 1', 'mock db 2') mock_episode_queries = ( find.SceneQuery('mock episode query 1'), find.SceneQuery('mock episode query 2'), ) mock_episode_results = (['mock episode result 1', 'mock episode result 2'], ['mock episode result 3', 'mock episode result 4']) mock_only_existing_releases = 'mock only existing releases' generate_episode_queries_mock = mocker.patch(