Fixed praw caching cassette requests, pytest-xdist compatability.

This commit is contained in:
Michael Lazar
2016-08-10 23:19:13 -07:00
parent a09592c570
commit bd7c63cd5f
23 changed files with 28118 additions and 4798 deletions

View File

@@ -3,6 +3,7 @@ from __future__ import unicode_literals
import time
from itertools import islice
from collections import OrderedDict
import six
import praw
@@ -19,77 +20,74 @@ except ImportError:
# 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', '/u/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-top-all':
('/domain/python.org/top-all', '/domain/python.org', 'top-all'),
}
SUBREDDIT_PROMPTS = OrderedDict([
('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', '/u/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', ('/domain/python.org/top', '/domain/python.org', 'top')),
('domain-top-all', ('/domain/python.org/top-all', '/domain/python.org', 'top-all')),
])
# Will raise an error if not logged in
SUBREDDIT_AUTH_PROMPTS = {
'me-0': ('/user/me', '/u/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'),
'user-saved': ('/u/saved', '/u/saved', None),
}
SUBREDDIT_AUTH_PROMPTS = OrderedDict([
('me-0', ('/user/me', '/u/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')),
('user-saved', ('/u/saved', '/u/saved', None)),
])
# 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_INVALID_PROMPTS = OrderedDict([
('empty', ''),
('one-slash', '/'),
('two-slashes', '//'),
('many-slashes', '/////////////////'),
('fake', '/r/python/fake'),
('top-fake', '/r/python/top-fake'),
('new-all', '/r/python/new-all'),
])
# 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'),
}
SUBREDDIT_SEARCH_QUERIES = OrderedDict([
('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():
@@ -313,8 +311,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.values(),
ids=list(SUBREDDIT_PROMPTS))
args, ids = SUBREDDIT_PROMPTS.values(), list(SUBREDDIT_PROMPTS)
@pytest.mark.parametrize('prompt,name,order', args, ids=ids)
def test_content_subreddit_from_name(prompt, name, order, reddit, terminal):
content = SubredditContent.from_name(reddit, prompt, terminal.loader)
@@ -322,8 +320,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.values(),
ids=list(SUBREDDIT_AUTH_PROMPTS))
args, ids = SUBREDDIT_AUTH_PROMPTS.values(), list(SUBREDDIT_AUTH_PROMPTS)
@pytest.mark.parametrize('prompt,name,order', args, ids=ids)
def test_content_subreddit_from_name_authenticated(
prompt, name, order, reddit, terminal, oauth, refresh_token):
@@ -339,8 +337,8 @@ def test_content_subreddit_from_name_authenticated(
assert content.order == order
@pytest.mark.parametrize('prompt', SUBREDDIT_INVALID_PROMPTS.values(),
ids=list(SUBREDDIT_INVALID_PROMPTS))
args, ids = SUBREDDIT_INVALID_PROMPTS.values(), list(SUBREDDIT_INVALID_PROMPTS)
@pytest.mark.parametrize('prompt', args, ids=ids)
def test_content_subreddit_from_name_invalid(prompt, reddit, terminal):
with terminal.loader():
@@ -348,8 +346,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.values(),
ids=list(SUBREDDIT_SEARCH_QUERIES))
args, ids = SUBREDDIT_SEARCH_QUERIES.values(), list(SUBREDDIT_SEARCH_QUERIES)
@pytest.mark.parametrize('prompt,query', args, ids=ids)
def test_content_subreddit_from_name_query(prompt, query, reddit, terminal):
SubredditContent.from_name(reddit, prompt, terminal.loader, query=query)