Source code for tests.interface.ui.test_inputwindow
import pytest
from PyQt6 import QtWidgets
from unittest.mock import MagicMock
from rk_comparison.interface.ui.inputwindow import InputWindow
from rk_comparison.core.controller.controller import Controller
[docs]
class TestInputWindow:
"""Tests for the InputWindow class."""
[docs]
def test_init(self, qtbot):
"""Tests the types of attributes and the buttons connection to methods."""
iw = InputWindow()
qtbot.add_widget(iw)
assert iw.controller is None
assert iw.popup is None
assert iw.popup_ui is None
assert iw.apply.clicked.connect(iw.apply_clicked)
assert iw.cancel.clicked.connect(iw.cancel_clicked)
del iw
[docs]
def test_initialize_data(self, qtbot):
"""Tests the method to initialize data in the input window."""
iw = InputWindow()
qtbot.add_widget(iw)
controller = MagicMock()
controller.id.get_t_min.return_value = 0.0
controller.id.get_dt.return_value = 1.0
controller.id.get_t_max.return_value = 10.0
controller.nd.get_tau.return_value = 5.0
controller.nd.get_nuclei.return_value = 100.0
controller.id.get_truth_table.return_value = [
True,
False,
True,
False,
True,
False,
True,
False,
True,
False,
]
iw.initialize_data(controller)
assert iw.line_t_min.text() == "0.0"
assert iw.line_delta.text() == "1.0"
assert iw.line_t_max.text() == "10.0"
assert iw.line_tau.text() == "5.0"
assert iw.line_nuclei.text() == "100.0"
assert iw.truth[0].isChecked() is True
assert iw.truth[1].isChecked() is False
assert iw.truth[2].isChecked() is True
assert iw.truth[3].isChecked() is False
del iw
[docs]
def test_apply_clicked_valid_data(self, qtbot, monkeypatch):
"""Tests the apply_clicked method with valid input data."""
iw = InputWindow()
qtbot.add_widget(iw)
controller = MagicMock()
iw.initialize_data(controller)
iw.line_t_min.setText("0.0")
iw.line_delta.setText("1.0")
iw.line_t_max.setText("10.0")
iw.line_tau.setText("5.0")
iw.line_nuclei.setText("100.0")
for i, checkbox in enumerate(iw.truth):
checkbox.setChecked(True if i % 2 == 0 else False)
iw.checks.min_max_check = MagicMock(return_value=None)
iw.checks.check_delta = MagicMock(return_value=None)
iw.checks.check_truth_table = MagicMock(return_value=None)
iw.change_type = MagicMock(return_value=True)
iw.data_placeholders = [
0.0,
1.0,
10.0,
100.0,
5.0,
[True, False, True, False, True, False, True, False, True, False],
]
iw.apply_clicked()
iw.checks.min_max_check.assert_called_once()
iw.checks.check_delta.assert_called_once()
iw.checks.check_truth_table.assert_called_once()
controller.initialize.assert_called_once_with(
0.0,
1.0,
10.0,
100.0,
5.0,
[True, False, True, False, True, False, True, False, True, False],
)
assert iw.close()
del iw
[docs]
def test_apply_clicked_invalid_data(self, qtbot, monkeypatch):
"""Tests the apply_clicked method with invalid input data."""
iw = InputWindow()
qtbot.add_widget(iw)
iw.line_t_min.setText("invalid")
iw.line_delta.setText("1.0")
iw.line_t_max.setText("10.0")
iw.line_tau.setText("5.0")
iw.line_nuclei.setText("100.0")
iw.checks.str_to_float = MagicMock(return_value="error")
iw.raise_error = MagicMock()
iw.apply_clicked()
iw.raise_error.assert_called_once()
del iw
[docs]
def test_cancel_clicked(self, qtbot):
"""Tests the method to cancel and close the input window."""
iw = InputWindow()
qtbot.add_widget(iw)
iw.cancel_clicked()
assert iw.close()
del iw
[docs]
def test_raise_error(self, qtbot, monkeypatch):
"""Tests the method to raise an error message."""
iw = InputWindow()
qtbot.add_widget(iw)
mock_error_window = MagicMock()
monkeypatch.setattr(
"rk_comparison.interface.ui.inputwindow.ErrorWindow",
lambda: mock_error_window,
)
iw.raise_error("Test error message")
mock_error_window.set_message.assert_called_once_with("Test error message")
mock_error_window.exec.assert_called_once()
del iw
if __name__ == "__main__":
pytest.main()