diff --git a/tests/Settings/TestSettingOverrideDecorator.py b/tests/Settings/TestSettingOverrideDecorator.py new file mode 100644 index 0000000000..50c23c409f --- /dev/null +++ b/tests/Settings/TestSettingOverrideDecorator.py @@ -0,0 +1,52 @@ +from unittest.mock import patch, MagicMock + +import pytest + +from cura.Settings.SettingOverrideDecorator import SettingOverrideDecorator + + +extruder_manager = MagicMock(name= "ExtruderManager") +application = MagicMock(name="application") +container_registry = MagicMock(name="container_registry") + +@pytest.fixture() +def setting_override_decorator(): + # Ensure that all the call counts and the like are reset. + container_registry.reset_mock() + application.reset_mock() + extruder_manager.reset_mock() + + # Actually create the decorator. + with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value=container_registry)): + with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)): + with patch("cura.Settings.ExtruderManager.ExtruderManager.getInstance", MagicMock(return_value=extruder_manager)): + return SettingOverrideDecorator() + + +def test_onSettingValueChanged(setting_override_decorator): + # On creation the needs slicing should be called once (as it being added should trigger a reslice) + assert application.getBackend().needsSlicing.call_count == 1 + with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)): + setting_override_decorator._onSettingChanged("blarg", "value") + + # Once we set a setting value, it should trigger again. + assert application.getBackend().needsSlicing.call_count == 2 + + +def test_onSettingEnableChanged(setting_override_decorator): + # On creation the needs slicing should be called once (as it being added should trigger a reslice) + assert application.getBackend().needsSlicing.call_count == 1 + with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)): + setting_override_decorator._onSettingChanged("blarg", "enabled") + + # Once we set a property that is not a value, no re-slice should happen. + assert application.getBackend().needsSlicing.call_count == 1 + + +def test_setActiveExtruder(setting_override_decorator): + setting_override_decorator.activeExtruderChanged.emit = MagicMock() + with patch("cura.Settings.ExtruderManager.ExtruderManager.getInstance", MagicMock(return_value=extruder_manager)): + with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value=container_registry)): + setting_override_decorator.setActiveExtruder("ZOMG") + setting_override_decorator.activeExtruderChanged.emit.assert_called_once_with() + assert setting_override_decorator.getActiveExtruder() == "ZOMG"