TestMachineManager.py 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. from unittest.mock import MagicMock, patch
  2. import pytest
  3. from cura.Settings.MachineManager import MachineManager
  4. def createMockedStack(stack_id: str, name: str):
  5. stack = MagicMock(name=name)
  6. stack.getId = MagicMock(return_value=stack_id)
  7. return stack
  8. @pytest.fixture()
  9. def global_stack():
  10. return createMockedStack("GlobalStack", "Global Stack")
  11. @pytest.fixture()
  12. def machine_manager(application, extruder_manager, container_registry, global_stack) -> MachineManager:
  13. application.getExtruderManager = MagicMock(return_value = extruder_manager)
  14. application.getGlobalContainerStack = MagicMock(return_value = global_stack)
  15. with patch("cura.Settings.CuraContainerRegistry.CuraContainerRegistry.getInstance", MagicMock(return_value=container_registry)):
  16. manager = MachineManager(application)
  17. manager._onGlobalContainerChanged()
  18. return manager
  19. def test_getMachine():
  20. registry = MagicMock()
  21. mocked_global_stack = MagicMock()
  22. mocked_global_stack.getId = MagicMock(return_value="test_machine")
  23. mocked_global_stack.definition.getId = MagicMock(return_value = "test")
  24. registry.findContainerStacks = MagicMock(return_value=[mocked_global_stack])
  25. with patch("cura.Settings.CuraContainerRegistry.CuraContainerRegistry.getInstance", MagicMock(return_value=registry)):
  26. assert MachineManager.getMachine("test") == mocked_global_stack
  27. # Since only test is in the registry, this should be None
  28. assert MachineManager.getMachine("UnknownMachine") is None
  29. def test_addMachine(machine_manager):
  30. registry = MagicMock()
  31. mocked_stack = MagicMock()
  32. mocked_stack.getId = MagicMock(return_value="newlyCreatedStack")
  33. mocked_create_machine = MagicMock(name="createMachine", return_value = mocked_stack)
  34. machine_manager.setActiveMachine = MagicMock()
  35. with patch("cura.Settings.CuraStackBuilder.CuraStackBuilder.createMachine", mocked_create_machine):
  36. with patch("cura.Settings.CuraContainerRegistry.CuraContainerRegistry.getInstance", MagicMock(return_value=registry)):
  37. machine_manager.addMachine("derp")
  38. machine_manager.setActiveMachine.assert_called_with("newlyCreatedStack")
  39. def test_hasUserSettings(machine_manager, application):
  40. mocked_stack = application.getGlobalContainerStack()
  41. mocked_instance_container = MagicMock(name="UserSettingContainer")
  42. mocked_instance_container.getNumInstances = MagicMock(return_value = 12)
  43. mocked_stack.getTop = MagicMock(return_value = mocked_instance_container)
  44. assert machine_manager.numUserSettings == 12
  45. assert machine_manager.hasUserSettings
  46. def test_totalNumberOfSettings(machine_manager):
  47. registry = MagicMock()
  48. mocked_definition = MagicMock()
  49. mocked_definition.getAllKeys = MagicMock(return_value = ["omg", "zomg", "foo"])
  50. registry.findDefinitionContainers = MagicMock(return_value = [mocked_definition])
  51. with patch("cura.Settings.CuraContainerRegistry.CuraContainerRegistry.getInstance", MagicMock(return_value=registry)):
  52. assert machine_manager.totalNumberOfSettings == 3
  53. def createMockedExtruder(extruder_id):
  54. extruder = MagicMock()
  55. extruder.getId = MagicMock(return_value = extruder_id)
  56. return extruder
  57. def createMockedInstanceContainer(instance_id, name = ""):
  58. instance = MagicMock()
  59. instance.getName = MagicMock(return_value = name)
  60. instance.getId = MagicMock(return_value=instance_id)
  61. return instance
  62. def test_globalVariantName(machine_manager, application):
  63. global_stack = application.getGlobalContainerStack()
  64. global_stack.variant = createMockedInstanceContainer("beep", "zomg")
  65. assert machine_manager.globalVariantName == "zomg"
  66. def test_resetSettingForAllExtruders(machine_manager):
  67. global_stack = machine_manager.activeMachine
  68. extruder_1 = createMockedExtruder("extruder_1")
  69. extruder_2 = createMockedExtruder("extruder_2")
  70. extruder_1.userChanges = createMockedInstanceContainer("settings_1")
  71. extruder_2.userChanges = createMockedInstanceContainer("settings_2")
  72. global_stack.extruderList = [extruder_1, extruder_2]
  73. machine_manager.resetSettingForAllExtruders("whatever")
  74. extruder_1.userChanges.removeInstance.assert_called_once_with("whatever")
  75. extruder_2.userChanges.removeInstance.assert_called_once_with("whatever")
  76. def test_setUnknownActiveMachine(machine_manager):
  77. machine_action_manager = MagicMock()
  78. machine_manager.getMachineActionManager = MagicMock(return_value = machine_action_manager)
  79. machine_manager.setActiveMachine("UnknownMachine")
  80. # The machine isn't known to us, so this should not happen!
  81. machine_action_manager.addDefaultMachineActions.assert_not_called()
  82. def test_clearActiveMachine(machine_manager):
  83. machine_manager.setActiveMachine(None)
  84. machine_manager._application.setGlobalContainerStack.assert_called_once_with(None)
  85. def test_setActiveMachine(machine_manager):
  86. registry = MagicMock()
  87. machine_action_manager = MagicMock()
  88. machine_manager._validateVariantsAndMaterials = MagicMock() # Not testing that function, so whatever.
  89. machine_manager._application.getMachineActionManager = MagicMock(return_value=machine_action_manager)
  90. global_stack = createMockedStack("NewMachine", "Newly created Machine")
  91. # Ensure that the container stack will be found
  92. registry.findContainerStacks = MagicMock(return_value = [global_stack])
  93. with patch("cura.Settings.CuraContainerRegistry.CuraContainerRegistry.getInstance", MagicMock(return_value=registry)):
  94. with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value=registry)):
  95. with patch("cura.Settings.ExtruderManager.ExtruderManager.getInstance"): # Prevent the FixSingleExtruder from being called
  96. machine_manager.setActiveMachine("NewMachine")
  97. machine_action_manager.addDefaultMachineActions.assert_called_once_with(global_stack)
  98. # Yeah sure. It's technically an implementation detail. But if this function wasn't called, it exited early somehow
  99. machine_manager._validateVariantsAndMaterials.assert_called_once_with(global_stack)
  100. def test_setInvalidActiveMachine(machine_manager):
  101. registry = MagicMock()
  102. global_stack = createMockedStack("InvalidMachine", "Newly created Machine")
  103. # This machine is just plain wrong!
  104. global_stack.isValid = MagicMock(return_value = False)
  105. # Ensure that the container stack will be found
  106. registry.findContainerStacks = MagicMock(return_value=[global_stack])
  107. configuration_error_message = MagicMock()
  108. with patch("cura.Settings.CuraContainerRegistry.CuraContainerRegistry.getInstance", MagicMock(return_value=registry)):
  109. with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value=registry)):
  110. with patch("cura.Settings.ExtruderManager.ExtruderManager.getInstance"): # Prevent the FixSingleExtruder from being called
  111. with patch("UM.ConfigurationErrorMessage.ConfigurationErrorMessage.getInstance", MagicMock(return_value = configuration_error_message)):
  112. machine_manager.setActiveMachine("InvalidMachine")
  113. # Notification stuff should happen now!
  114. configuration_error_message.addFaultyContainers.assert_called_once_with("InvalidMachine")