from unittest.mock import MagicMock, patch import pytest from src.DFFileExportAndUploadManager import DFFileExportAndUploadManager @pytest.fixture def upload_manager(): file_handler = MagicMock(name = "file_handler") file_handler.getSupportedFileTypesWrite = MagicMock(return_value = [{ "id": "test", "extension": ".3mf", "description": "nope", "mime_type": "application/vnd.ms-package.3dmanufacturing-3dmodel+xml", "mode": "binary", "hide_in_file_dialog": True, }]) node = MagicMock(name = "SceneNode") application = MagicMock(name = "CuraApplication") with patch("cura.CuraApplication.CuraApplication.getInstance", MagicMock(return_value = application)): return DFFileExportAndUploadManager(file_handlers = {"3mf": file_handler}, nodes = [node], library_project_id = "test_library_project_id", library_project_name = "test_library_project_name", file_name = "file_name", formats = ["3mf"], on_upload_error = MagicMock(), on_upload_success = MagicMock(), on_upload_finished = MagicMock(), on_upload_progress = MagicMock()) @pytest.mark.parametrize("input,expected_result", [("", ""), ("invalid json! {}", ""), ("{\"errors\": [{}]}", ""), ("{\"errors\": [{\"title\": \"some title\"}]}", "some title")]) def test_extractErrorTitle(upload_manager, input, expected_result): assert upload_manager.extractErrorTitle(input) == expected_result def test_exportJobError(upload_manager): mocked_application = MagicMock() with patch("UM.Application.Application.getInstance", MagicMock(return_value = mocked_application)): upload_manager._onJobExportError("file_name.3mf") # Ensure that message was displayed mocked_application.showMessageSignal.emit.assert_called_once()