Files
cmautobuy/client/test/test_pdd_ui.py
T

128 lines
4.6 KiB
Python

"""PDD 任务表勾选模型的离屏测试。"""
import os
import unittest
os.environ.setdefault("QT_QPA_PLATFORM", "offscreen")
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication
from src.pdd_ui import CHECK_COLUMN, PDDTaskPage, TaskRow, TaskTableModel
class TaskTableModelCheckTests(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.app = QApplication.instance() or QApplication([])
def test_check_uses_stable_task_id_and_survives_reorder(self):
model = TaskTableModel()
model.set_tasks(
[TaskRow("TASK-1", "采集"), TaskRow("TASK-2", "采集")]
)
self.assertTrue(
model.setData(
model.index(1, CHECK_COLUMN), Qt.Checked, Qt.CheckStateRole
)
)
model.set_tasks(
[TaskRow("TASK-2", "采集"), TaskRow("TASK-1", "采集")]
)
self.assertEqual(model.checked_task_ids(), ("TASK-2",))
self.assertEqual(
model.data(model.index(0, CHECK_COLUMN), Qt.CheckStateRole),
Qt.Checked,
)
def test_placeholder_is_not_checkable_and_removed_task_is_pruned(self):
model = TaskTableModel()
self.assertEqual(model.flags(model.index(0, CHECK_COLUMN)), Qt.NoItemFlags)
model.set_tasks([TaskRow("TASK-1", "采集")])
model.setData(
model.index(0, CHECK_COLUMN), Qt.Checked, Qt.CheckStateRole
)
model.set_tasks([])
self.assertEqual(model.checked_task_ids(), ())
def test_search_clears_checks_and_refresh_is_next_to_search(self):
page = PDDTaskPage()
page.set_tasks([TaskRow("TASK-1", "采集")])
page.taskModel.setData(
page.taskModel.index(0, CHECK_COLUMN), Qt.Checked, Qt.CheckStateRole
)
page.resize(1300, 650)
self.app.processEvents()
layout = page.commandCard.layout()
search_position = layout.getItemPosition(layout.indexOf(page.searchButton))
refresh_position = layout.getItemPosition(layout.indexOf(page.refreshButton))
rerun_position = layout.getItemPosition(layout.indexOf(page.rerunButton))
resubmit_position = layout.getItemPosition(layout.indexOf(page.resubmitButton))
remove_position = layout.getItemPosition(layout.indexOf(page.removeButton))
self.assertEqual(refresh_position[1], search_position[1] + 1)
self.assertEqual(resubmit_position[1], rerun_position[1] + 1)
self.assertEqual(remove_position[1], resubmit_position[1] + 1)
self.assertEqual(page.checkedCountLabel.text(), "已选 1 条")
self.assertTrue(page.removeButton.isEnabled())
page.resize(1000, 650)
self.app.processEvents()
compact_search = layout.getItemPosition(layout.indexOf(page.searchButton))
compact_refresh = layout.getItemPosition(layout.indexOf(page.refreshButton))
self.assertEqual(compact_search[0], 1)
self.assertEqual(compact_refresh[1], compact_search[1] + 1)
page.searchButton.click()
self.assertEqual(page.taskModel.checked_task_ids(), ())
self.assertEqual(page.checkedCountLabel.text(), "已选 0 条")
self.assertFalse(page.removeButton.isEnabled())
page.deleteLater()
def test_remove_emits_stable_checked_task_ids(self):
page = PDDTaskPage()
page.set_tasks(
[TaskRow("TASK-1", "采集"), TaskRow("TASK-2", "采集")]
)
received = []
page.removeRequested.connect(received.append)
for row in (0, 1):
page.taskModel.setData(
page.taskModel.index(row, CHECK_COLUMN),
Qt.Checked,
Qt.CheckStateRole,
)
page.removeButton.click()
self.assertEqual(received, [("TASK-1", "TASK-2")])
page.deleteLater()
def test_auto_fetch_text_and_keyword_width(self):
page = PDDTaskPage()
self.assertEqual(page.autoFetchButton.text(), "自动获取")
self.assertEqual(
page.autoFetchButton.accessibleName(), "自动获取 PDD 任务"
)
self.assertEqual(page.keywordInput.minimumWidth(), 150)
self.assertEqual(page.keywordInput.maximumWidth(), 240)
page.set_auto_fetch_state("running")
self.assertEqual(page.autoFetchButton.text(), "停止自动获取")
self.assertEqual(
page.autoFetchButton.accessibleName(), "停止自动获取 PDD 任务"
)
page.set_auto_fetch_state("stopped")
self.assertEqual(page.autoFetchButton.text(), "自动获取")
page.deleteLater()
if __name__ == "__main__":
unittest.main()