comparison 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
comparison
equal deleted inserted replaced
68:c678ca85cc25 69:dafbbf25bfc8
1 import os.path
1 import pytest 2 import pytest
2 import atproto.xrpc_client.models as atprotomodels 3 from atproto import models as atprotomodels
3 from .mockutil import mock_urllib 4 from .mockutil import mock_urllib
4 5
5 6
6 def test_one_article(cli, feedutil, bskymock): 7 def test_one_article(cli, feedutil, bskymock):
7 feed = cli.createTempFeed(feedutil.makeFeed( 8 feed = cli.createTempFeed(feedutil.makeFeed(
18 bskymock.installCredentials(cli, 'test') 19 bskymock.installCredentials(cli, 'test')
19 20
20 ctx, _ = cli.run('process') 21 ctx, _ = cli.run('process')
21 assert ctx.cache.wasPosted('test', 'https://example.org/a-new-article') 22 assert ctx.cache.wasPosted('test', 'https://example.org/a-new-article')
22 post = ctx.silos[0].client.posts[0] 23 post = ctx.silos[0].client.posts[0]
23 assert post == ('A new article https://example.org/a-new-article', 24 assert post == (
24 None, None) 25 'A new article https://example.org/a-new-article',
26 None,
27 [_make_link_facet('https://example.org/a-new-article', 14, 47)])
25 28
26 29
27 def test_one_micropost(cli, feedutil, bskymock): 30 def test_one_micropost(cli, feedutil, bskymock):
28 feed = cli.createTempFeed(feedutil.makeFeed( 31 feed = cli.createTempFeed(feedutil.makeFeed(
29 """<p class="p-name">This is a quick update.</p> 32 """<p class="p-name">This is a quick update.</p>
54 bskymock.installCredentials(cli, 'test') 57 bskymock.installCredentials(cli, 'test')
55 58
56 with monkeypatch.context() as m: 59 with monkeypatch.context() as m:
57 import silorider.silos.bluesky 60 import silorider.silos.bluesky
58 mock_urllib(m) 61 mock_urllib(m)
62 m.setattr(os.path, 'getsize', lambda path: 42)
59 m.setattr(silorider.silos.bluesky.BlueskySilo, 'mediaCallback', 63 m.setattr(silorider.silos.bluesky.BlueskySilo, 'mediaCallback',
60 _patched_media_callback) 64 _patched_media_callback)
61 ctx, _ = cli.run('process') 65 ctx, _ = cli.run('process')
62 66
63 assert ctx.cache.wasPosted('test', '/01234.html') 67 assert ctx.cache.wasPosted('test', '/01234.html')
85 bskymock.installCredentials(cli, 'test') 89 bskymock.installCredentials(cli, 'test')
86 90
87 with monkeypatch.context() as m: 91 with monkeypatch.context() as m:
88 import silorider.silos.bluesky 92 import silorider.silos.bluesky
89 mock_urllib(m) 93 mock_urllib(m)
94 m.setattr(os.path, 'getsize', lambda path: 42)
90 m.setattr(silorider.silos.bluesky.BlueskySilo, 'mediaCallback', 95 m.setattr(silorider.silos.bluesky.BlueskySilo, 'mediaCallback',
91 _patched_media_callback) 96 _patched_media_callback)
92 ctx, _ = cli.run('process') 97 ctx, _ = cli.run('process')
93 98
94 assert ctx.cache.wasPosted('test', '/01234.html') 99 assert ctx.cache.wasPosted('test', '/01234.html')
160 def _make_atproto_image(link, alt="", mime_type="image/jpg", size=100, test_index=None): 165 def _make_atproto_image(link, alt="", mime_type="image/jpg", size=100, test_index=None):
161 # atproto will validate models and that forces us to create 166 # atproto will validate models and that forces us to create
162 # an actual Image object. 167 # an actual Image object.
163 # Not sure why we need to use model_validate here -- the simple 168 # Not sure why we need to use model_validate here -- the simple
164 # constructor with keywords throws a validation error :( 169 # constructor with keywords throws a validation error :(
165 blob_link = atprotomodels.blob_ref.BlobRefLink.model_validate({'$link': link}) 170 blob_link = atprotomodels.blob_ref.IpldLink.model_validate({'$link': link})
166 blob = atprotomodels.blob_ref.BlobRef(mime_type=mime_type, ref=blob_link, size=size) 171 blob = atprotomodels.blob_ref.BlobRef(mime_type=mime_type, ref=blob_link, size=size)
167 img = atprotomodels.AppBskyEmbedImages.Image(alt=alt, image=blob) 172 img = atprotomodels.AppBskyEmbedImages.Image(alt=alt, image=blob)
168 if test_index is not None: 173 if test_index is not None:
169 img.__test_index = test_index 174 img.__test_index = test_index
170 return img 175 return img