"""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()