Mercurial > silorider
view tests/test_silos_webmention.py @ 33:9e4eb3f2754e
Improve handling of character limits in html stripping
The code now more closely keeps track of character counts during html
stripping, and should be absolutely exact. When the limit is exceeded,
it now restarts the stripping without any URLs to prevent incorrect
trimming. It also better preserves whitespace in the original post.
New tests are added for Twitter silo to ensure it works as expected.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Wed, 10 May 2023 16:10:12 -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