T-571 降低更新前台抢焦点

This commit is contained in:
chengma
2026-07-09 15:04:20 +08:00
parent d595e7455c
commit 5400145147
7 changed files with 403 additions and 11 deletions
+102
View File
@@ -1002,6 +1002,9 @@ class EditorLoginTests(unittest.TestCase):
self.assertTrue(result["blob_seen"])
self.assertEqual(1, result["upload_state"]["busy_count"])
self.assertIn("blob:", "\n".join(result["upload_state"]["srcs"]))
self.assertIn("before_srcs", result)
self.assertTrue(result["before_srcs"])
self.assertFalse(any(str(src).startswith("blob:") for src in result["before_srcs"]))
def test_replace_cover_reports_page_upload_error_with_state(self):
cdp = FakeCoverCDP(count=8, upload_mode="error")
@@ -1054,6 +1057,105 @@ class EditorLoginTests(unittest.TestCase):
self.assertIn("新封面上传仍在处理中", result["error"])
click_update.assert_not_called()
def test_apply_task_background_drag_failure_recovers_foreground_without_replacing_again(self):
cdp = FakeCoverCDP(count=8)
cdp.confirm_clicked = True
cdp.uploaded = True
cdp.closed = False
cdp.close = lambda: setattr(cdp, "closed", True)
events = []
with mock.patch("app.editor.open_product", return_value=cdp), mock.patch(
"app.editor.replace_cover",
return_value={
"ok": False,
"reason": "DRAG_NOT_FIRST",
"new_src": cdp.new_rect["src"],
},
) as replace_cover, mock.patch(
"app.editor.click_update",
return_value={"clicked": True, "reason": None},
):
result = editor.apply_task(
{"debug_port": 9222},
{"item_id": "51100639510", "new_cover_path": "new.jpg"},
bring_to_front=False,
on_step=events.append,
)
self.assertTrue(result["committed"])
replace_cover.assert_called_once()
self.assertIn(("Page.bringToFront", {}), cdp.sent)
self.assertTrue(cdp.dragged)
self.assertEqual(1, len(cdp.drag_calls))
self.assertTrue(result["cover"]["foreground_recovery"]["ok"])
self.assertTrue(any(event.get("step") == "cover_retry_foreground" for event in events))
def test_apply_task_background_upload_processing_recovers_by_waiting_current_upload(self):
cdp = FakeCoverCDP(count=8)
cdp.confirm_clicked = True
cdp.uploaded = True
cdp.closed = False
cdp.close = lambda: setattr(cdp, "closed", True)
before_srcs = [rect["src"] for rect in cdp.after_delete]
with mock.patch("app.editor.open_product", return_value=cdp), mock.patch(
"app.editor.replace_cover",
return_value={
"ok": False,
"reason": "UPLOAD_STILL_PROCESSING",
"before_srcs": before_srcs,
"upload_state": {"busy_count": 1},
"blob_seen": True,
},
) as replace_cover, mock.patch(
"app.editor.click_update",
return_value={"clicked": True, "reason": None},
), mock.patch("app.editor.time.sleep"):
result = editor.apply_task(
{"debug_port": 9222},
{"item_id": "51100639510", "new_cover_path": "new.jpg"},
bring_to_front=False,
)
self.assertTrue(result["committed"])
replace_cover.assert_called_once()
self.assertIn(("Page.bringToFront", {}), cdp.sent)
self.assertTrue(cdp.dragged)
self.assertTrue(result["cover"]["foreground_recovery"]["ok"])
self.assertEqual("UPLOAD_STILL_PROCESSING", result["cover"]["original_reason"])
def test_apply_task_background_upload_recovery_requires_before_srcs(self):
cdp = FakeCoverCDP(count=8)
cdp.confirm_clicked = True
cdp.uploaded = True
cdp.closed = False
cdp.close = lambda: setattr(cdp, "closed", True)
with mock.patch("app.editor.open_product", return_value=cdp), mock.patch(
"app.editor.replace_cover",
return_value={
"ok": False,
"reason": "UPLOAD_TIMEOUT",
"upload_state": {"busy_count": 0},
},
) as replace_cover, mock.patch("app.editor.click_update") as click_update:
result = editor.apply_task(
{"debug_port": 9222},
{"item_id": "51100639510", "new_cover_path": "new.jpg"},
bring_to_front=False,
)
self.assertFalse(result["committed"])
replace_cover.assert_called_once()
self.assertIn(("Page.bringToFront", {}), cdp.sent)
self.assertFalse(cdp.dragged)
self.assertEqual(
"MISSING_BEFORE_SRCS",
result["cover"]["foreground_recovery"]["reason"],
)
click_update.assert_not_called()
def test_replace_cover_full_slots_reports_missing_delete_button(self):
cdp = FakeCoverCDP(count=9, delete_click=False)