fix: truncate article titles to safe UTF-8 budget

This commit is contained in:
Longtail committed 2026-10-31 18:38:41 +08:00
1 parent 24a73b19c0
commit 7ab0bc3485
7 files changed
+115 -15

No files matched your search

+18 -1
View File
@@ -104,9 +104,26 @@ class QueueTests(unittest.TestCase):
def test_title_does_not_break_emoji(self):
short = short_title('😀' * 50)
self.assertTrue(short.endswith('...'))
self.assertLessEqual(len(short.encode('utf-16-le')) // 2, 80)
self.assertLessEqual(len(short.encode('utf-8')), 78)
self.assertEqual(short_title('短标题'), '短标题')
def test_existing_queued_title_updates_before_import_only(self):
original = '中' * 30
self.md.write_text('# ' + original + '\n\n正文。\n\n来源:测试,如有侵权,请联系删除。')
self.store.enqueue(self.article)
with self.store.db() as db:
job = self.store.state()['jobs'][0]
job['title'] = original # Simulate a queue created by the old version.
self.store._save(db, job)
self.store.control('start')
job = self.store.next(self.owner)['job']
self.assertEqual(job['title'], '中' * 25 + '...')
self.assertEqual(self.store.package(dict(owner='tab-a', id=job['id']))['title'], job['title'])
self.submit(job)
restarted = Store(self.root / 'queue.sqlite3')
self.assertEqual(restarted.state()['jobs'][0]['snapshot']['title'], job['title'])
self.assertEqual(restarted.state()['jobs'][0]['original_title'], original)
def test_unsupported_images_stop_before_queue(self):
(self.article / 'a.webp').write_bytes(b'webp')
with self.assertRaisesRegex(ValueError, '暂不支持'):