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__)), ".."))