TestMachineManager.py 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. from unittest.mock import MagicMock, patch
  2. import pytest
  3. from UM.Settings.ContainerRegistry import ContainerRegistry
  4. from cura.Settings.ExtruderManager import ExtruderManager
  5. from cura.Settings.MachineManager import MachineManager
  6. @pytest.fixture()
  7. def global_stack():
  8. stack = MagicMock(name="Global Stack")
  9. stack.getId = MagicMock(return_value ="GlobalStack")
  10. return stack
  11. @pytest.fixture()
  12. def container_registry() -> ContainerRegistry:
  13. return MagicMock(name = "ContainerRegistry")
  14. @pytest.fixture()
  15. def extruder_manager(application, container_registry) -> ExtruderManager:
  16. if ExtruderManager.getInstance() is not None:
  17. # Reset the data
  18. ExtruderManager._ExtruderManager__instance = None
  19. with patch("cura.CuraApplication.CuraApplication.getInstance", MagicMock(return_value=application)):
  20. with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value=container_registry)):
  21. manager = ExtruderManager()
  22. return manager
  23. @pytest.fixture()
  24. def machine_manager(application, extruder_manager, container_registry, global_stack) -> MachineManager:
  25. application.getExtruderManager = MagicMock(return_value = extruder_manager)
  26. application.getGlobalContainerStack = MagicMock(return_value = global_stack)
  27. with patch("cura.Settings.CuraContainerRegistry.CuraContainerRegistry.getInstance", MagicMock(return_value=container_registry)):
  28. manager = MachineManager(application)
  29. return manager
  30. def test_setActiveMachine(machine_manager):
  31. registry = MagicMock()
  32. mocked_global_stack = MagicMock()
  33. mocked_global_stack.getId = MagicMock(return_value = "test_machine")
  34. registry.findContainerStacks = MagicMock(return_value = [mocked_global_stack])
  35. with patch("cura.Settings.CuraContainerRegistry.CuraContainerRegistry.getInstance", MagicMock(return_value=registry)):
  36. with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value=registry)):
  37. machine_manager.setActiveMachine("test_machine")
  38. # Although we mocked the application away, we still want to know if it was notified about the attempted change.
  39. machine_manager._application.setGlobalContainerStack.assert_called_with(mocked_global_stack)
  40. def test_getMachine():
  41. registry = MagicMock()
  42. mocked_global_stack = MagicMock()
  43. mocked_global_stack.getId = MagicMock(return_value="test_machine")
  44. mocked_global_stack.definition.getId = MagicMock(return_value = "test")
  45. registry.findContainerStacks = MagicMock(return_value=[mocked_global_stack])
  46. with patch("cura.Settings.CuraContainerRegistry.CuraContainerRegistry.getInstance", MagicMock(return_value=registry)):
  47. assert MachineManager.getMachine("test") == mocked_global_stack
  48. def test_addMachine(machine_manager):
  49. registry = MagicMock()
  50. mocked_stack = MagicMock()
  51. mocked_stack.getId = MagicMock(return_value="newlyCreatedStack")
  52. mocked_create_machine = MagicMock(name="createMachine", return_value = mocked_stack)
  53. machine_manager.setActiveMachine = MagicMock()
  54. with patch("cura.Settings.CuraStackBuilder.CuraStackBuilder.createMachine", mocked_create_machine):
  55. with patch("cura.Settings.CuraContainerRegistry.CuraContainerRegistry.getInstance", MagicMock(return_value=registry)):
  56. machine_manager.addMachine("derp")
  57. machine_manager.setActiveMachine.assert_called_with("newlyCreatedStack")
  58. def test_hasUserSettings(machine_manager, application):
  59. mocked_stack = application.getGlobalContainerStack()
  60. mocked_instance_container = MagicMock(name="UserSettingContainer")
  61. mocked_instance_container.getNumInstances = MagicMock(return_value = 12)
  62. mocked_stack.getTop = MagicMock(return_value = mocked_instance_container)
  63. assert machine_manager.numUserSettings == 12
  64. assert machine_manager.hasUserSettings
  65. def test_totalNumberOfSettings(machine_manager):
  66. registry = MagicMock()
  67. mocked_definition = MagicMock()
  68. mocked_definition.getAllKeys = MagicMock(return_value = ["omg", "zomg", "foo"])
  69. registry.findDefinitionContainers = MagicMock(return_value = [mocked_definition])
  70. with patch("cura.Settings.CuraContainerRegistry.CuraContainerRegistry.getInstance", MagicMock(return_value=registry)):
  71. assert machine_manager.totalNumberOfSettings == 3
  72. def createMockedExtruder(extruder_id):
  73. extruder = MagicMock()
  74. extruder.getId = MagicMock(return_value = extruder_id)
  75. return extruder
  76. def createMockedInstanceContainer(instance_id, name = ""):
  77. instance = MagicMock()
  78. instance.getName = MagicMock(return_value = name)
  79. instance.getId = MagicMock(return_value=instance_id)
  80. return instance
  81. def test_allActiveMaterialIds(machine_manager, extruder_manager):
  82. extruder_1 = createMockedExtruder("extruder_1")
  83. extruder_2 = createMockedExtruder("extruder_2")
  84. extruder_1.material = createMockedInstanceContainer("material_1")
  85. extruder_2.material = createMockedInstanceContainer("material_2")
  86. extruder_manager.getActiveExtruderStacks = MagicMock(return_value = [extruder_1, extruder_2])
  87. assert machine_manager.allActiveMaterialIds == {"extruder_1": "material_1", "extruder_2": "material_2"}
  88. def test_activeVariantNames(machine_manager, extruder_manager):
  89. extruder_1 = createMockedExtruder("extruder_1")
  90. extruder_2 = createMockedExtruder("extruder_2")
  91. extruder_1.getMetaDataEntry = MagicMock(return_value = "0")
  92. extruder_2.getMetaDataEntry = MagicMock(return_value= "2")
  93. extruder_1.variant = createMockedInstanceContainer("variant_1", "variant_name_1")
  94. extruder_2.variant = createMockedInstanceContainer("variant_2", "variant_name_2")
  95. extruder_manager.getActiveExtruderStacks = MagicMock(return_value=[extruder_1, extruder_2])
  96. assert machine_manager.activeVariantNames == {"0": "variant_name_1", "2": "variant_name_2"}
  97. def test_globalVariantName(machine_manager, application):
  98. global_stack = application.getGlobalContainerStack()
  99. global_stack.variant = createMockedInstanceContainer("beep", "zomg")
  100. assert machine_manager.globalVariantName == "zomg"
  101. def test_activeMachineDefinitionName(machine_manager):
  102. global_stack = machine_manager.activeMachine
  103. global_stack.definition = createMockedInstanceContainer("beep", "zomg")
  104. assert machine_manager.activeMachineDefinitionName == "zomg"
  105. def test_activeMachineId(machine_manager):
  106. assert machine_manager.activeMachineId == "GlobalStack"
  107. def test_activeVariantBuildplateName(machine_manager):
  108. global_stack = machine_manager.activeMachine
  109. global_stack.variant = createMockedInstanceContainer("beep", "zomg")
  110. assert machine_manager.activeVariantBuildplateName == "zomg"
  111. def test_resetSettingForAllExtruders(machine_manager):
  112. global_stack = machine_manager.activeMachine
  113. extruder_1 = createMockedExtruder("extruder_1")
  114. extruder_2 = createMockedExtruder("extruder_2")
  115. extruder_1.userChanges = createMockedInstanceContainer("settings_1")
  116. extruder_2.userChanges = createMockedInstanceContainer("settings_2")
  117. global_stack.extruders = {"1": extruder_1, "2": extruder_2}
  118. machine_manager.resetSettingForAllExtruders("whatever")
  119. extruder_1.userChanges.removeInstance.assert_called_once_with("whatever")
  120. extruder_2.userChanges.removeInstance.assert_called_once_with("whatever")