Mercurial > silorider
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 |