From 850f02338e4dc7fe587bad0faa85a69faa0a9abb Mon Sep 17 00:00:00 2001 From: wyzula-jan <133381102+wyzula-jan@users.noreply.github.com> Date: Tue, 31 Oct 2023 15:55:52 +0100 Subject: [PATCH] test: test_yaml_dialog.py tests for loading/saving dialog for .yaml export --- tests/test_yaml_dialog.py | 70 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 tests/test_yaml_dialog.py diff --git a/tests/test_yaml_dialog.py b/tests/test_yaml_dialog.py new file mode 100644 index 00000000..5f63c0e1 --- /dev/null +++ b/tests/test_yaml_dialog.py @@ -0,0 +1,70 @@ +import os +import tempfile +from unittest.mock import patch +import pytest +import yaml +from PyQt5.QtWidgets import QWidget, QVBoxLayout, QPushButton + +from bec_widgets.qt_utils.yaml_dialog import load_yaml, save_yaml + + +@pytest.fixture(scope="function") +def example_widget(qtbot): + main_widget = QWidget() + layout = QVBoxLayout(main_widget) + main_widget.import_button = QPushButton("Import", main_widget) + main_widget.export_button = QPushButton("Export", main_widget) + layout.addWidget(main_widget.import_button) + layout.addWidget(main_widget.export_button) + + main_widget.config = {} # Dictionary to store the loaded configuration + main_widget.saved_config = None # To store the saved configuration + + qtbot.addWidget(main_widget) + qtbot.waitExposed(main_widget) + yield main_widget + + +def test_load_yaml(qtbot, example_widget): + # Create a temporary file with YAML content + with tempfile.NamedTemporaryFile(delete=False, suffix=".yaml") as temp_file: + temp_file.write(b"name: test\nvalue: 42") + + def load_yaml_wrapper(): + config = load_yaml(example_widget) + if config: + example_widget.config.update(config) + + example_widget.import_button.clicked.connect(load_yaml_wrapper) + + # Mock user selecting the file in the dialog + with patch("PyQt5.QtWidgets.QFileDialog.getOpenFileName", return_value=(temp_file.name, "")): + example_widget.import_button.click() + + assert example_widget.config == {"name": "test", "value": 42} + os.remove(temp_file.name) # Clean up + + +def test_save_yaml(qtbot, example_widget): + # Create a temporary file + with tempfile.NamedTemporaryFile(delete=False, suffix=".yaml") as temp_file: + temp_file_path = temp_file.name + + # Prepare data to be saved + example_widget.saved_config = {"name": "test", "value": 42} + + def save_yaml_wrapper(): + save_yaml(example_widget, example_widget.saved_config) + + example_widget.export_button.clicked.connect(save_yaml_wrapper) + + # Mock user selecting the file in the dialog + with patch("PyQt5.QtWidgets.QFileDialog.getSaveFileName", return_value=(temp_file_path, "")): + example_widget.export_button.click() + + # Check if the data was saved correctly + with open(temp_file_path, "r") as file: + saved_config = yaml.safe_load(file) + assert saved_config == {"name": "test", "value": 42} + + os.remove(temp_file_path) # Clean up