Files
2026-07-13 12:34:46 +08:00

69 lines
2.1 KiB
Python

import os
import unittest
from unittest import mock
os.environ.setdefault("QT_QPA_PLATFORM", "offscreen")
from PySide6.QtWidgets import QApplication, QMessageBox
from gui.mainwindow import MainWindow
from gui.slicing_tasks import SlicingResult
class MainWindowCompletionMessageTests(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.app = QApplication.instance() or QApplication([])
def setUp(self):
self.window = MainWindow()
def tearDown(self):
self.window.close()
def test_show_completion_message_uses_warning_when_some_tasks_fail(self):
results = [
SlicingResult(
source_path="ok.wav",
success=True,
output_paths=("ok_0.wav", "ok_1.wav"),
),
SlicingResult(
source_path="bad.wav",
success=False,
error="RuntimeError: disk full",
),
]
with (
mock.patch.object(QMessageBox, "information") as information,
mock.patch.object(QMessageBox, "warning") as warning,
mock.patch.object(QMessageBox, "critical") as critical,
):
self.window._show_completion_message(results)
information.assert_not_called()
critical.assert_not_called()
warning.assert_called_once()
self.assertIn("bad.wav", warning.call_args.args[2])
def test_start_blocks_invalid_settings_before_worker_starts(self):
self.window.ui.listWidgetTaskList.addItem("input.wav")
with (
mock.patch.object(QMessageBox, "warning") as warning,
mock.patch("gui.mainwindow.parse_slicing_settings", return_value=(None, "Invalid settings")) as parse_settings,
mock.patch("gui.mainwindow.QThread.start") as thread_start,
):
self.window._q_start()
parse_settings.assert_called_once()
thread_start.assert_not_called()
warning.assert_called_once()
self.assertFalse(self.window.processing)
self.assertEqual(self.window.workFinished, 0)
if __name__ == "__main__":
unittest.main()