From 32ec72a28c98dba9740673f5143dae8c531df308 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 26 Apr 2021 10:55:32 +0200 Subject: [PATCH 1/8] Add first stubs for DF CURA-7959 --- .../tests/TestDigitalLibraryApiClient.py | 86 +++++++++++++++++++ plugins/DigitalLibrary/tests/conftest.py | 10 +++ 2 files changed, 96 insertions(+) create mode 100644 plugins/DigitalLibrary/tests/TestDigitalLibraryApiClient.py create mode 100644 plugins/DigitalLibrary/tests/conftest.py diff --git a/plugins/DigitalLibrary/tests/TestDigitalLibraryApiClient.py b/plugins/DigitalLibrary/tests/TestDigitalLibraryApiClient.py new file mode 100644 index 0000000000..911bd040f8 --- /dev/null +++ b/plugins/DigitalLibrary/tests/TestDigitalLibraryApiClient.py @@ -0,0 +1,86 @@ +from unittest.mock import MagicMock + +import pytest + +from cura.CuraApplication import CuraApplication +from src.DigitalFactoryApiClient import DigitalFactoryApiClient +from src.PaginationManager import PaginationManager + + +@pytest.fixture +def application(): + app = MagicMock(spec=CuraApplication, name = "Mocked Cura Application") + return app + + +@pytest.fixture +def pagination_manager(): + manager = MagicMock(name = "Mocked Pagination Manager") + return manager + +@pytest.fixture +def api_client(application, pagination_manager): + api_client = DigitalFactoryApiClient(application, MagicMock()) + api_client._projects_pagination_mgr = pagination_manager + return api_client + + +def test_getProjectsFirstPage(api_client): + # setup + http_manager = MagicMock() + api_client._http = http_manager + pagination_manager = api_client._projects_pagination_mgr + pagination_manager.limit = 20 + + finished_callback = MagicMock() + failed_callback = MagicMock() + + # Call + api_client.getProjectsFirstPage(on_finished = finished_callback, failed = failed_callback) + + # Asserts + pagination_manager.reset.assert_called_once() # Should be called since we asked for new set of projects + http_manager.get.assert_called_once() + args = http_manager.get.call_args_list[0] + + # Ensure that it's called with the right limit + assert args[0][0] == 'https://api.ultimaker.com/cura/v1/projects?limit=20' + + # Change the limit & try again + http_manager.get.reset_mock() + pagination_manager.limit = 80 + api_client.getProjectsFirstPage(on_finished=finished_callback, failed=failed_callback) + args = http_manager.get.call_args_list[0] + + # Ensure that it's called with the right limit + assert args[0][0] == 'https://api.ultimaker.com/cura/v1/projects?limit=80' + + +def test_getMoreProjects_noNewProjects(api_client): + api_client.hasMoreProjectsToLoad = MagicMock(return_value = False) + http_manager = MagicMock() + api_client._http = http_manager + + finished_callback = MagicMock() + failed_callback = MagicMock() + api_client.getMoreProjects(finished_callback, failed_callback) + + http_manager.get.assert_not_called() + + +def test_getMoreProjects_hasNewProjects(api_client): + api_client.hasMoreProjectsToLoad = MagicMock(return_value=True) + http_manager = MagicMock() + api_client._http = http_manager + + finished_callback = MagicMock() + failed_callback = MagicMock() + api_client.getMoreProjects(finished_callback, failed_callback) + + http_manager.get.assert_called_once() + + +def test_clear(api_client): + api_client.clear() + api_client._projects_pagination_mgr.reset.assert_called_once() + diff --git a/plugins/DigitalLibrary/tests/conftest.py b/plugins/DigitalLibrary/tests/conftest.py new file mode 100644 index 0000000000..1d36e14108 --- /dev/null +++ b/plugins/DigitalLibrary/tests/conftest.py @@ -0,0 +1,10 @@ +# Prevents error: "PyCapsule_GetPointer called with incorrect name" with conflicting SIP configurations between Arcus and PyQt: Import custom Sip bindings first! +import Savitar # Dont remove this line +import Arcus # No really. Don't. It needs to be there! +import pynest2d # Really! + + +# Ensure that the importing for all tests work +import sys +import os +sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..")) From cf8113608f94cf76e2a5200450d82c2270c55f74 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 26 Apr 2021 11:38:59 +0200 Subject: [PATCH 2/8] 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()) From 7979483e4877aa83d2ca3bf2a588de1a3d3b8ded Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 26 Apr 2021 13:35:35 +0200 Subject: [PATCH 3/8] Seperate the init of jobs and starting This makes it a lot easier to test them CURA-7959 --- .../src/DFFileExportAndUploadManager.py | 13 ++++++++++--- .../src/DigitalFactoryController.py | 1 + .../tests/TestDFFileExportAndUploadManager.py | 18 +++++++++++++++++- 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/plugins/DigitalLibrary/src/DFFileExportAndUploadManager.py b/plugins/DigitalLibrary/src/DFFileExportAndUploadManager.py index 87d0e8bce2..69163f9cdf 100644 --- a/plugins/DigitalLibrary/src/DFFileExportAndUploadManager.py +++ b/plugins/DigitalLibrary/src/DFFileExportAndUploadManager.py @@ -44,7 +44,7 @@ class DFFileExportAndUploadManager: self._library_project_id = library_project_id # type: str self._library_project_name = library_project_name # type: str self._file_name = file_name # type: str - + self._upload_jobs = [] # type: List[ExportFileJob] self._formats = formats # type: List[str] self._api = DigitalFactoryApiClient(application = CuraApplication.getInstance(), on_error = lambda error: Logger.log("e", str(error))) @@ -81,6 +81,8 @@ class DFFileExportAndUploadManager: ) self._generic_success_message.actionTriggered.connect(self._onMessageActionTriggered) + + def _onCuraProjectFileExported(self, job: ExportFileJob) -> None: """Handler for when the DF Library workspace file (3MF) has been created locally. @@ -318,8 +320,13 @@ class DFFileExportAndUploadManager: QDesktopServices.openUrl(QUrl(project_url)) message.hide() + def start(self) -> None: + for job in self._upload_jobs: + job.start() + def initializeFileUploadJobMetadata(self) -> Dict[str, Any]: metadata = {} + self._upload_jobs = [] if "3mf" in self._formats and "3mf" in self._file_handlers and self._file_handlers["3mf"]: filename_3mf = self._file_name + ".3mf" metadata[filename_3mf] = { @@ -340,7 +347,7 @@ class DFFileExportAndUploadManager: } job_3mf = ExportFileJob(self._file_handlers["3mf"], self._nodes, self._file_name, "3mf") job_3mf.finished.connect(self._onCuraProjectFileExported) - job_3mf.start() + self._upload_jobs.append(job_3mf) if "ufp" in self._formats and "ufp" in self._file_handlers and self._file_handlers["ufp"]: filename_ufp = self._file_name + ".ufp" @@ -362,5 +369,5 @@ class DFFileExportAndUploadManager: } job_ufp = ExportFileJob(self._file_handlers["ufp"], self._nodes, self._file_name, "ufp") job_ufp.finished.connect(self._onPrintFileExported) - job_ufp.start() + self._upload_jobs.append(job_ufp) return metadata diff --git a/plugins/DigitalLibrary/src/DigitalFactoryController.py b/plugins/DigitalLibrary/src/DigitalFactoryController.py index 33fcc506e7..8f65faa2a3 100644 --- a/plugins/DigitalLibrary/src/DigitalFactoryController.py +++ b/plugins/DigitalLibrary/src/DigitalFactoryController.py @@ -541,6 +541,7 @@ class DigitalFactoryController(QObject): on_upload_success = self.uploadFileSuccess.emit, on_upload_finished = self.uploadFileFinished.emit, on_upload_progress = self.uploadFileProgress.emit) + self.file_upload_manager.start() # Save the project id to make sure it will be preselected the next time the user opens the save dialog self._current_workspace_information.setEntryToStore("digital_factory", "library_project_id", library_project_id) diff --git a/plugins/DigitalLibrary/tests/TestDFFileExportAndUploadManager.py b/plugins/DigitalLibrary/tests/TestDFFileExportAndUploadManager.py index e2227100b4..4c4ef95134 100644 --- a/plugins/DigitalLibrary/tests/TestDFFileExportAndUploadManager.py +++ b/plugins/DigitalLibrary/tests/TestDFFileExportAndUploadManager.py @@ -7,10 +7,18 @@ 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 = {"test": file_handler}, + return DFFileExportAndUploadManager(file_handlers = {"3mf": file_handler}, nodes = [node], library_project_id = "test_library_project_id", library_project_name = "test_library_project_name", @@ -30,3 +38,11 @@ def upload_manager(): 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() \ No newline at end of file From 29f62b057917edd83d53a6f1cde1ac637652896a Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 26 Apr 2021 14:08:10 +0200 Subject: [PATCH 4/8] Add some tests for DFProjectModel CURA-7959 --- .../src/DigitalFactoryProjectModel.py | 2 +- .../tests/TestDigitalFactoryProjectModel.py | 60 +++++++++++++++++++ 2 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 plugins/DigitalLibrary/tests/TestDigitalFactoryProjectModel.py diff --git a/plugins/DigitalLibrary/src/DigitalFactoryProjectModel.py b/plugins/DigitalLibrary/src/DigitalFactoryProjectModel.py index 30c04c7177..d76774cab1 100644 --- a/plugins/DigitalLibrary/src/DigitalFactoryProjectModel.py +++ b/plugins/DigitalLibrary/src/DigitalFactoryProjectModel.py @@ -21,7 +21,7 @@ class DigitalFactoryProjectModel(ListModel): dfProjectModelChanged = pyqtSignal() - def __init__(self, parent = None): + def __init__(self, parent = None) -> None: super().__init__(parent) self.addRoleName(self.DisplayNameRole, "displayName") self.addRoleName(self.LibraryProjectIdRole, "libraryProjectId") diff --git a/plugins/DigitalLibrary/tests/TestDigitalFactoryProjectModel.py b/plugins/DigitalLibrary/tests/TestDigitalFactoryProjectModel.py new file mode 100644 index 0000000000..c07eb5e8ba --- /dev/null +++ b/plugins/DigitalLibrary/tests/TestDigitalFactoryProjectModel.py @@ -0,0 +1,60 @@ + +from src.DigitalFactoryProjectModel import DigitalFactoryProjectModel +from src.DigitalFactoryProjectResponse import DigitalFactoryProjectResponse + + +project_1 = DigitalFactoryProjectResponse(library_project_id = "omg", + display_name = "zomg", + username = "nope", + organization_shared = True) + +project_2 = DigitalFactoryProjectResponse(library_project_id = "omg2", + display_name = "zomg2", + username = "nope", + organization_shared = False) + +project_3 = DigitalFactoryProjectResponse(library_project_id = "_omg3", + display_name = "zomg3", + username = "nope", + organization_shared = False) + + +def test_setProjects(): + model = DigitalFactoryProjectModel() + + assert model.count == 0 + + model.setProjects([project_1, project_2]) + assert model.count == 2 + + assert model.getItem(0)["displayName"] == "zomg" + assert model.getItem(1)["displayName"] == "zomg2" + + +def test_clearProjects(): + model = DigitalFactoryProjectModel() + model.setProjects([project_1, project_2]) + model.clearProjects() + assert model.count == 0 + + +def test_setProjectMultipleTimes(): + model = DigitalFactoryProjectModel() + model.setProjects([project_1, project_2]) + model.setProjects([project_2]) + assert model.count == 1 + assert model.getItem(0)["displayName"] == "zomg2" + + +def test_extendProjects(): + model = DigitalFactoryProjectModel() + + assert model.count == 0 + + model.setProjects([project_1]) + assert model.count == 1 + + model.extendProjects([project_2]) + assert model.count == 2 + assert model.getItem(0)["displayName"] == "zomg" + assert model.getItem(1)["displayName"] == "zomg2" From 6dd62f9024fe0392235f400b68b60dece35dea52 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 26 Apr 2021 14:34:30 +0200 Subject: [PATCH 5/8] Add tests for DFFileModel CURA-7959 --- .../src/DigitalFactoryFileModel.py | 1 + .../tests/TestDigitalFactoryFileModel.py | 73 +++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 plugins/DigitalLibrary/tests/TestDigitalFactoryFileModel.py diff --git a/plugins/DigitalLibrary/src/DigitalFactoryFileModel.py b/plugins/DigitalLibrary/src/DigitalFactoryFileModel.py index 718bd11cd2..535cce0e8f 100644 --- a/plugins/DigitalLibrary/src/DigitalFactoryFileModel.py +++ b/plugins/DigitalLibrary/src/DigitalFactoryFileModel.py @@ -40,6 +40,7 @@ class DigitalFactoryFileModel(ListModel): def setFiles(self, df_files_in_project: List[DigitalFactoryFileResponse]) -> None: if self._files == df_files_in_project: return + self.clear() self._files = df_files_in_project self._update() diff --git a/plugins/DigitalLibrary/tests/TestDigitalFactoryFileModel.py b/plugins/DigitalLibrary/tests/TestDigitalFactoryFileModel.py new file mode 100644 index 0000000000..c34dbffc90 --- /dev/null +++ b/plugins/DigitalLibrary/tests/TestDigitalFactoryFileModel.py @@ -0,0 +1,73 @@ +from pathlib import Path + +from src.DigitalFactoryFileModel import DigitalFactoryFileModel +from src.DigitalFactoryFileResponse import DigitalFactoryFileResponse + + +file_1 = DigitalFactoryFileResponse(client_id ="client_id_1", + content_type = "zomg", + file_name = "file_1.3mf", + file_id = "file_id_1", + library_project_id = "project_id_1", + status = "test", + user_id = "user_id_1", + username = "username_1", + uploaded_at = "2021-04-07T10:33:25.000Z") + +file_2 = DigitalFactoryFileResponse(client_id ="client_id_2", + content_type = "zomg", + file_name = "file_2.3mf", + file_id = "file_id_2", + library_project_id = "project_id_2", + status = "test", + user_id = "user_id_2", + username = "username_2", + uploaded_at = "2021-02-06T09:33:22.000Z") + +file_3 = DigitalFactoryFileResponse(client_id ="client_id_1", + content_type = "zomg", + file_name = "file_3.wtf", + file_id = "file_id_3", + library_project_id = "project_id_1", + status = "test", + user_id = "user_id_1", + username = "username_1", + uploaded_at = "2021-04-06T12:33:25.000Z") + + +def test_setFiles(): + model = DigitalFactoryFileModel() + + assert model.count == 0 + + model.setFiles([file_1, file_2]) + assert model.count == 2 + + assert model.getItem(0)["fileName"] == "file_1.3mf" + assert model.getItem(1)["fileName"] == "file_2.3mf" + + +def test_clearProjects(): + model = DigitalFactoryFileModel() + model.setFiles([file_1, file_2]) + model.clearFiles() + assert model.count == 0 + + +def test_setProjectMultipleTimes(): + model = DigitalFactoryFileModel() + model.setFiles([file_1, file_2]) + model.setFiles([file_2]) + assert model.count == 1 + assert model.getItem(0)["fileName"] == "file_2.3mf" + + +def test_setFilter(): + model = DigitalFactoryFileModel() + + model.setFiles([file_1, file_2, file_3]) + model.setFilters({"file_name": lambda x: Path(x).suffix[1:].lower() in ["3mf"]}) + assert model.count == 2 + + model.clearFilters() + assert model.count == 3 From 5700e4491469a7c95ba4a2b4313d50dfaef659d2 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 5 May 2021 09:32:59 +0200 Subject: [PATCH 6/8] Apply suggestions from code review CURA-7959 Co-authored-by: Ghostkeeper --- .../tests/TestDFFileExportAndUploadManager.py | 6 +++--- .../DigitalLibrary/tests/TestDigitalFactoryFileModel.py | 2 +- .../DigitalLibrary/tests/TestDigitalLibraryApiClient.py | 9 ++++----- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/plugins/DigitalLibrary/tests/TestDFFileExportAndUploadManager.py b/plugins/DigitalLibrary/tests/TestDFFileExportAndUploadManager.py index 4c4ef95134..2fb0ae4142 100644 --- a/plugins/DigitalLibrary/tests/TestDFFileExportAndUploadManager.py +++ b/plugins/DigitalLibrary/tests/TestDFFileExportAndUploadManager.py @@ -17,7 +17,7 @@ def upload_manager(): }]) node = MagicMock(name = "SceneNode") application = MagicMock(name = "CuraApplication") - with patch("cura.CuraApplication.CuraApplication.getInstance", MagicMock(return_value=application)): + 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", @@ -41,8 +41,8 @@ def test_extractErrorTitle(upload_manager, input, expected_result): def test_exportJobError(upload_manager): mocked_application = MagicMock() - with patch("UM.Application.Application.getInstance", MagicMock(return_value=mocked_application)): + 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() \ No newline at end of file + mocked_application.showMessageSignal.emit.assert_called_once() diff --git a/plugins/DigitalLibrary/tests/TestDigitalFactoryFileModel.py b/plugins/DigitalLibrary/tests/TestDigitalFactoryFileModel.py index c34dbffc90..249427b41d 100644 --- a/plugins/DigitalLibrary/tests/TestDigitalFactoryFileModel.py +++ b/plugins/DigitalLibrary/tests/TestDigitalFactoryFileModel.py @@ -4,7 +4,7 @@ from src.DigitalFactoryFileModel import DigitalFactoryFileModel from src.DigitalFactoryFileResponse import DigitalFactoryFileResponse -file_1 = DigitalFactoryFileResponse(client_id ="client_id_1", +file_1 = DigitalFactoryFileResponse(client_id = "client_id_1", content_type = "zomg", file_name = "file_1.3mf", file_id = "file_id_1", diff --git a/plugins/DigitalLibrary/tests/TestDigitalLibraryApiClient.py b/plugins/DigitalLibrary/tests/TestDigitalLibraryApiClient.py index 0cb19c8365..ba0a0b15b4 100644 --- a/plugins/DigitalLibrary/tests/TestDigitalLibraryApiClient.py +++ b/plugins/DigitalLibrary/tests/TestDigitalLibraryApiClient.py @@ -45,16 +45,16 @@ def test_getProjectsFirstPage(api_client): args = http_manager.get.call_args_list[0] # Ensure that it's called with the right limit - assert args[0][0] == 'https://api.ultimaker.com/cura/v1/projects?limit=20' + assert args[0][0] == "https://api.ultimaker.com/cura/v1/projects?limit=20" # Change the limit & try again http_manager.get.reset_mock() pagination_manager.limit = 80 - api_client.getProjectsFirstPage(on_finished=finished_callback, failed=failed_callback) + api_client.getProjectsFirstPage(on_finished = finished_callback, failed = failed_callback) args = http_manager.get.call_args_list[0] # Ensure that it's called with the right limit - assert args[0][0] == 'https://api.ultimaker.com/cura/v1/projects?limit=80' + assert args[0][0] == "https://api.ultimaker.com/cura/v1/projects?limit=80" def test_getMoreProjects_noNewProjects(api_client): @@ -70,7 +70,7 @@ def test_getMoreProjects_noNewProjects(api_client): def test_getMoreProjects_hasNewProjects(api_client): - api_client.hasMoreProjectsToLoad = MagicMock(return_value=True) + api_client.hasMoreProjectsToLoad = MagicMock(return_value = True) http_manager = MagicMock() api_client._http = http_manager @@ -84,4 +84,3 @@ def test_getMoreProjects_hasNewProjects(api_client): def test_clear(api_client): api_client.clear() api_client._projects_pagination_mgr.reset.assert_called_once() - From 49cd43e5d5d7c9faf3e666b0b891bd09a90b06d0 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 5 May 2021 09:53:00 +0200 Subject: [PATCH 7/8] Rename variable in test CURA-7959 --- .../tests/TestDigitalFactoryFileModel.py | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/plugins/DigitalLibrary/tests/TestDigitalFactoryFileModel.py b/plugins/DigitalLibrary/tests/TestDigitalFactoryFileModel.py index 249427b41d..7817d03516 100644 --- a/plugins/DigitalLibrary/tests/TestDigitalFactoryFileModel.py +++ b/plugins/DigitalLibrary/tests/TestDigitalFactoryFileModel.py @@ -24,15 +24,15 @@ file_2 = DigitalFactoryFileResponse(client_id ="client_id_2", username = "username_2", uploaded_at = "2021-02-06T09:33:22.000Z") -file_3 = DigitalFactoryFileResponse(client_id ="client_id_1", - content_type = "zomg", - file_name = "file_3.wtf", - file_id = "file_id_3", - library_project_id = "project_id_1", - status = "test", - user_id = "user_id_1", - username = "username_1", - uploaded_at = "2021-04-06T12:33:25.000Z") +file_wtf = DigitalFactoryFileResponse(client_id ="client_id_1", + content_type = "zomg", + file_name = "file_3.wtf", + file_id = "file_id_3", + library_project_id = "project_id_1", + status = "test", + user_id = "user_id_1", + username = "username_1", + uploaded_at = "2021-04-06T12:33:25.000Z") def test_setFiles(): @@ -65,7 +65,7 @@ def test_setProjectMultipleTimes(): def test_setFilter(): model = DigitalFactoryFileModel() - model.setFiles([file_1, file_2, file_3]) + model.setFiles([file_1, file_2, file_wtf]) model.setFilters({"file_name": lambda x: Path(x).suffix[1:].lower() in ["3mf"]}) assert model.count == 2 From 0b1bbd852806bac62b637c4379e918c2b8e3c73f Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 5 May 2021 09:54:45 +0200 Subject: [PATCH 8/8] Remove unused variable CURA-7959 --- .../DigitalLibrary/tests/TestDigitalFactoryProjectModel.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/plugins/DigitalLibrary/tests/TestDigitalFactoryProjectModel.py b/plugins/DigitalLibrary/tests/TestDigitalFactoryProjectModel.py index c07eb5e8ba..890f62f3f6 100644 --- a/plugins/DigitalLibrary/tests/TestDigitalFactoryProjectModel.py +++ b/plugins/DigitalLibrary/tests/TestDigitalFactoryProjectModel.py @@ -13,11 +13,6 @@ project_2 = DigitalFactoryProjectResponse(library_project_id = "omg2", username = "nope", organization_shared = False) -project_3 = DigitalFactoryProjectResponse(library_project_id = "_omg3", - display_name = "zomg3", - username = "nope", - organization_shared = False) - def test_setProjects(): model = DigitalFactoryProjectModel()