Add saved comment in saved view and some tests
This commit is contained in:
@@ -123,6 +123,24 @@ class Content(object):
|
|||||||
data['hidden'] = False
|
data['hidden'] = False
|
||||||
data['saved'] = comment.saved
|
data['saved'] = comment.saved
|
||||||
|
|
||||||
|
|
||||||
|
return data
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def coerce_saved_comment(cls, comment, data):
|
||||||
|
"""
|
||||||
|
Parse through a submission comment saved and return a dict with data ready to
|
||||||
|
be displayed through the terminal.
|
||||||
|
"""
|
||||||
|
|
||||||
|
data['title'] = data['body']
|
||||||
|
data['comments'] = ''
|
||||||
|
data['url_full'] = data['permalink']
|
||||||
|
data['url'] = data['permalink']
|
||||||
|
data['nsfw'] = comment.over_18
|
||||||
|
data['subreddit'] = six.text_type(comment.subreddit)
|
||||||
|
data['url_type'] = 'selfpost'
|
||||||
|
|
||||||
return data
|
return data
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@@ -409,7 +427,7 @@ class SubredditContent(Content):
|
|||||||
if not reddit.is_oauth_session():
|
if not reddit.is_oauth_session():
|
||||||
raise exceptions.AccountError('Not logged in')
|
raise exceptions.AccountError('Not logged in')
|
||||||
elif order:
|
elif order:
|
||||||
submissions = reddit.user.get_submitted(sort=order)
|
submissions = reddit.user.get_saved(sort=order)
|
||||||
else:
|
else:
|
||||||
submissions = reddit.user.get_saved()
|
submissions = reddit.user.get_saved()
|
||||||
|
|
||||||
@@ -469,12 +487,12 @@ class SubredditContent(Content):
|
|||||||
except StopIteration:
|
except StopIteration:
|
||||||
raise IndexError
|
raise IndexError
|
||||||
else:
|
else:
|
||||||
# TODO: In order to display saved comment, we need to
|
if hasattr(submission,'title'):
|
||||||
# coerce the comment into a submission
|
|
||||||
try:
|
|
||||||
data = self.strip_praw_submission(submission)
|
data = self.strip_praw_submission(submission)
|
||||||
except:
|
# when submission is a saved commment
|
||||||
continue
|
else:
|
||||||
|
data = self.strip_praw_comment(submission)
|
||||||
|
data = self.coerce_saved_comment(submission, data)
|
||||||
|
|
||||||
data['index'] = len(self._submission_data) + 1
|
data['index'] = len(self._submission_data) + 1
|
||||||
# Add the post number to the beginning of the title
|
# Add the post number to the beginning of the title
|
||||||
|
|||||||
@@ -277,6 +277,49 @@ def test_content_subreddit_from_name(reddit, terminal):
|
|||||||
SubredditContent.from_name(reddit, 'front', terminal.loader, query='pea')
|
SubredditContent.from_name(reddit, 'front', terminal.loader, query='pea')
|
||||||
SubredditContent.from_name(reddit, 'python', terminal.loader, query='pea')
|
SubredditContent.from_name(reddit, 'python', terminal.loader, query='pea')
|
||||||
|
|
||||||
|
def test_content_subreddit_from_saved(reddit, terminal, oauth, refresh_token):
|
||||||
|
|
||||||
|
# Not logged in
|
||||||
|
with terminal.loader():
|
||||||
|
SubredditContent.from_name(reddit, '/r/saved', terminal.loader)
|
||||||
|
assert isinstance(terminal.loader.exception, exceptions.AccountError)
|
||||||
|
|
||||||
|
# Logged in
|
||||||
|
name = 'saved'
|
||||||
|
oauth.config.refresh_token = refresh_token
|
||||||
|
oauth.authorize()
|
||||||
|
with terminal.loader():
|
||||||
|
content = SubredditContent.from_name(reddit, name, terminal.loader)
|
||||||
|
assert content.name == '/r/saved'
|
||||||
|
assert content.order is None
|
||||||
|
|
||||||
|
# Can submit without the /r/ and with the order in the name
|
||||||
|
name = 'saved/top/'
|
||||||
|
oauth.config.refresh_token = refresh_token
|
||||||
|
oauth.authorize()
|
||||||
|
with terminal.loader():
|
||||||
|
content = SubredditContent.from_name(reddit, name, terminal.loader)
|
||||||
|
assert content.name == '/r/saved'
|
||||||
|
assert content.order == 'top'
|
||||||
|
|
||||||
|
# Explicit order trumps implicit
|
||||||
|
name = '/r/saved'
|
||||||
|
oauth.config.refresh_token = refresh_token
|
||||||
|
oauth.authorize()
|
||||||
|
with terminal.loader():
|
||||||
|
content = SubredditContent.from_name(
|
||||||
|
reddit, name, terminal.loader, order='new')
|
||||||
|
assert content.name == '/r/saved'
|
||||||
|
assert content.order == 'new'
|
||||||
|
|
||||||
|
# Invalid order raises an exception
|
||||||
|
name = '/r/saved/fake'
|
||||||
|
oauth.config.refresh_token = refresh_token
|
||||||
|
oauth.authorize()
|
||||||
|
with terminal.loader():
|
||||||
|
SubredditContent.from_name(reddit, name, terminal.loader)
|
||||||
|
assert isinstance(terminal.loader.exception, exceptions.SubredditError)
|
||||||
|
|
||||||
|
|
||||||
def test_content_subreddit_multireddit(reddit, terminal):
|
def test_content_subreddit_multireddit(reddit, terminal):
|
||||||
|
|
||||||
|
|||||||
@@ -79,6 +79,7 @@ def test_submission_unauthenticated(submission_page, terminal):
|
|||||||
'c', # Comment
|
'c', # Comment
|
||||||
'e', # Edit
|
'e', # Edit
|
||||||
'd', # Delete
|
'd', # Delete
|
||||||
|
'w', # Save
|
||||||
]
|
]
|
||||||
for ch in methods:
|
for ch in methods:
|
||||||
submission_page.controller.trigger(ch)
|
submission_page.controller.trigger(ch)
|
||||||
@@ -168,6 +169,29 @@ def test_submission_vote(submission_page, refresh_token):
|
|||||||
assert data['likes'] is None
|
assert data['likes'] is None
|
||||||
|
|
||||||
|
|
||||||
|
def test_submission_save(submission_page, refresh_token):
|
||||||
|
|
||||||
|
# Log in
|
||||||
|
submission_page.config.refresh_token = refresh_token
|
||||||
|
submission_page.oauth.authorize()
|
||||||
|
|
||||||
|
# Test voting on the submission
|
||||||
|
with mock.patch('praw.objects.Submission.save') as save, \
|
||||||
|
mock.patch('praw.objects.Submission.unsave') as unsave:
|
||||||
|
|
||||||
|
data = submission_page.content.get(submission_page.nav.absolute_index)
|
||||||
|
|
||||||
|
# Save
|
||||||
|
submission_page.controller.trigger('w')
|
||||||
|
assert save.called
|
||||||
|
assert data['saved'] is True
|
||||||
|
|
||||||
|
# Unsave
|
||||||
|
submission_page.controller.trigger('w')
|
||||||
|
assert unsave.called
|
||||||
|
assert data['saved'] is False
|
||||||
|
|
||||||
|
|
||||||
def test_submission_comment(submission_page, terminal, refresh_token):
|
def test_submission_comment(submission_page, terminal, refresh_token):
|
||||||
|
|
||||||
# Log in
|
# Log in
|
||||||
|
|||||||
Reference in New Issue
Block a user