diff --git a/BlocksScreen/lib/panels/widgets/cancelPage.py b/BlocksScreen/lib/panels/widgets/cancelPage.py index c50bef4b..8592e578 100644 --- a/BlocksScreen/lib/panels/widgets/cancelPage.py +++ b/BlocksScreen/lib/panels/widgets/cancelPage.py @@ -42,9 +42,9 @@ def _handle_refuse(self): self.run_gcode.emit("SDCARD_RESET_FILE") _REASON_HEADERS: typing.ClassVar[dict[str, str]] = { - "complete": "Print Completed", + "complete": "Print Finished", "error": "Print Error", - "cancelled": "Print job was\ncancelled", + "cancelled": "Print Cancelled", } @QtCore.pyqtSlot(str, dict, name="on_print_stats_update") @@ -56,8 +56,12 @@ def on_print_stats_update(self, field: str, value: dict | float | str) -> None: self.filename = value if self.isVisible(): self.set_file_name(value) - elif "state" in field and value in self._REASON_HEADERS: - self.cf_info_tf.setText(self._REASON_HEADERS[value]) + elif "state" in field: + if value in self._REASON_HEADERS: + self.cf_info_tf.setText(self._REASON_HEADERS[value]) + elif value == "printing": + # New job: drop the previous job's reason so it cannot leak. + self.cf_info_tf.clear() def show(self): self.request_file_info.emit(self.filename) @@ -171,7 +175,7 @@ def _setupUI(self) -> None: self.info_layout = QtWidgets.QVBoxLayout(self.info_frame) self.cf_info_tf = QtWidgets.QLabel(parent=self.info_frame) - self.cf_info_tf.setText("Print job was\ncancelled") + self.cf_info_tf.setText(self._REASON_HEADERS["cancelled"]) font = QtGui.QFont() font.setFamily("Momcake") font.setPointSize(20) diff --git a/tests/widgets/test_cancel_page_unit.py b/tests/widgets/test_cancel_page_unit.py new file mode 100644 index 00000000..f5ab7577 --- /dev/null +++ b/tests/widgets/test_cancel_page_unit.py @@ -0,0 +1,46 @@ +"""Unit tests for CancelPage reason headers (cancelPage.py)""" + +import pytest +from PyQt6 import QtWidgets + +from BlocksScreen.lib.panels.widgets.cancelPage import CancelPage + + +@pytest.fixture +def page(qtbot): + parent = QtWidgets.QWidget() + qtbot.addWidget(parent) + yield CancelPage(parent) + + +@pytest.mark.parametrize( + ("state", "text"), + [ + ("complete", "Print Finished"), + ("error", "Print Error"), + ("cancelled", "Print Cancelled"), + ], +) +def test_finish_state_sets_reason(page, state, text): + page.on_print_stats_update("state", state) + assert page.cf_info_tf.text() == text + + +def test_printing_clears_previous_reason(page): + page.on_print_stats_update("state", "complete") + page.on_print_stats_update("state", "printing") + assert page.cf_info_tf.text() == "" + + +@pytest.mark.parametrize("state", ["paused", "standby"]) +def test_other_states_keep_reason(page, state): + page.on_print_stats_update("state", "error") + page.on_print_stats_update("state", state) + assert page.cf_info_tf.text() == "Print Error" + + +def test_filename_update_does_not_touch_reason(page): + page.on_print_stats_update("state", "cancelled") + page.on_print_stats_update("filename", "part.gcode") + assert page.filename == "part.gcode" + assert page.cf_info_tf.text() == "Print Cancelled"