From 8042f3e1f062e5008789f715f73bb4146635bf2f Mon Sep 17 00:00:00 2001 From: Michael Lazar Date: Sun, 3 Feb 2019 00:24:38 -0500 Subject: [PATCH] Added tests, minor refactoring --- rtv/content.py | 2 +- rtv/page.py | 30 ++- rtv/submission_page.py | 14 +- ...est_submission_prompt_and_select_link.yaml | 201 ++++++++++++++++++ tests/test_submission.py | 40 ++++ 5 files changed, 269 insertions(+), 18 deletions(-) create mode 100644 tests/cassettes/test_submission_prompt_and_select_link.yaml diff --git a/rtv/content.py b/rtv/content.py index 861f9f2..3dcf878 100644 --- a/rtv/content.py +++ b/rtv/content.py @@ -149,7 +149,7 @@ class Content(object): data['type'] = 'Comment' data['level'] = comment.nested_level data['body'] = comment.body - data['html'] = comment.body_html or '' + data['html'] = comment.body_html data['created'] = cls.humanize_timestamp(comment.created_utc) data['score'] = '{0} pts'.format( '-' if comment.score_hidden else comment.score) diff --git a/rtv/page.py b/rtv/page.py index 68f8f71..75534b4 100644 --- a/rtv/page.py +++ b/rtv/page.py @@ -312,19 +312,29 @@ class Page(object): """ data = self.get_selected_item() url_full = data.get('url_full') - if url_full and url_full != data['permalink']: + permalink = data.get('permalink') + + if url_full and url_full != permalink: # The item is a link-only submission that won't contain text - link = data['url_full'] + link = url_full else: - extracted_links = self.content.extract_links(data.get('html', '')) - if not extracted_links: - # Only one selection to choose from, so just pick it - link = data.get('permalink') + html = data.get('html') + if html: + extracted_links = self.content.extract_links(html) + if not extracted_links: + # Only one selection to choose from, so just pick it + link = permalink + else: + # Let the user decide which link to open + links = [] + if permalink: + links += [{'text': 'Permalink', 'href': permalink}] + links += extracted_links + link = self.term.prompt_user_to_select_link(links) else: - # Let the user decide which link to open - links = [{'text': 'Permalink', 'href': data['permalink']}] - links += extracted_links - link = self.term.prompt_user_to_select_link(links) + # Some items like hidden comments don't have any HTML to parse + link = permalink + return link @PageController.register(Command('COPY_PERMALINK')) diff --git a/rtv/submission_page.py b/rtv/submission_page.py index a7e7e2c..22fa14f 100644 --- a/rtv/submission_page.py +++ b/rtv/submission_page.py @@ -143,16 +143,16 @@ class SubmissionPage(Page): If there is more than one link contained in the item, prompt the user to choose which link to open. """ - link = self.prompt_and_select_link() - if link: - data = self.get_selected_item() - if data['type'] == 'Submission': + data = self.get_selected_item() + if data['type'] == 'Submission': + link = self.prompt_and_select_link() + if link: self.config.history.add(link) self.term.open_link(link) - elif data['type'] == 'Comment' and data['permalink']: + elif data['type'] == 'Comment': + link = self.prompt_and_select_link() + if link: self.term.open_link(link) - else: - self.term.flash() else: self.term.flash() diff --git a/tests/cassettes/test_submission_prompt_and_select_link.yaml b/tests/cassettes/test_submission_prompt_and_select_link.yaml new file mode 100644 index 0000000..2363358 --- /dev/null +++ b/tests/cassettes/test_submission_prompt_and_select_link.yaml @@ -0,0 +1,201 @@ +interactions: +- request: + body: null + headers: + Accept: ['*/*'] + Accept-Encoding: ['gzip, deflate'] + Connection: [keep-alive] + User-Agent: [rtv test suite PRAW/3.6.1 Python/3.7.0 b'Darwin-17.7.0-x86_64-i386-64bit'] + method: GET + uri: https://www.reddit.com/r/Python/comments/2xmo63.json + response: + body: + string: !!binary | + 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 + headers: + Accept-Ranges: [bytes] + Connection: [keep-alive] + Content-Encoding: [gzip] + Content-Length: ['9158'] + Content-Type: [application/json; charset=UTF-8] + Date: ['Sun, 03 Feb 2019 05:20:09 GMT'] + Server: [snooserv] + Set-Cookie: [edgebucket=llRU1AJmllWLGcM0iA; Domain=reddit.com; Max-Age=63071999; + Path=/; secure] + Strict-Transport-Security: [max-age=15552000; includeSubDomains; preload] + Vary: [accept-encoding] + Via: [1.1 varnish] + X-Cache: [MISS] + X-Cache-Hits: ['0'] + X-Moose: [majestic] + X-Served-By: [cache-mdw17380-MDW] + X-Timer: ['S1549171210.567463,VS0,VE236'] + access-control-allow-origin: ['*'] + access-control-expose-headers: [X-Moose] + cache-control: ['max-age=0, must-revalidate'] + x-content-type-options: [nosniff] + x-frame-options: [SAMEORIGIN] + x-ua-compatible: [IE=edge] + x-xss-protection: [1; mode=block] + status: {code: 200, message: OK} +version: 1 diff --git a/tests/test_submission.py b/tests/test_submission.py index 9143838..89a993a 100644 --- a/tests/test_submission.py +++ b/tests/test_submission.py @@ -582,3 +582,43 @@ def test_copy_to_clipboard_linux(submission_page, terminal, refresh_token): # Neither xclip or xsel installed, this is what happens on Travis CI text = b'Failed to copy url: External copy application not found' window.addstr.assert_called_with(1, 1, text) + + +def test_submission_prompt_and_select_link(submission_page, terminal): + + # A link submission should return the URL that it's pointing to + link = submission_page.prompt_and_select_link() + assert link == 'https://github.com/michael-lazar/rtv' + + with mock.patch.object(submission_page, 'clear_input_queue'): + submission_page.controller.trigger('j') + + # The first comment doesn't have any links in the comment body + link = submission_page.prompt_and_select_link() + data = submission_page.get_selected_item() + assert link == data['permalink'] + + with mock.patch.object(submission_page, 'clear_input_queue'): + submission_page.controller.trigger('j') + + # The second comment has a link embedded in the comment body, and + # the user is prompted to select which link to open + with mock.patch.object(terminal, 'prompt_user_to_select_link') as prompt: + prompt.return_value = 'https://selected_link' + + link = submission_page.prompt_and_select_link() + data = submission_page.get_selected_item() + + assert link == prompt.return_value + + embedded_url = 'http://peterdowns.com/posts/first-time-with-pypi.html' + assert prompt.call_args[0][0] == [ + {'text': 'Permalink', 'href': data['permalink']}, + {'text': 'Relevant tutorial', 'href': embedded_url} + ] + + submission_page.controller.trigger(' ') + + # The comment is now hidden so there are no links to select + link = submission_page.prompt_and_select_link() + assert link is None