备份现场结果补录、图片修复与跳过文章功能
This commit is contained in:
1 parent
1e6504b4a2
commit
d157c179c8
20 files changed
+597
-47
No files matched your search
@@ -144,6 +144,63 @@ class QueueTests(unittest.TestCase):
|
||||
self.assertEqual(self.store.next(self.owner)['action'], 'idle')
|
||||
self.assertIsNone(self.store.run['switch'])
|
||||
|
||||
def test_skip_preserves_history_and_continues_next_without_counting(self):
|
||||
job = self.begin()
|
||||
other = self.root / 'other'
|
||||
shutil.copytree(self.article, other)
|
||||
(other / 'a.md').write_text(self.md.read_text().replace('正文内容', '下一篇内容'))
|
||||
self.store.enqueue(other)
|
||||
self.transition(job, 'importing')
|
||||
self.transition(job, 'formatting')
|
||||
self.transition(job, 'awaiting_user_review')
|
||||
result = self.store.skip(dict(owner='tab-a', id=job['id'], epoch=self.store.run['epoch']))
|
||||
self.assertEqual(result['fid'], 125)
|
||||
self.assertEqual(self.store.run['batch']['count'], 0)
|
||||
self.assertEqual(self.store.state()['history_count'], 0)
|
||||
self.assertEqual(next(j for j in self.store.state()['jobs'] if j['id'] == job['id'])['state'], 'skipped')
|
||||
self.assertIn('已在队列', self.store.enqueue(self.article))
|
||||
self.assertEqual(self.store.next(self.owner)['action'], 'prepare')
|
||||
self.assertNotEqual(self.store.run['active'], job['id'])
|
||||
restarted = Store(self.root / 'queue.sqlite3')
|
||||
self.assertEqual(next(j for j in restarted.state()['jobs'] if j['id'] == job['id'])['state'], 'skipped')
|
||||
|
||||
def test_skip_last_article_finishes_queue(self):
|
||||
job = self.begin()
|
||||
self.store.skip(dict(owner='tab-a', id=job['id'], epoch=self.store.run['epoch']))
|
||||
self.assertEqual(self.store.next(self.owner)['action'], 'idle')
|
||||
self.assertFalse(self.store.run['running'])
|
||||
self.assertIsNone(self.store.run['switch'])
|
||||
|
||||
def test_skip_rejects_other_tab_stale_request_and_duplicate(self):
|
||||
job = self.begin()
|
||||
data = dict(owner='tab-a', id=job['id'], epoch=self.store.run['epoch'])
|
||||
with self.assertRaisesRegex(ValueError, '另一个'):
|
||||
self.store.skip({**data, 'owner': 'tab-b'})
|
||||
self.store.control('stop')
|
||||
with self.assertRaisesRegex(ValueError, '状态已改变'):
|
||||
self.store.skip(data)
|
||||
data['epoch'] = self.store.run['epoch']
|
||||
self.store.skip(data)
|
||||
with self.assertRaises(ValueError):
|
||||
self.store.skip(data)
|
||||
|
||||
def test_skip_resumes_unsubmitted_error_but_rejects_submitted_errors(self):
|
||||
job = self.begin()
|
||||
self.transition(job, 'needs_attention', error='上传失败')
|
||||
self.store.skip(dict(owner='tab-a', id=job['id'], epoch=self.store.run['epoch']))
|
||||
self.assertTrue(self.store.run['running'])
|
||||
self.assertEqual(self.store.next(self.owner)['action'], 'idle')
|
||||
|
||||
def test_submitted_article_cannot_be_skipped(self):
|
||||
job = self.begin()
|
||||
self.submit(job)
|
||||
for state in ('user_submitting', 'submit_unknown', 'needs_attention'):
|
||||
if state != 'user_submitting':
|
||||
self.transition(job, state)
|
||||
with self.assertRaisesRegex(ValueError, '已提交'):
|
||||
self.store.skip(dict(owner='tab-a', id=job['id'], epoch=self.store.run['epoch']))
|
||||
self.assertEqual(self.store.run['active'], job['id'])
|
||||
|
||||
def test_bad_result_does_not_increment(self):
|
||||
job = self.begin();self.submit(job)
|
||||
with self.assertRaises(ValueError):
|
||||
|
||||
Reference in new issue
Block a user