annotate tests/test_silos_bluesky.py @ 77:5381655e7f6d

Bluesky silo now tries to create link card embeds
author Ludovic Chabant <ludovic@chabant.com>
date Wed, 28 Aug 2024 08:40:52 -0700
parents 08ee3ffbe508
children
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
74
08ee3ffbe508 Fix Bluesky formatting for posts too long, or with a link
Ludovic Chabant <ludovic@chabant.com>
parents: 69
diff changeset
146 def test_one_micropost_too_long(cli, feedutil, bskymock):
08ee3ffbe508 Fix Bluesky formatting for posts too long, or with a link
Ludovic Chabant <ludovic@chabant.com>
parents: 69
diff changeset
147 cli.appendSiloConfig('test', 'bluesky')
08ee3ffbe508 Fix Bluesky formatting for posts too long, or with a link
Ludovic Chabant <ludovic@chabant.com>
parents: 69
diff changeset
148 bskymock.installCredentials(cli, 'test')
08ee3ffbe508 Fix Bluesky formatting for posts too long, or with a link
Ludovic Chabant <ludovic@chabant.com>
parents: 69
diff changeset
149
08ee3ffbe508 Fix Bluesky formatting for posts too long, or with a link
Ludovic Chabant <ludovic@chabant.com>
parents: 69
diff changeset
150 feed = cli.createTempFeed(feedutil.makeFeed(
08ee3ffbe508 Fix Bluesky formatting for posts too long, or with a link
Ludovic Chabant <ludovic@chabant.com>
parents: 69
diff changeset
151 """<p class="p-name">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum</p>
08ee3ffbe508 Fix Bluesky formatting for posts too long, or with a link
Ludovic Chabant <ludovic@chabant.com>
parents: 69
diff changeset
152 <a class="u-url" href="/01234.html">permalink</a>"""))
08ee3ffbe508 Fix Bluesky formatting for posts too long, or with a link
Ludovic Chabant <ludovic@chabant.com>
parents: 69
diff changeset
153
08ee3ffbe508 Fix Bluesky formatting for posts too long, or with a link
Ludovic Chabant <ludovic@chabant.com>
parents: 69
diff changeset
154 cli.setFeedConfig('feed', feed)
08ee3ffbe508 Fix Bluesky formatting for posts too long, or with a link
Ludovic Chabant <ludovic@chabant.com>
parents: 69
diff changeset
155 ctx, _ = cli.run('process')
08ee3ffbe508 Fix Bluesky formatting for posts too long, or with a link
Ludovic Chabant <ludovic@chabant.com>
parents: 69
diff changeset
156 post = ctx.silos[0].client.posts[0]
08ee3ffbe508 Fix Bluesky formatting for posts too long, or with a link
Ludovic Chabant <ludovic@chabant.com>
parents: 69
diff changeset
157 assert post[0] == "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate... /01234.html"
08ee3ffbe508 Fix Bluesky formatting for posts too long, or with a link
Ludovic Chabant <ludovic@chabant.com>
parents: 69
diff changeset
158
46
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
159 def _make_link_facet(url, start, end):
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
160 return atprotomodels.AppBskyRichtextFacet.Main(
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
161 features=[atprotomodels.AppBskyRichtextFacet.Link(uri=url)],
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
162 index=atprotomodels.AppBskyRichtextFacet.ByteSlice(
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
163 byteStart=start, byteEnd=end),
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
164 )
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
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
167 def _patched_media_callback(self, tmpfile, mt, url, desc):
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
168 return self.client.upload_blob(tmpfile, desc)
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
169
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
170
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
171 @pytest.fixture(scope='session')
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
172 def bskymock():
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
173 from silorider.silos.bluesky import BlueskySilo
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
174 BlueskySilo._CLIENT_CLASS = BlueskyMock
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
175 return BlueskyMockUtil()
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
176
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
177
63
c4dbbbb4990a Fix Bluesky unit tests
Ludovic Chabant <ludovic@chabant.com>
parents: 58
diff changeset
178 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
179 # atproto will validate models and that forces us to create
c4dbbbb4990a Fix Bluesky unit tests
Ludovic Chabant <ludovic@chabant.com>
parents: 58
diff changeset
180 # an actual Image object.
c4dbbbb4990a Fix Bluesky unit tests
Ludovic Chabant <ludovic@chabant.com>
parents: 58
diff changeset
181 # 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
182 # 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
183 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
184 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
185 img = atprotomodels.AppBskyEmbedImages.Image(alt=alt, image=blob)
c4dbbbb4990a Fix Bluesky unit tests
Ludovic Chabant <ludovic@chabant.com>
parents: 58
diff changeset
186 if test_index is not None:
c4dbbbb4990a Fix Bluesky unit tests
Ludovic Chabant <ludovic@chabant.com>
parents: 58
diff changeset
187 img.__test_index = test_index
c4dbbbb4990a Fix Bluesky unit tests
Ludovic Chabant <ludovic@chabant.com>
parents: 58
diff changeset
188 return img
c4dbbbb4990a Fix Bluesky unit tests
Ludovic Chabant <ludovic@chabant.com>
parents: 58
diff changeset
189
c4dbbbb4990a Fix Bluesky unit tests
Ludovic Chabant <ludovic@chabant.com>
parents: 58
diff changeset
190
46
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
191 class BlueskyMock:
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
192 def __init__(self, base_url):
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
193 # base_url is unused here.
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
194 self.posts = []
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
195 self.blobs = []
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 def login(self, email, password):
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
198 assert email == 'TEST_EMAIL'
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
199 assert password == 'TEST_PASSWORD'
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
200
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
201 def upload_blob(self, tmpfile, desc):
63
c4dbbbb4990a Fix Bluesky unit tests
Ludovic Chabant <ludovic@chabant.com>
parents: 58
diff changeset
202 img = _make_atproto_image(tmpfile, test_index=len(self.blobs))
46
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
203 self.blobs.append((tmpfile, desc))
63
c4dbbbb4990a Fix Bluesky unit tests
Ludovic Chabant <ludovic@chabant.com>
parents: 58
diff changeset
204 return img
46
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
205
48
486affad656e Rewrite posting process with card system and more structured API
Ludovic Chabant <ludovic@chabant.com>
parents: 46
diff changeset
206 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
207 self.posts.append((text, embed, facets))
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
208
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
209
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
210 class BlueskyMockUtil:
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
211 def installCredentials(self, cli, silo_name):
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
212 def do_install_credentials(ctx):
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
213 ctx.cache.setCustomValue(
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
214 '%s_email' % silo_name,
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
215 'TEST_EMAIL')
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
216 ctx.cache.setCustomValue(
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
217 '%s_password' % silo_name,
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
218 'TEST_PASSWORD')
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
219
ac5911e76ef2 Add Bluesky silo
Ludovic Chabant <ludovic@chabant.com>
parents:
diff changeset
220 cli.preExecHook(do_install_credentials)