|
| 1 | +import pytest |
| 2 | +from pytestqt.qtbot import QtBot |
| 3 | +from PyQt6.QtCore import Qt |
| 4 | +from PyQt6.QtWidgets import QWidget, QVBoxLayout |
| 5 | + |
| 6 | +from niaaml_gui.widgets.pipeline_controls import PipelineControlsWidget |
| 7 | +from niaaml_gui.widgets.pipeline_canvas import PipelineCanvas |
| 8 | + |
| 9 | + |
| 10 | +@pytest.fixture |
| 11 | +def controls(qtbot: QtBot): |
| 12 | + widget = PipelineControlsWidget() |
| 13 | + qtbot.addWidget(widget) |
| 14 | + return widget |
| 15 | + |
| 16 | + |
| 17 | +def test_run_button_initially_disabled(controls): |
| 18 | + assert controls.run_button.isEnabled() is False |
| 19 | + |
| 20 | + |
| 21 | +def test_enable_disable_run_button(controls): |
| 22 | + controls.setRunEnabled(True) |
| 23 | + assert controls.run_button.isEnabled() is True |
| 24 | + |
| 25 | + controls.setRunEnabled(False) |
| 26 | + assert controls.run_button.isEnabled() is False |
| 27 | + |
| 28 | + |
| 29 | +def test_run_button_emits_signal(controls, qtbot): |
| 30 | + with qtbot.waitSignal(controls.runClicked, timeout=1000): |
| 31 | + controls.setRunEnabled(True) |
| 32 | + qtbot.mouseClick(controls.run_button, Qt.MouseButton.LeftButton) |
| 33 | + |
| 34 | + |
| 35 | + |
| 36 | +@pytest.fixture |
| 37 | +def full_widget(qtbot: QtBot): |
| 38 | + canvas = PipelineCanvas() |
| 39 | + controls = PipelineControlsWidget() |
| 40 | + |
| 41 | + container = QWidget() |
| 42 | + layout = QVBoxLayout() |
| 43 | + layout.addWidget(canvas) |
| 44 | + layout.addWidget(controls) |
| 45 | + container.setLayout(layout) |
| 46 | + |
| 47 | + qtbot.addWidget(container) |
| 48 | + |
| 49 | + def update_run_button_state(): |
| 50 | + ready = canvas.is_pipeline_ready() |
| 51 | + controls.run_button.setEnabled(ready) |
| 52 | + |
| 53 | + |
| 54 | + container.canvas = canvas |
| 55 | + container.controls = controls |
| 56 | + container.update_fn = update_run_button_state |
| 57 | + |
| 58 | + canvas.pipelineStateChanged.connect(update_run_button_state) |
| 59 | + |
| 60 | + return container |
| 61 | + |
| 62 | + |
| 63 | +def test_update_run_button_state_false_when_incomplete(full_widget): |
| 64 | + canvas = full_widget.canvas |
| 65 | + controls = full_widget.controls |
| 66 | + update_fn = full_widget.update_fn |
| 67 | + |
| 68 | + canvas.add_config_block("Select CSV File") |
| 69 | + update_fn() |
| 70 | + |
| 71 | + assert controls.run_button.isEnabled() is False |
| 72 | + |
| 73 | + |
| 74 | +def test_update_run_button_state_true_when_ready(full_widget): |
| 75 | + canvas = full_widget.canvas |
| 76 | + controls = full_widget.controls |
| 77 | + update_fn = full_widget.update_fn |
| 78 | + |
| 79 | + canvas.add_config_block("Select CSV File") |
| 80 | + block = list(canvas.block_data.items())[0][1] |
| 81 | + block["path"] = "tests/tests_files/dataset_no_header_no_classes.csv" |
| 82 | + |
| 83 | + update_fn() |
| 84 | + |
| 85 | + assert controls.run_button.isEnabled() is True |
0 commit comments