From cf8113608f94cf76e2a5200450d82c2270c55f74 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 26 Apr 2021 11:38:59 +0200 Subject: [PATCH] Add simple test for extracting error title CURA-7959 --- .../src/DFFileExportAndUploadManager.py | 7 +++- .../tests/TestDFFileExportAndUploadManager.py | 32 +++++++++++++++++++ .../tests/TestDigitalLibraryApiClient.py | 1 + 3 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 plugins/DigitalLibrary/tests/TestDFFileExportAndUploadManager.py diff --git a/plugins/DigitalLibrary/src/DFFileExportAndUploadManager.py b/plugins/DigitalLibrary/src/DFFileExportAndUploadManager.py index 93e24a0651..87d0e8bce2 100644 --- a/plugins/DigitalLibrary/src/DFFileExportAndUploadManager.py +++ b/plugins/DigitalLibrary/src/DFFileExportAndUploadManager.py @@ -2,6 +2,7 @@ # Cura is released under the terms of the LGPLv3 or higher. import json import threading +from json import JSONDecodeError from typing import List, Dict, Any, Callable, Union, Optional from PyQt5.QtCore import QUrl @@ -271,7 +272,11 @@ class DFFileExportAndUploadManager: def extractErrorTitle(reply_body: Optional[str]) -> str: error_title = "" if reply_body: - reply_dict = json.loads(reply_body) + try: + reply_dict = json.loads(reply_body) + except JSONDecodeError: + Logger.logException("w", "Unable to extract title from reply body") + return error_title if "errors" in reply_dict and len(reply_dict["errors"]) >= 1 and "title" in reply_dict["errors"][0]: error_title = reply_dict["errors"][0]["title"] return error_title diff --git a/plugins/DigitalLibrary/tests/TestDFFileExportAndUploadManager.py b/plugins/DigitalLibrary/tests/TestDFFileExportAndUploadManager.py new file mode 100644 index 0000000000..e2227100b4 --- /dev/null +++ b/plugins/DigitalLibrary/tests/TestDFFileExportAndUploadManager.py @@ -0,0 +1,32 @@ +from unittest.mock import MagicMock, patch + +import pytest +from src.DFFileExportAndUploadManager import DFFileExportAndUploadManager + + +@pytest.fixture +def upload_manager(): + file_handler = MagicMock(name = "file_handler") + node = MagicMock(name = "SceneNode") + application = MagicMock(name = "CuraApplication") + with patch("cura.CuraApplication.CuraApplication.getInstance", MagicMock(return_value=application)): + return DFFileExportAndUploadManager(file_handlers = {"test": 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 + diff --git a/plugins/DigitalLibrary/tests/TestDigitalLibraryApiClient.py b/plugins/DigitalLibrary/tests/TestDigitalLibraryApiClient.py index 911bd040f8..0cb19c8365 100644 --- a/plugins/DigitalLibrary/tests/TestDigitalLibraryApiClient.py +++ b/plugins/DigitalLibrary/tests/TestDigitalLibraryApiClient.py @@ -18,6 +18,7 @@ def pagination_manager(): manager = MagicMock(name = "Mocked Pagination Manager") return manager + @pytest.fixture def api_client(application, pagination_manager): api_client = DigitalFactoryApiClient(application, MagicMock())