Mercurial > silorider
view tests/test_silos_webmention.py @ 48:486affad656e
Rewrite posting process with card system and more structured API
- The basic posting process is more opinionated so that silos have less code to
write, and dry-run posting is handled by default.
- Add "card" system where SiloRider is able to fetch the page of a post to
check for any custom summary or featured image. This is how Twitter,
Facebook, Discord, and many others come up with their "preview card" when
a link is posted.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Sun, 08 Oct 2023 13:47:28 -0700 |
parents | d3c4c5082bbc |
children |
line wrap: on
line source
import unittest.mock import requests def test_one_article_no_mentions(cli, feedutil): feed = cli.createTempFeed(feedutil.makeFeed( """<h1 class="p-name">A new article</h1> <div class="e-content"> <p>This is the abstract of the article.</p> <p>Read more at <a class="u-url" href="https://example.org/a-new-article">permalink</a>.</p> </div> """ # NOQA )) cli.appendSiloConfig('test', 'webmention', url='/blah') cli.setFeedConfig('feed', feed) with unittest.mock.patch('requests.get') as mock_get, \ unittest.mock.patch('requests.post') as mock_post: mock_get.side_effect = [ _MockResponse('')] mock_post.side_effect = [] ctx, _ = cli.run('process') assert mock_get.call_args_list[0][0] == ('https://example.org/a-new-article',) # NOQA def test_one_article_one_mention(cli, feedutil): feed = cli.createTempFeed(feedutil.makeFeed( """<h1 class="p-name">A new article</h1> <div class="e-content"> <p>This is the abstract of the article.</p> <p>Read more at <a class="u-url" href="https://example.org/a-new-article">permalink</a>.</p> </div> """ # NOQA )) cli.appendSiloConfig('test', 'webmention', url='/blah') cli.setFeedConfig('feed', feed) with unittest.mock.patch('requests.get') as mock_get, \ unittest.mock.patch('requests.post') as mock_post: mock_get.side_effect = [ _MockResponse(""" <p>This is a reply to <a href="https://other.org/article">another article<a>.</p> """), # NOQA _MockResponse(""" <html><head> <link rel="webmention" href="https://other.org/webmention"> </head><body> </body></html>""")] mock_post.side_effect = [ _MockResponse('')] ctx, _ = cli.run('process') assert mock_get.call_args_list[0][0] == ('https://example.org/a-new-article',) # NOQA assert mock_get.call_args_list[1][0] == ('https://other.org/article',) # NOQA assert mock_post.call_args_list[0][0] == ('https://other.org/webmention',) # NOQA class _MockResponse: def __init__(self, txt): self.status_code = requests.codes.ok self.headers = {} self.history = [] self.text = self.content = txt