Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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 == []
Ejemplo n.º 3
0
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)
    ]
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
def test_SceneQuery_episodes():
    query = find.SceneQuery(episodes={'5': ('10',)})
    assert query.episodes == {'5': ('10',)}
Ejemplo n.º 6
0
def test_SceneQuery_group():
    query = find.SceneQuery(group='ASDF')
    assert query.group == 'ASDF'
Ejemplo n.º 7
0
def test_SceneQuery_keywords():
    query = find.SceneQuery('foo bar', ' - ', 'baz', '', '  ', 21)
    assert query.keywords == ('foo', 'bar', 'baz', '21')
Ejemplo n.º 8
0
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
Ejemplo n.º 9
0
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(