保存前端调整前的当前状态
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
10 files changed
+204
-3
No files matched your search
@@ -278,6 +278,56 @@ class QueueTests(unittest.TestCase):
|
||||
self.assertTrue(saved['identity_needs_reconciliation'])
|
||||
self.assertFalse(restarted.run['running'])
|
||||
|
||||
def test_remove_selected_preserves_files_and_survives_restart(self):
|
||||
self.store.enqueue(self.article)
|
||||
other = self.root / 'other'
|
||||
shutil.copytree(self.article, other)
|
||||
(other / 'a.md').write_text(self.md.read_text().replace('正文内容', '另一篇内容'))
|
||||
self.store.enqueue(other)
|
||||
jobs = self.store.state()['jobs']
|
||||
result = self.store.remove({'ids': [jobs[0]['id'], jobs[0]['id']]})
|
||||
self.assertEqual(result['removed'], 1)
|
||||
self.assertTrue(self.md.is_file())
|
||||
restarted = Store(self.root / 'queue.sqlite3')
|
||||
self.assertEqual([j['id'] for j in restarted.state()['jobs']], [jobs[1]['id']])
|
||||
self.assertEqual(restarted.enqueue(self.article), '已入队')
|
||||
self.assertEqual(restarted.remove({'ids': [j['id'] for j in restarted.state()['jobs']]})['removed'], 2)
|
||||
self.assertEqual(restarted.state()['jobs'], [])
|
||||
|
||||
def test_remove_is_atomic_and_protects_current_task(self):
|
||||
job = self.begin()
|
||||
with self.assertRaisesRegex(ValueError, '暂停'):
|
||||
self.store.remove({'ids': [job['id']]})
|
||||
self.store.control('pause')
|
||||
with self.assertRaisesRegex(ValueError, '当前任务'):
|
||||
self.store.remove({'ids': [job['id']]})
|
||||
self.store.resolve(dict(id=job['id'], confirmed_not_accepted=True, retry=False))
|
||||
for ids in ([], 'invalid', [None], [job['id'], 'missing']):
|
||||
with self.assertRaises(ValueError):
|
||||
self.store.remove({'ids': ids})
|
||||
self.assertEqual(len(self.store.state()['jobs']), 1)
|
||||
self.store.remove({'ids': [job['id']]})
|
||||
self.assertEqual(self.store.state()['jobs'], [])
|
||||
|
||||
def test_remove_accepted_retains_deduplication_and_counts(self):
|
||||
job = self.begin(); self.submit(job); self.accept(job)
|
||||
self.store.control('pause')
|
||||
before = self.store.state()['history_count']
|
||||
self.store.remove({'ids': [job['id']]})
|
||||
self.assertEqual(self.store.state()['jobs'], [])
|
||||
self.assertEqual(self.store.state()['history_count'], before)
|
||||
self.assertEqual(self.store.run['batch']['count'], 1)
|
||||
self.assertIn('已受理', self.store.enqueue(self.article))
|
||||
with self.store.db() as db:
|
||||
self.assertEqual(db.execute('SELECT count(*) FROM posts').fetchone()[0], 1)
|
||||
|
||||
def test_remove_unresolved_submission_is_blocked_even_without_active_pointer(self):
|
||||
job = self.begin(); self.submit(job); self.store.control('pause')
|
||||
self.store.run['active'] = None
|
||||
with self.assertRaisesRegex(ValueError, '尚未核对'):
|
||||
self.store.remove({'ids': [job['id']]})
|
||||
self.assertEqual(len(self.store.state()['jobs']), 1)
|
||||
|
||||
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