annotate tests/test_silos_bluesky.py @ 69:dafbbf25bfc8

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