feat: 安全移除本地任务记录 (#108)
This commit is contained in:
@@ -627,6 +627,105 @@ class PDDTaskPageEventTest(unittest.TestCase):
|
||||
events.shutdown()
|
||||
page.deleteLater()
|
||||
|
||||
def test_remove_confirmation_cancel_keeps_local_task(self):
|
||||
self._add_task(1)
|
||||
connection = open_database(self.db_path)
|
||||
try:
|
||||
with connection:
|
||||
connection.execute(
|
||||
"UPDATE pdd_tasks SET status = 'succeeded'"
|
||||
" WHERE remote_task_id = 'PDD-001'"
|
||||
)
|
||||
finally:
|
||||
connection.close()
|
||||
page = PDDTaskPage()
|
||||
gateway = RecordingClaimGateway()
|
||||
events = PDDTaskPageEvent(page, self.repository, claim_gateway=gateway)
|
||||
events.load_initial_tasks()
|
||||
page.taskModel.setData(
|
||||
page.taskModel.index(0, 0), Qt.Checked, Qt.CheckStateRole
|
||||
)
|
||||
|
||||
with patch("src.pdd_ui_event.MessageBox") as message_box:
|
||||
dialog = message_box.return_value
|
||||
dialog.exec.return_value = False
|
||||
page.removeButton.click()
|
||||
|
||||
message_box.assert_called_once()
|
||||
self.assertIs(message_box.call_args.args[2], page.window())
|
||||
dialog.cancelButton.setFocus.assert_called_once()
|
||||
self.assertEqual(self.repository.count_tasks(), 1)
|
||||
self.assertFalse(events._remove_busy)
|
||||
self.assertEqual(gateway.calls, [])
|
||||
events.shutdown()
|
||||
page.deleteLater()
|
||||
|
||||
def test_remove_terminal_task_refreshes_list_and_keeps_audit_data(self):
|
||||
self._add_task(1)
|
||||
connection = open_database(self.db_path)
|
||||
try:
|
||||
with connection:
|
||||
connection.execute(
|
||||
"UPDATE pdd_tasks SET status = 'failed'"
|
||||
" WHERE remote_task_id = 'PDD-001'"
|
||||
)
|
||||
finally:
|
||||
connection.close()
|
||||
page = PDDTaskPage()
|
||||
gateway = RecordingClaimGateway()
|
||||
events = PDDTaskPageEvent(page, self.repository, claim_gateway=gateway)
|
||||
events.load_initial_tasks()
|
||||
page.taskModel.setData(
|
||||
page.taskModel.index(0, 0), Qt.Checked, Qt.CheckStateRole
|
||||
)
|
||||
|
||||
with patch("src.pdd_ui_event.MessageBox") as message_box:
|
||||
message_box.return_value.exec.return_value = True
|
||||
page.removeButton.click()
|
||||
self.assertTrue(wait_until(self.app, lambda: not events._remove_busy))
|
||||
|
||||
self.assertEqual(page.taskModel.data_row_count(), 0)
|
||||
self.assertEqual(page.taskModel.checked_task_ids(), ())
|
||||
self.assertIsNotNone(self.repository.get_task("PDD-001"))
|
||||
self.assertIn("已从列表删除 1 条", page.statusLabel.text())
|
||||
self.assertEqual(gateway.calls, [])
|
||||
self.device_checker.assert_not_called()
|
||||
events.shutdown()
|
||||
page.deleteLater()
|
||||
|
||||
def test_remove_mixed_batch_reports_reason_and_changes_nothing(self):
|
||||
self._add_task(1)
|
||||
self._add_task(2)
|
||||
connection = open_database(self.db_path)
|
||||
try:
|
||||
with connection:
|
||||
connection.execute(
|
||||
"UPDATE pdd_tasks SET status = 'cancelled'"
|
||||
" WHERE remote_task_id = 'PDD-001'"
|
||||
)
|
||||
finally:
|
||||
connection.close()
|
||||
page = PDDTaskPage()
|
||||
events = PDDTaskPageEvent(
|
||||
page, self.repository, claim_gateway=RecordingClaimGateway()
|
||||
)
|
||||
events.load_initial_tasks()
|
||||
for row in range(2):
|
||||
page.taskModel.setData(
|
||||
page.taskModel.index(row, 0), Qt.Checked, Qt.CheckStateRole
|
||||
)
|
||||
|
||||
with patch("src.pdd_ui_event.MessageBox") as message_box:
|
||||
message_box.return_value.exec.return_value = True
|
||||
page.removeButton.click()
|
||||
self.assertTrue(wait_until(self.app, lambda: not events._remove_busy))
|
||||
|
||||
self.assertEqual(self.repository.count_tasks(), 2)
|
||||
self.assertEqual(len(page.taskModel.checked_task_ids()), 2)
|
||||
self.assertIn("尚未结束", page.statusLabel.text())
|
||||
events.shutdown()
|
||||
page.deleteLater()
|
||||
|
||||
def test_rerun_confirmation_has_clear_safe_cancel_action(self):
|
||||
self._add_task(1)
|
||||
first = self.repository.start_collect_run("PDD-001", "USB-001")
|
||||
|
||||
Reference in New Issue
Block a user