annotate tests/test_silos_bluesky.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 d65f6dced79f
children c4dbbbb4990a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
46
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
1 import pytest
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
2 import atproto.xrpc_client.models as atprotomodels
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
3 from .mockutil import mock_urllib
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
4
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
5
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
6 def test_one_article(cli, feedutil, bskymock):
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
7 feed = cli.createTempFeed(feedutil.makeFeed(
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
8 """<h1 class="p-name">A new article</h1>
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
9 <div class="e-content">
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
10 <p>This is the text of the article.</p>
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
11 <p>It has 2 paragraphs.</p>
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
12 </div>
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
13 <a class="u-url" href="https://example.org/a-new-article">permalink</a>"""
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
14 ))
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
15
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
16 cli.appendSiloConfig('test', 'bluesky')
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
17 cli.setFeedConfig('feed', feed)
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
18 bskymock.installCredentials(cli, 'test')
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
19
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
20 ctx, _ = cli.run('process')
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
21 assert ctx.cache.wasPosted('test', 'https://example.org/a-new-article')
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
22 post = ctx.silos[0].client.posts[0]
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
23 assert post == ('A new article https://example.org/a-new-article',
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
24 None, None)
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
25
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
26
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
27 def test_one_micropost(cli, feedutil, bskymock):
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
28 feed = cli.createTempFeed(feedutil.makeFeed(
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
29 """<p class="p-name">This is a quick update.</p>
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
30 <a class="u-url" href="/01234.html">permalink</a>"""
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
31 ))
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
32
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
33 cli.appendSiloConfig('test', 'bluesky')
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
34 cli.setFeedConfig('feed', feed)
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
35 bskymock.installCredentials(cli, 'test')
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
36
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
37 ctx, _ = cli.run('process')
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
38 assert ctx.cache.wasPosted('test', '/01234.html')
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
39 post = ctx.silos[0].client.posts[0]
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
40 assert post == ("This is a quick update.", None, None)
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
41
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
42
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
43 def test_one_micropost_with_one_photo(cli, feedutil, bskymock, monkeypatch):
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
44 feed = cli.createTempFeed(feedutil.makeFeed(
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
45 """<p class="p-name">This is a quick photo update.</p>
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
46 <div>
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
47 <a class="u-photo" href="/fullimg.jpg"><img src="/thumbimg.jpg"/></a>
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
48 </div>
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
49 <a class="u-url" href="/01234.html">permalink</a>"""
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
50 ))
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
51
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
52 cli.appendSiloConfig('test', 'bluesky')
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
53 cli.setFeedConfig('feed', feed)
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
54 bskymock.installCredentials(cli, 'test')
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
55
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
56 with monkeypatch.context() as m:
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
57 import silorider.silos.bluesky
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
58 mock_urllib(m)
58
d65f6dced79f Fix media callback patches in unit tests
Ludovic Chabant <ludovic@chabant.com>
parents: 48
diff changeset
59 m.setattr(silorider.silos.bluesky.BlueskySilo, 'mediaCallback',
46
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
60 _patched_media_callback)
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
61 ctx, _ = cli.run('process')
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
62
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
63 assert ctx.cache.wasPosted('test', '/01234.html')
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
64 blob = ctx.silos[0].client.blobs[0]
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
65 assert blob == ('/retrieved/fullimg.jpg', None)
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
66 post = ctx.silos[0].client.posts[0]
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
67 embed = atprotomodels.AppBskyEmbedImages.Main(images=[1])
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
68 assert post == ("This is a quick photo update.", embed, None)
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
69
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
70
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
71 def test_one_micropost_with_two_photos(cli, feedutil, bskymock, monkeypatch):
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
72 feed = cli.createTempFeed(feedutil.makeFeed(
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
73 """<p class="p-name">This is a photo update with 2 photos.</p>
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
74 <div>
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
75 <a class="u-photo" href="/fullimg1.jpg"><img src="/thumbimg1.jpg"/></a>
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
76 <a class="u-photo" href="/fullimg2.jpg"><img src="/thumbimg2.jpg"/></a>
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
77 </div>
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
78 <a class="u-url" href="/01234.html">permalink</a>"""
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
79 ))
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
80
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
81 cli.appendSiloConfig('test', 'bluesky')
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
82 cli.setFeedConfig('feed', feed)
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
83 bskymock.installCredentials(cli, 'test')
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
84
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
85 with monkeypatch.context() as m:
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
86 import silorider.silos.bluesky
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
87 mock_urllib(m)
58
d65f6dced79f Fix media callback patches in unit tests
Ludovic Chabant <ludovic@chabant.com>
parents: 48
diff changeset
88 m.setattr(silorider.silos.bluesky.BlueskySilo, 'mediaCallback',
46
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
89 _patched_media_callback)
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
90 ctx, _ = cli.run('process')
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
91
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
92 assert ctx.cache.wasPosted('test', '/01234.html')
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
93 blob = ctx.silos[0].client.blobs[0]
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
94 assert blob == ('/retrieved/fullimg1.jpg', None)
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
95 blob = ctx.silos[0].client.blobs[1]
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
96 assert blob == ('/retrieved/fullimg2.jpg', None)
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
97 post = ctx.silos[0].client.posts[0]
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
98 embed = atprotomodels.AppBskyEmbedImages.Main(images=[1, 2])
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
99 assert post == ("This is a photo update with 2 photos.", embed, None)
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
100
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
101
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
102 def test_one_micropost_with_links(cli, feedutil, bskymock):
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
103 cli.appendSiloConfig('test', 'bluesky')
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
104 bskymock.installCredentials(cli, 'test')
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
105
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
106 feed = cli.createTempFeed(feedutil.makeFeed(
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
107 """<p class="p-name">This is a link: http://example.org/blah</p>
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
108 <a class="u-url" href="/01234.html">permalink</a>"""))
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
109
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
110 cli.setFeedConfig('feed', feed)
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
111 ctx, _ = cli.run('process')
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
112 post = ctx.silos[0].client.posts[0]
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
113 assert post[0] == "This is a link: http://example.org/blah"
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
114 assert post[2] == None
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
115
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
116 feed = cli.createTempFeed(feedutil.makeFeed(
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
117 """<p class="e-content">This is another link: <a href="http://example.org/blah">http://example.org/blah</a></p>
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
118 <a class="u-url" href="/01234.html">permalink</a>""")) # NOQA
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
119 cli.setFeedConfig('feed', feed)
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
120 ctx, _ = cli.run('process')
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
121 post = ctx.silos[0].client.posts[0]
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
122 assert post[0] == "This is another link: http://example.org/blah" # NOQA
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
123 facet = _make_link_facet('http://example.org/blah', 22, 45)
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
124 assert post[2] == [facet]
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
125
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
126 feed = cli.createTempFeed(feedutil.makeFeed(
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
127 """<p class="e-content">This is yet <a href="http://example.org/blah">another link</a></p>
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
128 <a class="u-url" href="/01234.html">permalink</a>""")) # NOQA
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
129 cli.setFeedConfig('feed', feed)
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
130 ctx, _ = cli.run('process')
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
131 post = ctx.silos[0].client.posts[0]
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
132 assert post[0] == "This is yet another link" # NOQA
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
133 facet = _make_link_facet('http://example.org/blah', 12, 24)
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
134 assert post[2] == [facet]
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
135
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
136
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
137 def _make_link_facet(url, start, end):
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
138 return atprotomodels.AppBskyRichtextFacet.Main(
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
139 features=[atprotomodels.AppBskyRichtextFacet.Link(uri=url)],
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
140 index=atprotomodels.AppBskyRichtextFacet.ByteSlice(
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
141 byteStart=start, byteEnd=end),
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
142 )
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
143
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
144
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
145 def _patched_media_callback(self, tmpfile, mt, url, desc):
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
146 return self.client.upload_blob(tmpfile, desc)
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
147
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
148
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
149 @pytest.fixture(scope='session')
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
150 def bskymock():
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
151 from silorider.silos.bluesky import BlueskySilo
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
152 BlueskySilo._CLIENT_CLASS = BlueskyMock
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
153 return BlueskyMockUtil()
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
154
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
155
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
156 class BlueskyMock:
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
157 def __init__(self, base_url):
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
158 # base_url is unused here.
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
159 self.posts = []
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
160 self.blobs = []
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
161
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
162 def login(self, email, password):
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
163 assert email == 'TEST_EMAIL'
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
164 assert password == 'TEST_PASSWORD'
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
165
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
166 def upload_blob(self, tmpfile, desc):
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
167 self.blobs.append((tmpfile, desc))
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
168 return len(self.blobs)
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
169
48
486affad656e Rewrite posting process with card system and more structured API
Ludovic Chabant <ludovic@chabant.com>
parents: 46
diff changeset
170 def send_post(self, text, post_datetime=None, embed=None, facets=None):
46
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
171 self.posts.append((text, embed, facets))
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
172
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
173
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
174 class BlueskyMockUtil:
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
175 def installCredentials(self, cli, silo_name):
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
176 def do_install_credentials(ctx):
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
177 ctx.cache.setCustomValue(
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
178 '%s_email' % silo_name,
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
179 'TEST_EMAIL')
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
180 ctx.cache.setCustomValue(
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
181 '%s_password' % silo_name,
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
182 'TEST_PASSWORD')
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
183
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
184 cli.preExecHook(do_install_credentials)