annotate tests/test_silos_bluesky.py @ 67:c5bf03406a33

Resize photos below a file size threshold for all silos Before we were doing it only for Bluesky, but now it's available to all other silos.
author Ludovic Chabant <ludovic@chabant.com>
date Tue, 26 Dec 2023 16:30:36 -0800
parents c4dbbbb4990a
children dafbbf25bfc8
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]
63
c4dbbbb4990a Fix Bluesky unit tests
Ludovic Chabant <ludovic@chabant.com>
parents: 58
diff changeset
67 assert post[1].images[0].__test_index == 0
c4dbbbb4990a Fix Bluesky unit tests
Ludovic Chabant <ludovic@chabant.com>
parents: 58
diff changeset
68 embed = atprotomodels.AppBskyEmbedImages.Main(images=[
c4dbbbb4990a Fix Bluesky unit tests
Ludovic Chabant <ludovic@chabant.com>
parents: 58
diff changeset
69 _make_atproto_image('/retrieved/fullimg.jpg', test_index=0)])
46
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
70 assert post == ("This is a quick photo update.", embed, None)
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
71
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
72
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
73 def test_one_micropost_with_two_photos(cli, feedutil, bskymock, monkeypatch):
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
74 feed = cli.createTempFeed(feedutil.makeFeed(
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
75 """<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
76 <div>
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
77 <a class="u-photo" href="/fullimg1.jpg"><img src="/thumbimg1.jpg"/></a>
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
78 <a class="u-photo" href="/fullimg2.jpg"><img src="/thumbimg2.jpg"/></a>
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
79 </div>
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
80 <a class="u-url" href="/01234.html">permalink</a>"""
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
81 ))
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
82
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
83 cli.appendSiloConfig('test', 'bluesky')
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
84 cli.setFeedConfig('feed', feed)
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
85 bskymock.installCredentials(cli, 'test')
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
86
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
87 with monkeypatch.context() as m:
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
88 import silorider.silos.bluesky
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
89 mock_urllib(m)
58
d65f6dced79f Fix media callback patches in unit tests
Ludovic Chabant <ludovic@chabant.com>
parents: 48
diff changeset
90 m.setattr(silorider.silos.bluesky.BlueskySilo, 'mediaCallback',
46
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
91 _patched_media_callback)
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
92 ctx, _ = cli.run('process')
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
93
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
94 assert ctx.cache.wasPosted('test', '/01234.html')
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
95 blob = ctx.silos[0].client.blobs[0]
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
96 assert blob == ('/retrieved/fullimg1.jpg', None)
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
97 blob = ctx.silos[0].client.blobs[1]
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
98 assert blob == ('/retrieved/fullimg2.jpg', None)
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
99 post = ctx.silos[0].client.posts[0]
63
c4dbbbb4990a Fix Bluesky unit tests
Ludovic Chabant <ludovic@chabant.com>
parents: 58
diff changeset
100 embed = atprotomodels.AppBskyEmbedImages.Main(images=[
c4dbbbb4990a Fix Bluesky unit tests
Ludovic Chabant <ludovic@chabant.com>
parents: 58
diff changeset
101 _make_atproto_image('/retrieved/fullimg1.jpg', test_index=0),
c4dbbbb4990a Fix Bluesky unit tests
Ludovic Chabant <ludovic@chabant.com>
parents: 58
diff changeset
102 _make_atproto_image('/retrieved/fullimg2.jpg', test_index=1)])
46
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
103 assert post == ("This is a photo update with 2 photos.", embed, None)
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
104
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 def test_one_micropost_with_links(cli, feedutil, bskymock):
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
107 cli.appendSiloConfig('test', 'bluesky')
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
108 bskymock.installCredentials(cli, 'test')
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 feed = cli.createTempFeed(feedutil.makeFeed(
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
111 """<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
112 <a class="u-url" href="/01234.html">permalink</a>"""))
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
113
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
114 cli.setFeedConfig('feed', feed)
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
115 ctx, _ = cli.run('process')
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
116 post = ctx.silos[0].client.posts[0]
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
117 assert post[0] == "This is a link: http://example.org/blah"
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
118 assert post[2] == None
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
119
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
120 feed = cli.createTempFeed(feedutil.makeFeed(
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
121 """<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
122 <a class="u-url" href="/01234.html">permalink</a>""")) # NOQA
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
123 cli.setFeedConfig('feed', feed)
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
124 ctx, _ = cli.run('process')
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
125 post = ctx.silos[0].client.posts[0]
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
126 assert post[0] == "This is another link: http://example.org/blah" # NOQA
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
127 facet = _make_link_facet('http://example.org/blah', 22, 45)
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
128 assert post[2] == [facet]
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
129
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
130 feed = cli.createTempFeed(feedutil.makeFeed(
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
131 """<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
132 <a class="u-url" href="/01234.html">permalink</a>""")) # NOQA
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
133 cli.setFeedConfig('feed', feed)
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
134 ctx, _ = cli.run('process')
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
135 post = ctx.silos[0].client.posts[0]
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
136 assert post[0] == "This is yet another link" # NOQA
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
137 facet = _make_link_facet('http://example.org/blah', 12, 24)
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
138 assert post[2] == [facet]
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
139
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
140
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
141 def _make_link_facet(url, start, end):
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
142 return atprotomodels.AppBskyRichtextFacet.Main(
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
143 features=[atprotomodels.AppBskyRichtextFacet.Link(uri=url)],
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
144 index=atprotomodels.AppBskyRichtextFacet.ByteSlice(
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
145 byteStart=start, byteEnd=end),
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
146 )
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 def _patched_media_callback(self, tmpfile, mt, url, desc):
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
150 return self.client.upload_blob(tmpfile, desc)
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
151
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
152
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
153 @pytest.fixture(scope='session')
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
154 def bskymock():
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
155 from silorider.silos.bluesky import BlueskySilo
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
156 BlueskySilo._CLIENT_CLASS = BlueskyMock
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
157 return BlueskyMockUtil()
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
158
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
159
63
c4dbbbb4990a Fix Bluesky unit tests
Ludovic Chabant <ludovic@chabant.com>
parents: 58
diff changeset
160 def _make_atproto_image(link, alt="", mime_type="image/jpg", size=100, test_index=None):
c4dbbbb4990a Fix Bluesky unit tests
Ludovic Chabant <ludovic@chabant.com>
parents: 58
diff changeset
161 # atproto will validate models and that forces us to create
c4dbbbb4990a Fix Bluesky unit tests
Ludovic Chabant <ludovic@chabant.com>
parents: 58
diff changeset
162 # an actual Image object.
c4dbbbb4990a Fix Bluesky unit tests
Ludovic Chabant <ludovic@chabant.com>
parents: 58
diff changeset
163 # Not sure why we need to use model_validate here -- the simple
c4dbbbb4990a Fix Bluesky unit tests
Ludovic Chabant <ludovic@chabant.com>
parents: 58
diff changeset
164 # constructor with keywords throws a validation error :(
c4dbbbb4990a Fix Bluesky unit tests
Ludovic Chabant <ludovic@chabant.com>
parents: 58
diff changeset
165 blob_link = atprotomodels.blob_ref.BlobRefLink.model_validate({'$link': link})
c4dbbbb4990a Fix Bluesky unit tests
Ludovic Chabant <ludovic@chabant.com>
parents: 58
diff changeset
166 blob = atprotomodels.blob_ref.BlobRef(mime_type=mime_type, ref=blob_link, size=size)
c4dbbbb4990a Fix Bluesky unit tests
Ludovic Chabant <ludovic@chabant.com>
parents: 58
diff changeset
167 img = atprotomodels.AppBskyEmbedImages.Image(alt=alt, image=blob)
c4dbbbb4990a Fix Bluesky unit tests
Ludovic Chabant <ludovic@chabant.com>
parents: 58
diff changeset
168 if test_index is not None:
c4dbbbb4990a Fix Bluesky unit tests
Ludovic Chabant <ludovic@chabant.com>
parents: 58
diff changeset
169 img.__test_index = test_index
c4dbbbb4990a Fix Bluesky unit tests
Ludovic Chabant <ludovic@chabant.com>
parents: 58
diff changeset
170 return img
c4dbbbb4990a Fix Bluesky unit tests
Ludovic Chabant <ludovic@chabant.com>
parents: 58
diff changeset
171
c4dbbbb4990a Fix Bluesky unit tests
Ludovic Chabant <ludovic@chabant.com>
parents: 58
diff changeset
172
46
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
173 class BlueskyMock:
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
174 def __init__(self, base_url):
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
175 # base_url is unused here.
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
176 self.posts = []
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
177 self.blobs = []
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
178
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
179 def login(self, email, password):
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
180 assert email == 'TEST_EMAIL'
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
181 assert password == 'TEST_PASSWORD'
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
182
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
183 def upload_blob(self, tmpfile, desc):
63
c4dbbbb4990a Fix Bluesky unit tests
Ludovic Chabant <ludovic@chabant.com>
parents: 58
diff changeset
184 img = _make_atproto_image(tmpfile, test_index=len(self.blobs))
46
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
185 self.blobs.append((tmpfile, desc))
63
c4dbbbb4990a Fix Bluesky unit tests
Ludovic Chabant <ludovic@chabant.com>
parents: 58
diff changeset
186 return img
46
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
187
48
486affad656e Rewrite posting process with card system and more structured API
Ludovic Chabant <ludovic@chabant.com>
parents: 46
diff changeset
188 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
189 self.posts.append((text, embed, facets))
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
190
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
191
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
192 class BlueskyMockUtil:
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
193 def installCredentials(self, cli, silo_name):
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
194 def do_install_credentials(ctx):
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
195 ctx.cache.setCustomValue(
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
196 '%s_email' % silo_name,
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
197 'TEST_EMAIL')
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
198 ctx.cache.setCustomValue(
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
199 '%s_password' % silo_name,
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
200 'TEST_PASSWORD')
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
201
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
202 cli.preExecHook(do_install_credentials)