comparison tests/test_silos_bluesky.py @ 63:c4dbbbb4990a

Fix Bluesky unit tests
author Ludovic Chabant <ludovic@chabant.com>
date Sat, 28 Oct 2023 13:06:45 -0700
parents d65f6dced79f
children dafbbf25bfc8
comparison
equal deleted inserted replaced
62:947bd8643e12 63:c4dbbbb4990a
62 62
63 assert ctx.cache.wasPosted('test', '/01234.html') 63 assert ctx.cache.wasPosted('test', '/01234.html')
64 blob = ctx.silos[0].client.blobs[0] 64 blob = ctx.silos[0].client.blobs[0]
65 assert blob == ('/retrieved/fullimg.jpg', None) 65 assert blob == ('/retrieved/fullimg.jpg', None)
66 post = ctx.silos[0].client.posts[0] 66 post = ctx.silos[0].client.posts[0]
67 embed = atprotomodels.AppBskyEmbedImages.Main(images=[1]) 67 assert post[1].images[0].__test_index == 0
68 embed = atprotomodels.AppBskyEmbedImages.Main(images=[
69 _make_atproto_image('/retrieved/fullimg.jpg', test_index=0)])
68 assert post == ("This is a quick photo update.", embed, None) 70 assert post == ("This is a quick photo update.", embed, None)
69 71
70 72
71 def test_one_micropost_with_two_photos(cli, feedutil, bskymock, monkeypatch): 73 def test_one_micropost_with_two_photos(cli, feedutil, bskymock, monkeypatch):
72 feed = cli.createTempFeed(feedutil.makeFeed( 74 feed = cli.createTempFeed(feedutil.makeFeed(
93 blob = ctx.silos[0].client.blobs[0] 95 blob = ctx.silos[0].client.blobs[0]
94 assert blob == ('/retrieved/fullimg1.jpg', None) 96 assert blob == ('/retrieved/fullimg1.jpg', None)
95 blob = ctx.silos[0].client.blobs[1] 97 blob = ctx.silos[0].client.blobs[1]
96 assert blob == ('/retrieved/fullimg2.jpg', None) 98 assert blob == ('/retrieved/fullimg2.jpg', None)
97 post = ctx.silos[0].client.posts[0] 99 post = ctx.silos[0].client.posts[0]
98 embed = atprotomodels.AppBskyEmbedImages.Main(images=[1, 2]) 100 embed = atprotomodels.AppBskyEmbedImages.Main(images=[
101 _make_atproto_image('/retrieved/fullimg1.jpg', test_index=0),
102 _make_atproto_image('/retrieved/fullimg2.jpg', test_index=1)])
99 assert post == ("This is a photo update with 2 photos.", embed, None) 103 assert post == ("This is a photo update with 2 photos.", embed, None)
100 104
101 105
102 def test_one_micropost_with_links(cli, feedutil, bskymock): 106 def test_one_micropost_with_links(cli, feedutil, bskymock):
103 cli.appendSiloConfig('test', 'bluesky') 107 cli.appendSiloConfig('test', 'bluesky')
151 from silorider.silos.bluesky import BlueskySilo 155 from silorider.silos.bluesky import BlueskySilo
152 BlueskySilo._CLIENT_CLASS = BlueskyMock 156 BlueskySilo._CLIENT_CLASS = BlueskyMock
153 return BlueskyMockUtil() 157 return BlueskyMockUtil()
154 158
155 159
160 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
162 # an actual Image object.
163 # Not sure why we need to use model_validate here -- the simple
164 # constructor with keywords throws a validation error :(
165 blob_link = atprotomodels.blob_ref.BlobRefLink.model_validate({'$link': link})
166 blob = atprotomodels.blob_ref.BlobRef(mime_type=mime_type, ref=blob_link, size=size)
167 img = atprotomodels.AppBskyEmbedImages.Image(alt=alt, image=blob)
168 if test_index is not None:
169 img.__test_index = test_index
170 return img
171
172
156 class BlueskyMock: 173 class BlueskyMock:
157 def __init__(self, base_url): 174 def __init__(self, base_url):
158 # base_url is unused here. 175 # base_url is unused here.
159 self.posts = [] 176 self.posts = []
160 self.blobs = [] 177 self.blobs = []
162 def login(self, email, password): 179 def login(self, email, password):
163 assert email == 'TEST_EMAIL' 180 assert email == 'TEST_EMAIL'
164 assert password == 'TEST_PASSWORD' 181 assert password == 'TEST_PASSWORD'
165 182
166 def upload_blob(self, tmpfile, desc): 183 def upload_blob(self, tmpfile, desc):
184 img = _make_atproto_image(tmpfile, test_index=len(self.blobs))
167 self.blobs.append((tmpfile, desc)) 185 self.blobs.append((tmpfile, desc))
168 return len(self.blobs) 186 return img
169 187
170 def send_post(self, text, post_datetime=None, embed=None, facets=None): 188 def send_post(self, text, post_datetime=None, embed=None, facets=None):
171 self.posts.append((text, embed, facets)) 189 self.posts.append((text, embed, facets))
172 190
173 191