diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index cfbec02..30772cc 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -70,7 +70,7 @@ This both speeds up the tests and helps to maintain consistency across runs. .. code-block:: bash - $ pip install pytest vcrpy + $ pip install pytest vcrpy --upgrade 2. Set your ``$PYTHONPATH`` to point to the directory of your RTV repository. diff --git a/tests/test_content.py b/tests/test_content.py index a9424b9..8c6549a 100644 --- a/tests/test_content.py +++ b/tests/test_content.py @@ -14,70 +14,78 @@ from rtv.content import ( from rtv import exceptions -SUBREDDIT_PROMPTS = [ - ('python', '/r/python', None), - ('python/', '/r/python', None), - ('r/python', '/r/python', None), - ('/r/python', '/r/python', None), - ('/r/pics/new', '/r/pics', 'new'), - ('/r/pics/hot/', '/r/pics', 'hot'), - ('pics/top', '/r/pics', 'top'), - ('r/pics/rising', '/r/pics', 'rising'), - ('/r/pics/controversial', '/r/pics', 'controversial'), - ('/r/pics/top-day', '/r/pics', 'top-day'), - ('/r/pics/top-hour', '/r/pics', 'top-hour'), - ('/r/pics/top-month', '/r/pics', 'top-month'), - ('/r/pics/top-week', '/r/pics', 'top-week'), - ('/r/pics/top-year', '/r/pics', 'top-year'), - ('/r/pics/top-all', '/r/pics', 'top-all'), - ('/r/pics+linux', '/r/pics+linux', None), - ('/r/pics+linux/new', '/r/pics+linux', 'new'), - ('front', '/r/front', None), - ('/r/front', '/r/front', None), - ('/r/front/new', '/r/front', 'new'), - ('/r/front/top-week', '/r/front', 'top-week'), - ('/user/spez', '/user/spez', None), - ('/u/spez', '/u/spez', None), - ('/u/spez/new', '/u/spez', 'new'), - ('/u/spez/top-all', '/u/spez', 'top-all'), - ('/user/multi-mod/m/art', '/user/multi-mod/m/art', None), - ('/u/multi-mod/m/art', '/u/multi-mod/m/art', None), - ('/u/multi-mod/m/art/top', '/u/multi-mod/m/art', 'top'), - ('/u/multi-mod/m/art/top-all', '/u/multi-mod/m/art', 'top-all'), - ('/domain/python.org', '/domain/python.org', None), - pytest.mark.xfail(reason='Bug in api.reddit.com')( +# Test entering a bunch of text into the prompt +# (text, parsed subreddit, parsed order) +SUBREDDIT_PROMPTS = { + 'plain-0': ('python', '/r/python', None), + 'plain-1': ('python/', '/r/python', None), + 'plain-2': ('r/python', '/r/python', None), + 'plain-3': ('/r/python', '/r/python', None), + 'new': ('/r/pics/new', '/r/pics', 'new'), + 'hot': ('/r/pics/hot/', '/r/pics', 'hot'), + 'top': ('pics/top', '/r/pics', 'top'), + 'rising': ('r/pics/rising', '/r/pics', 'rising'), + 'controversial': ('/r/pics/controversial', '/r/pics', 'controversial'), + 'top-day': ('/r/pics/top-day', '/r/pics', 'top-day'), + 'top-hour': ('/r/pics/top-hour', '/r/pics', 'top-hour'), + 'top-month': ('/r/pics/top-month', '/r/pics', 'top-month'), + 'top-week': ('/r/pics/top-week', '/r/pics', 'top-week'), + 'top-year': ('/r/pics/top-year', '/r/pics', 'top-year'), + 'top-all': ('/r/pics/top-all', '/r/pics', 'top-all'), + 'pics_linux': ('/r/pics+linux', '/r/pics+linux', None), + 'multi-new': ('/r/pics+linux/new', '/r/pics+linux', 'new'), + 'front_0': ('front', '/r/front', None), + 'front-1': ('/r/front', '/r/front', None), + 'front-new': ('/r/front/new', '/r/front', 'new'), + 'front-top-week': ('/r/front/top-week', '/r/front', 'top-week'), + 'user-0': ('/user/spez', '/user/spez', None), + 'user-1': ('/u/spez', '/u/spez', None), + 'user-new': ('/u/spez/new', '/u/spez', 'new'), + 'user-top-all': ('/u/spez/top-all', '/u/spez', 'top-all'), + 'multi-0': ('/user/multi-mod/m/art', '/user/multi-mod/m/art', None), + 'multi-1': ('/u/multi-mod/m/art', '/u/multi-mod/m/art', None), + 'multi-top': ('/u/multi-mod/m/art/top', '/u/multi-mod/m/art', 'top'), + 'multi-top-all': + ('/u/multi-mod/m/art/top-all', '/u/multi-mod/m/art', 'top-all'), + 'domain': ('/domain/python.org', '/domain/python.org', None), + 'domain-top': pytest.mark.xfail(reason='Bug in api.reddit.com')( ('/domain/python.org/top', '/domain/python.org', 'top')), - ('/domain/python.org/top-all', '/domain/python.org', 'top-all'), -] + 'domain-top-all': + ('/domain/python.org/top-all', '/domain/python.org', 'top-all'), +} -SUBREDDIT_AUTH_PROMPTS = [ - ('/user/me', '/user/me', None), - ('/u/me', '/u/me', None), - ('/u/me/top', '/u/me', 'top'), - ('/u/me/top-all', '/u/me', 'top-all'), -] +# Will raise an error if not logged in +SUBREDDIT_AUTH_PROMPTS = { + 'me-0': ('/user/me', '/user/me', None), + 'me-1': ('/u/me', '/u/me', None), + 'me-top': ('/u/me/top', '/u/me', 'top'), + 'me-top-all': ('/u/me/top-all', '/u/me', 'top-all'), +} -SUBREDDIT_INVALID_PROMPTS = [ - '', - '/', - '//', - '/////////////////', - '/r/python/fake', - '/r/python/top-fake', - '/r/python/new-all', -] +# All of these should raise an error when entered +SUBREDDIT_INVALID_PROMPTS = { + 'empty': '', + 'one-slash': '/', + 'two-slashes': '//', + 'many-slashes': '/////////////////', + 'fake': '/r/python/fake', + 'top-fake': '/r/python/top-fake', + 'new-all': '/r/python/new-all', +} -SUBREDDIT_SEARCH_QUERIES = [ - ('/r/front', 'reddit'), - ('/r/python', 'python'), - ('/r/python/top-all', 'guido'), - ('/u/spez', 'ama'), - ('/user/spez/top-all', 'ama'), - ('/u/multi-mod/m/art', 'PsBattle'), - ('/u/multi-mod/m/art/top-all', 'PsBattle'), - ('/domain/python.org', 'Python'), - ('/domain/python.org/top-all', 'Python'), -] +# All of these search queries should return at least some submissions +# (subreddit, search query) +SUBREDDIT_SEARCH_QUERIES = { + 'front': ('/r/front', 'reddit'), + 'python': ('/r/python', 'python'), + 'python-top': ('/r/python/top-all', 'guido'), + 'user': ('/u/spez', 'ama'), + 'user-top': ('/user/spez/top-all', 'ama'), + 'multi': ('/u/multi-mod/m/art', 'PsBattle'), + 'multi-top': ('/u/multi-mod/m/art/top-all', 'PsBattle'), + 'domain': ('/domain/python.org', 'Python'), + 'domain-top': ('/domain/python.org/top-all', 'Python'), +} def test_content_humanize_timestamp(): @@ -300,7 +308,8 @@ def test_content_subreddit_load_more(reddit, terminal): assert data['title'].startswith(six.text_type(i + 1)) -@pytest.mark.parametrize('prompt,name,order', SUBREDDIT_PROMPTS) +@pytest.mark.parametrize('prompt,name,order', SUBREDDIT_PROMPTS.values(), + ids=SUBREDDIT_PROMPTS.keys()) def test_content_subreddit_from_name(prompt, name, order, reddit, terminal): content = SubredditContent.from_name(reddit, prompt, terminal.loader) @@ -308,7 +317,8 @@ def test_content_subreddit_from_name(prompt, name, order, reddit, terminal): assert content.order == order -@pytest.mark.parametrize('prompt,name,order', SUBREDDIT_AUTH_PROMPTS) +@pytest.mark.parametrize('prompt,name,order', SUBREDDIT_AUTH_PROMPTS.values(), + ids=SUBREDDIT_AUTH_PROMPTS.keys()) def test_content_subreddit_from_name_authenticated( prompt, name, order, reddit, terminal, oauth, refresh_token): @@ -324,7 +334,8 @@ def test_content_subreddit_from_name_authenticated( assert content.order == order -@pytest.mark.parametrize('prompt', SUBREDDIT_INVALID_PROMPTS) +@pytest.mark.parametrize('prompt', SUBREDDIT_INVALID_PROMPTS.values(), + ids=SUBREDDIT_INVALID_PROMPTS.keys()) def test_content_subreddit_from_name_invalid(prompt, reddit, terminal): with terminal.loader(): @@ -332,7 +343,8 @@ def test_content_subreddit_from_name_invalid(prompt, reddit, terminal): assert isinstance(terminal.loader.exception, praw.errors.InvalidSubreddit) -@pytest.mark.parametrize('prompt,query', SUBREDDIT_SEARCH_QUERIES) +@pytest.mark.parametrize('prompt,query', SUBREDDIT_SEARCH_QUERIES.values(), + SUBREDDIT_SEARCH_QUERIES.keys()) def test_content_subreddit_from_name_query(prompt, query, reddit, terminal): SubredditContent.from_name(reddit, prompt, terminal.loader, query=query)