From e702736455f565ecedc7880c5ade7687ac0597b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Mon, 2 Mar 2015 12:58:24 +0100 Subject: [PATCH] Updated/fixed unit tests and travis configuration --- .travis.yml | 6 +++--- tests/filemanager/__init__.py | 11 +++++++++++ tests/filemanager/test_filemanager.py | 25 +++++++++++++++++-------- tests/plugin/__init__.py | 10 ++++++++++ tests/printer/__init__.py | 10 ++++++++++ tests/slicing/__init__.py | 10 ++++++++++ tests/slicing/test_slicingmanager.py | 22 ++++++++++++++++++---- 7 files changed, 79 insertions(+), 15 deletions(-) create mode 100644 tests/filemanager/__init__.py create mode 100644 tests/plugin/__init__.py create mode 100644 tests/printer/__init__.py create mode 100644 tests/slicing/__init__.py diff --git a/.travis.yml b/.travis.yml index 15d917c4..edc98c04 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,8 +2,8 @@ language: python python: - - "2.7" +- "2.7" install: - - pip install -r requirements.txt +- python setup.py install script: - - nosetests \ No newline at end of file +- nosetests tests/ \ No newline at end of file diff --git a/tests/filemanager/__init__.py b/tests/filemanager/__init__.py new file mode 100644 index 00000000..65f33057 --- /dev/null +++ b/tests/filemanager/__init__.py @@ -0,0 +1,11 @@ +# coding=utf-8 +""" +Unit tests for ``octoprint.filemanager.``. +""" + +from __future__ import absolute_import + +__author__ = "Gina Häußge " +__license__ = 'GNU Affero General Public License http://www.gnu.org/licenses/agpl.html' +__copyright__ = "Copyright (C) 2014 The OctoPrint Project - Released under terms of the AGPLv3 License" + diff --git a/tests/filemanager/test_filemanager.py b/tests/filemanager/test_filemanager.py index 8681ffb2..d517f6c0 100644 --- a/tests/filemanager/test_filemanager.py +++ b/tests/filemanager/test_filemanager.py @@ -26,6 +26,10 @@ class FileManagerTest(unittest.TestCase): event_manager.return_value.fire = mock.MagicMock() self.fire_event = event_manager.return_value.fire + # mock plugin manager + self.plugin_manager_patcher = mock.patch("octoprint.plugin.plugin_manager") + self.plugin_manager = self.plugin_manager_patcher.start() + self.analysis_queue = mock.MagicMock(spec=octoprint.filemanager.AnalysisQueue) self.slicing_manager = mock.MagicMock(spec=octoprint.slicing.SlicingManager) @@ -42,12 +46,13 @@ class FileManagerTest(unittest.TestCase): def cleanUp(self): self.event_manager_patcher.stop() + self.plugin_manager_patcher.stop() def test_add_file(self): wrapper = object() self.local_storage.add_file.return_value = ("", "test.file") - self.local_storage.get_absolute_path.return_value = "prefix/test.file" + self.local_storage.path_on_disk.return_value = "prefix/test.file" test_profile = dict(id="_default", name="My Default Profile") self.printer_profile_manager.get_current_or_default.return_value = test_profile @@ -126,7 +131,7 @@ class FileManagerTest(unittest.TestCase): self.printer_profile_manager.get.return_value = None # mock get_absolute_path method on local storage - def get_absolute_path(path): + def path_on_disk(path): if isinstance(path, tuple): import os joined_path = "" @@ -134,7 +139,7 @@ class FileManagerTest(unittest.TestCase): joined_path = os.path.join(joined_path, part) path = joined_path return "prefix/" + path - self.local_storage.get_absolute_path.side_effect = get_absolute_path + self.local_storage.path_on_disk.side_effect = path_on_disk # mock split_path method on local storage def split_path(path): @@ -148,12 +153,14 @@ class FileManagerTest(unittest.TestCase): self.local_storage.add_file.side_effect = add_file # mock slice method on slicing manager - def slice(slicer_name, source_path, dest_path, profile, done_cb, printer_profile_id=None, callback_args=None, overrides=None, on_progress=None, on_progress_args=None, on_progress_kwargs=None): + def slice(slicer_name, source_path, dest_path, profile, done_cb, printer_profile_id=None, position=None, callback_args=None, overrides=None, on_progress=None, on_progress_args=None, on_progress_kwargs=None): self.assertEquals("some_slicer", slicer_name) self.assertEquals("prefix/source.file", source_path) self.assertEquals("tmp.file", dest_path) self.assertIsNone(profile) self.assertIsNone(overrides) + self.assertIsNone(printer_profile_id) + self.assertIsNone(position) self.assertIsNotNone(on_progress) self.assertIsNotNone(on_progress_args) self.assertTupleEqual(("some_slicer", octoprint.filemanager.FileDestinations.LOCAL, "source.file", octoprint.filemanager.FileDestinations.LOCAL, "dest.file"), on_progress_args) @@ -202,8 +209,8 @@ class FileManagerTest(unittest.TestCase): temp_file.name = "tmp.file" mocked_tempfile.return_value = temp_file - # mock get_absolute_path method on local storage - def get_absolute_path(path): + # mock path_on_disk method on local storage + def path_on_disk(path): if isinstance(path, tuple): import os joined_path = "" @@ -211,15 +218,17 @@ class FileManagerTest(unittest.TestCase): joined_path = os.path.join(joined_path, part) path = joined_path return "prefix/" + path - self.local_storage.get_absolute_path.side_effect = get_absolute_path + self.local_storage.path_on_disk.side_effect = path_on_disk # mock slice method on slicing manager - def slice(slicer_name, source_path, dest_path, profile, done_cb, printer_profile_id=None, callback_args=None, overrides=None, on_progress=None, on_progress_args=None, on_progress_kwargs=None): + def slice(slicer_name, source_path, dest_path, profile, done_cb, printer_profile_id=None, position=None, callback_args=None, overrides=None, on_progress=None, on_progress_args=None, on_progress_kwargs=None): self.assertEquals("some_slicer", slicer_name) self.assertEquals("prefix/source.file", source_path) self.assertEquals("tmp.file", dest_path) self.assertIsNone(profile) self.assertIsNone(overrides) + self.assertIsNone(printer_profile_id) + self.assertIsNone(position) self.assertIsNotNone(on_progress) self.assertIsNotNone(on_progress_args) self.assertTupleEqual(("some_slicer", octoprint.filemanager.FileDestinations.LOCAL, "source.file", octoprint.filemanager.FileDestinations.LOCAL, "dest.file"), on_progress_args) diff --git a/tests/plugin/__init__.py b/tests/plugin/__init__.py new file mode 100644 index 00000000..43b44800 --- /dev/null +++ b/tests/plugin/__init__.py @@ -0,0 +1,10 @@ +# coding=utf-8 +""" +Unit tests for ``octoprint.plugin``. +""" + +from __future__ import absolute_import + +__author__ = "Gina Häußge " +__license__ = 'GNU Affero General Public License http://www.gnu.org/licenses/agpl.html' +__copyright__ = "Copyright (C) 2014 The OctoPrint Project - Released under terms of the AGPLv3 License" diff --git a/tests/printer/__init__.py b/tests/printer/__init__.py new file mode 100644 index 00000000..8f164a2c --- /dev/null +++ b/tests/printer/__init__.py @@ -0,0 +1,10 @@ +# coding=utf-8 +""" +Unit tests for ``octoprint.printer``. +""" + +from __future__ import absolute_import + +__author__ = "Gina Häußge " +__license__ = 'GNU Affero General Public License http://www.gnu.org/licenses/agpl.html' +__copyright__ = "Copyright (C) 2014 The OctoPrint Project - Released under terms of the AGPLv3 License" diff --git a/tests/slicing/__init__.py b/tests/slicing/__init__.py new file mode 100644 index 00000000..b202f2bb --- /dev/null +++ b/tests/slicing/__init__.py @@ -0,0 +1,10 @@ +# coding=utf-8 +""" +Unit tests for ``octoprint.slicing``. +""" + +from __future__ import absolute_import + +__author__ = "Gina Häußge " +__license__ = 'GNU Affero General Public License http://www.gnu.org/licenses/agpl.html' +__copyright__ = "Copyright (C) 2014 The OctoPrint Project - Released under terms of the AGPLv3 License" diff --git a/tests/slicing/test_slicingmanager.py b/tests/slicing/test_slicingmanager.py index 9a209f3e..1b17a89d 100644 --- a/tests/slicing/test_slicingmanager.py +++ b/tests/slicing/test_slicingmanager.py @@ -20,18 +20,23 @@ class TestSlicingManager(unittest.TestCase): self.slicer_plugin = mock.MagicMock() self.slicer_plugin.get_slicer_properties.return_value = dict(type="mock", name="Mock", same_device=True) + self.slicer_plugin.is_slicer_configured.return_value = True # mock plugin manager self.plugin_manager_patcher = mock.patch("octoprint.plugin.plugin_manager") self.plugin_manager = self.plugin_manager_patcher.start() self._mock_slicer_plugins(self.slicer_plugin) + # mock profile manager + self.printer_profile_manager = mock.MagicMock(spec=octoprint.printer.profile.PrinterProfileManager) + # mock settings self.settings_patcher = mock.patch("octoprint.slicing.settings") settings = self.settings_patcher.start() self.settings = settings.return_value - self.slicing_manager = octoprint.slicing.SlicingManager(self.profile_path) + self.slicing_manager = octoprint.slicing.SlicingManager(self.profile_path, self.printer_profile_manager) + self.slicing_manager.initialize() def tearDown(self): import shutil @@ -114,28 +119,37 @@ class TestSlicingManager(unittest.TestCase): # mock slicing self.slicer_plugin.do_slice.return_value = True, None + # mock printer profile manager + printer_profile = dict(_id="mock_printer", _name="Mock Printer Profile") + def get_printer_profile(printer_profile_id): + self.assertEquals("mock_printer", printer_profile_id) + return printer_profile + self.printer_profile_manager.get.side_effect = get_printer_profile + ##~~ call tested method slicer_name = "mock" source_path = "prefix/source.file" dest_path = "prefix/dest.file" profile_name = "dummy_profile" + printer_profile_id = "mock_printer" + position = dict(x=10, y=20) callback = mock.MagicMock() callback_args = ("one", "two", "three") callback_kwargs = dict(foo="bar") overrides = dict(layer_height=0.5) - self.slicing_manager.slice(slicer_name, source_path, dest_path, profile_name, callback, callback_args=callback_args, callback_kwargs=callback_kwargs, overrides=overrides) + self.slicing_manager.slice(slicer_name, source_path, dest_path, profile_name, callback, printer_profile_id=printer_profile_id, position=position, callback_args=callback_args, callback_kwargs=callback_kwargs, overrides=overrides) # assert that temporary profile was created properly self.slicer_plugin.save_slicer_profile.assert_called_once_with("tmp.file", default_profile, overrides=overrides) # assert that slicing thread was created properly - mocked_thread.assert_called_once_with(target=mock.ANY, args=(self.slicer_plugin, source_path, dest_path, profile_name, overrides, callback, callback_args, callback_kwargs)) + mocked_thread.assert_called_once_with(target=mock.ANY, args=(self.slicer_plugin, source_path, dest_path, profile_name, overrides, printer_profile, position, callback, callback_args, callback_kwargs)) self.assertTrue(mock_thread.mock.daemon) mock_thread.mock.start.assert_called_once() # assert that slicer was called correctly - self.slicer_plugin.do_slice.assert_called_once_with("prefix/source.file", machinecode_path="prefix/dest.file", profile_path="tmp.file", on_progress=None, on_progress_args=None, on_progress_kwargs=None) + self.slicer_plugin.do_slice.assert_called_once_with(source_path, printer_profile, machinecode_path=dest_path, profile_path="tmp.file", position=position, on_progress=None, on_progress_args=None, on_progress_kwargs=None) # assert that temporary profile was deleted again mocked_os_remove.assert_called_once_with("tmp.file")