annotate tests/test_silos_webmention.py @ 60:b7da3d97ea99

Add profile URL handlers Silos register these handlers so that everybody knows if a hyperlink is a mention to another user on a particular social network. If any handler matches, silos not related to that social media will skip that link. It's possible than in rare cases we want that link everywhere, but so far I haven't needed it, compared to all the times I didn't want these links.
author Ludovic Chabant <ludovic@chabant.com>
date Sat, 28 Oct 2023 11:57:04 -0700
parents d3c4c5082bbc
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
19
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
1 import unittest.mock
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
2 import requests
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
3
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
4
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
5 def test_one_article_no_mentions(cli, feedutil):
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
6 feed = cli.createTempFeed(feedutil.makeFeed(
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
7 """<h1 class="p-name">A new article</h1>
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
8 <div class="e-content">
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
9 <p>This is the abstract of the article.</p>
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
10 <p>Read more at <a class="u-url" href="https://example.org/a-new-article">permalink</a>.</p>
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
11 </div>
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
12 """ # NOQA
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
13 ))
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
14
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
15 cli.appendSiloConfig('test', 'webmention', url='/blah')
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
16 cli.setFeedConfig('feed', feed)
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
17
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
18 with unittest.mock.patch('requests.get') as mock_get, \
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
19 unittest.mock.patch('requests.post') as mock_post:
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
20 mock_get.side_effect = [
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
21 _MockResponse('')]
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
22 mock_post.side_effect = []
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
23 ctx, _ = cli.run('process')
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
24 assert mock_get.call_args_list[0][0] == ('https://example.org/a-new-article',) # NOQA
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
25
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
26
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
27 def test_one_article_one_mention(cli, feedutil):
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
28 feed = cli.createTempFeed(feedutil.makeFeed(
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
29 """<h1 class="p-name">A new article</h1>
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
30 <div class="e-content">
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
31 <p>This is the abstract of the article.</p>
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
32 <p>Read more at <a class="u-url" href="https://example.org/a-new-article">permalink</a>.</p>
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
33 </div>
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
34 """ # NOQA
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
35 ))
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
36
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
37 cli.appendSiloConfig('test', 'webmention', url='/blah')
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
38 cli.setFeedConfig('feed', feed)
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
39
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
40 with unittest.mock.patch('requests.get') as mock_get, \
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
41 unittest.mock.patch('requests.post') as mock_post:
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
42 mock_get.side_effect = [
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
43 _MockResponse("""
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
44 <p>This is a reply to <a href="https://other.org/article">another article<a>.</p>
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
45 """), # NOQA
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
46 _MockResponse("""
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
47 <html><head>
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
48 <link rel="webmention" href="https://other.org/webmention">
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
49 </head><body>
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
50 </body></html>""")]
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
51 mock_post.side_effect = [
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
52 _MockResponse('')]
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
53 ctx, _ = cli.run('process')
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
54 assert mock_get.call_args_list[0][0] == ('https://example.org/a-new-article',) # NOQA
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
55 assert mock_get.call_args_list[1][0] == ('https://other.org/article',) # NOQA
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
56 assert mock_post.call_args_list[0][0] == ('https://other.org/webmention',) # NOQA
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
57
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
58
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
59 class _MockResponse:
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
60 def __init__(self, txt):
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
61 self.status_code = requests.codes.ok
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
62 self.headers = {}
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
63 self.history = []
d3c4c5082bbc Add Webmention silo.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
64 self.text = self.content = txt