feat(gui): improve status scope dialogs

This commit is contained in:
chengma
2026-07-18 17:23:22 +08:00
parent 89f1b085dc
commit 7538009f94
8 changed files with 218 additions and 62 deletions
+61 -4
View File
@@ -30,6 +30,7 @@ if gui.QT_IMPORT_ERROR is not None:
from PySide6.QtCore import QItemSelectionModel, QModelIndex, QRect, QSize, QTimer, Qt
from PySide6.QtGui import QImage, QKeyEvent, QTextCursor
from PySide6.QtTest import QTest
from PySide6.QtWidgets import (
QAbstractItemView,
QApplication,
@@ -6126,7 +6127,7 @@ class GuiTests(TempDirMixin, unittest.TestCase):
self.assert_removed(temp_dir)
def test_generate_scope_dialog_uses_safe_default_and_red_all_status_choice(self):
def test_generate_scope_dialog_uses_safe_default_and_warning_all_status_choice(self):
with self.make_temp_dir() as temp_dir:
tab = GenerateTab(config=self.make_config(temp_dir))
self.addCleanup(tab.close)
@@ -6149,8 +6150,19 @@ class GuiTests(TempDirMixin, unittest.TestCase):
captured["all_style"] = all_button.styleSheet()
captured["all_enabled"] = all_button.isEnabled()
captured["detail"] = box.informativeText()
captured["minimum_width"] = box.minimumWidth()
captured["normal_button_width"] = normal_button.width()
captured["all_button_width"] = all_button.width()
captured["normal_text_width"] = normal_button.fontMetrics().horizontalAdvance(
normal_button.text()
)
captured["all_text_width"] = all_button.fontMetrics().horizontalAdvance(
all_button.text()
)
self.assertIsNotNone(normal_button)
self.assertIsNotNone(all_button)
self.assertEqual("只生成状态正常的商品", normal_button.text())
self.assertEqual("生成所有状态的商品", all_button.text())
all_button.click()
QTimer.singleShot(0, click_all_statuses)
@@ -6159,7 +6171,13 @@ class GuiTests(TempDirMixin, unittest.TestCase):
self.assertEqual("all", scope)
self.assertEqual("generateNormalOnlyButton", captured["default"])
self.assertTrue(captured["all_enabled"])
self.assertIn("#cf222e", captured["all_style"])
self.assertGreaterEqual(captured["minimum_width"], 520)
self.assertGreaterEqual(captured["normal_button_width"], 480)
self.assertGreaterEqual(captured["all_button_width"], 480)
self.assertGreater(captured["normal_button_width"], captured["normal_text_width"])
self.assertGreater(captured["all_button_width"], captured["all_text_width"])
self.assertIn("#bc4c00", captured["all_style"])
self.assertNotIn("#cf222e", captured["all_style"])
self.assertIn("状态未知1", captured["detail"])
self.assert_removed(temp_dir)
@@ -8353,7 +8371,7 @@ class GuiTests(TempDirMixin, unittest.TestCase):
self.assert_removed(temp_dir)
def test_collect_scope_dialog_uses_safe_default_and_red_all_status_choice(self):
def test_collect_scope_dialog_uses_safe_default_and_warning_all_status_choice(self):
with self.make_temp_dir() as temp_dir:
tab = CollectTab(config=self.make_config(temp_dir))
self.addCleanup(tab.close)
@@ -8365,8 +8383,19 @@ class GuiTests(TempDirMixin, unittest.TestCase):
all_button = box.findChild(QPushButton, "collectAllStatusesButton")
captured["default"] = box.defaultButton().objectName()
captured["all_style"] = all_button.styleSheet()
captured["minimum_width"] = box.minimumWidth()
captured["normal_button_width"] = normal_button.width()
captured["all_button_width"] = all_button.width()
captured["normal_text_width"] = normal_button.fontMetrics().horizontalAdvance(
normal_button.text()
)
captured["all_text_width"] = all_button.fontMetrics().horizontalAdvance(
all_button.text()
)
self.assertIsNotNone(normal_button)
self.assertIsNotNone(all_button)
self.assertEqual("只采集状态正常的商品", normal_button.text())
self.assertEqual("采集所有状态的商品", all_button.text())
all_button.click()
QTimer.singleShot(0, click_all_statuses)
@@ -8374,7 +8403,35 @@ class GuiTests(TempDirMixin, unittest.TestCase):
self.assertEqual("all", scope)
self.assertEqual("collectNormalOnlyButton", captured["default"])
self.assertIn("#cf222e", captured["all_style"])
self.assertGreaterEqual(captured["minimum_width"], 520)
self.assertGreaterEqual(captured["normal_button_width"], 480)
self.assertGreaterEqual(captured["all_button_width"], 480)
self.assertGreater(captured["normal_button_width"], captured["normal_text_width"])
self.assertGreater(captured["all_button_width"], captured["all_text_width"])
self.assertIn("#bc4c00", captured["all_style"])
self.assertNotIn("#cf222e", captured["all_style"])
self.assert_removed(temp_dir)
def test_collect_scope_dialog_accepts_default_and_escape_cancels(self):
with self.make_temp_dir() as temp_dir:
tab = CollectTab(config=self.make_config(temp_dir))
self.addCleanup(tab.close)
def press_return():
box = QApplication.activeModalWidget()
button = box.findChild(QPushButton, "collectNormalOnlyButton")
QTest.keyClick(button, Qt.Key_Return)
QTimer.singleShot(0, press_return)
self.assertEqual("normal_only", tab._choose_collect_scope())
def press_escape():
box = QApplication.activeModalWidget()
QTest.keyClick(box, Qt.Key_Escape)
QTimer.singleShot(0, press_escape)
self.assertIsNone(tab._choose_collect_scope())
self.assert_removed(temp_dir)