Source code for tests.interface.ui.test_plottingwindow

import unittest
from unittest.mock import MagicMock, patch, mock_open
from pytestqt import qtbot
from PyQt6 import QtWidgets
from rk_comparison.interface.ui.plottingwindow import PlottingWindow
from rk_comparison.core.controller.controller import Controller
from rk_comparison.core.plotting_module.plot_data import PlotData
from rk_comparison.interface.ui.errorwindow import ErrorWindow
from rk_comparison.core.saving_module.save_data import SaveData


[docs] class TestPlottingWindow: """Tests for the PlottingWindow class."""
[docs] def test_init(self, qtbot): """Tests the types of attributes and the buttons connection to methods.""" pw = PlottingWindow() qtbot.add_widget(pw) controller = Controller() assert pw.controller is None assert isinstance(pw.pl, PlotData) assert isinstance(pw.er, ErrorWindow) assert isinstance(pw.sv, SaveData) assert pw.plot_result.clicked.connect(pw.plot_results_clicked) assert pw.plot_comparison.clicked.connect(pw.plot_comparison_clicked) assert pw.cancel_button.clicked.connect(pw.cancel_clicked) assert pw.plot_min.clicked.connect(pw.min_clicked) assert pw.plot_max.clicked.connect(pw.max_clicked) assert pw.plot_mean.clicked.connect(pw.mean_clicked) assert pw.save_button.clicked.connect(pw.save_clicked) del pw, controller
[docs] def test_initialize_controller(self, qtbot): """Tests the initialize_controller method.""" pw = PlottingWindow() qtbot.add_widget(pw) controller = Controller() pw.initialize_controller(controller) assert pw.controller == controller del pw, controller
[docs] def test_plot_results_clicked(self, qtbot): """Tests the plot_results_clicked method.""" pw = PlottingWindow() qtbot.add_widget(pw) controller = Controller() pw.initialize_controller(controller) pw.pl.plot = MagicMock() pw.plot_result.click() pw.pl.plot.assert_called_once_with( True, pw.controller, pw.controller.results_rk, "Nuclear Decay [nuclei]", "Nuclear Decay", ) del pw, controller
[docs] def test_plot_comparison_clicked(self, qtbot): """Tests the plot_comparison_clicked method.""" pw = PlottingWindow() qtbot.add_widget(pw) controller = Controller() pw.initialize_controller(controller) pw.pl.plot = MagicMock() pw.plot_comparison.click() pw.pl.plot.assert_called_once_with( False, pw.controller, pw.controller.compare_rk, "Analytical - RK [nuclei]", "RK Comparison", ) del pw, controller
[docs] def test_min_clicked(self, qtbot): """Tests the min_clicked method.""" pw = PlottingWindow() qtbot.add_widget(pw) controller = Controller() pw.initialize_controller(controller) pw.pl.prepare_plot_bar_min = MagicMock() pw.plot_min.click() pw.pl.prepare_plot_bar_min.assert_called_once_with( pw.controller, "Numerical Methods", "Min(Analytical - RK) [nuclei]", "Minimal value of comparison", ) del pw, controller
[docs] def test_max_clicked(self, qtbot): """Tests the max_clicked method.""" pw = PlottingWindow() qtbot.add_widget(pw) controller = Controller() pw.initialize_controller(controller) pw.pl.prepare_plot_bar_max = MagicMock() pw.plot_max.click() pw.pl.prepare_plot_bar_max.assert_called_once_with( pw.controller, "Numerical Methods", "Max(Analytical - RK) [nuclei]", "Maximal value of comparison", ) del pw, controller
[docs] def test_mean_clicked(self, qtbot): """Tests the mean_clicked method.""" pw = PlottingWindow() qtbot.add_widget(pw) controller = Controller() pw.initialize_controller(controller) pw.pl.prepare_plot_bar_mean = MagicMock() pw.plot_mean.click() pw.pl.prepare_plot_bar_mean.assert_called_once_with( pw.controller, "Numerical Methods", "Mean(Analytical - RK) [nuclei]", "Mean value of comparison", ) del pw, controller
[docs] def test_save_clicked(self, qtbot, monkeypatch): """Tests the save_clicked method.""" pw = PlottingWindow() qtbot.add_widget(pw) controller = Controller() pw.initialize_controller(controller) file_dialog = QtWidgets.QFileDialog() file_dialog.setNameFilter = MagicMock() file_dialog.exec = MagicMock(return_value=True) file_dialog.selectedFiles = MagicMock(return_value=["test.csv"]) monkeypatch.setattr(QtWidgets, "QFileDialog", lambda: file_dialog) pw.sv.save = MagicMock() m_open = mock_open() with patch("builtins.open", m_open): pw.save_button.click() pw.sv.save.assert_called_once() m_open.assert_called_once_with("test.csv", mode="w", newline='') del pw, controller
[docs] def test_cancel_clicked(self, qtbot): """Tests the cancel_clicked method.""" pw = PlottingWindow() qtbot.add_widget(pw) pw.cancel_button.click() assert pw.close() del pw
if __name__ == "__main__": unittest.main()