TestMaterialManager.py 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. from unittest.mock import MagicMock, patch
  2. from cura.Machines.MaterialManager import MaterialManager
  3. mocked_registry = MagicMock()
  4. material_1 = {"id": "test", "GUID":"TEST!", "base_file": "base_material", "definition": "fdmmachine", "approximate_diameter": "3", "brand": "generic", "material": "pla"}
  5. material_2 = {"id": "base_material", "GUID": "TEST2!", "base_file": "test", "definition": "fdmmachine", "approximate_diameter": "3", "material": "pla"}
  6. mocked_registry.findContainersMetadata = MagicMock(return_value = [material_1, material_2])
  7. mocked_definition = MagicMock()
  8. mocked_definition.getId = MagicMock(return_value = "fdmmachine")
  9. mocked_definition.getMetaDataEntry = MagicMock(return_value = [])
  10. def test_initialize(application):
  11. # Just test if the simple loading works
  12. with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)):
  13. manager = MaterialManager(mocked_registry)
  14. manager.initialize()
  15. # Double check that we actually got some material nodes
  16. assert manager.getMaterialGroup("base_material").name == "base_material"
  17. assert manager.getMaterialGroup("test").name == "test"
  18. def test_getMaterialGroupListByGUID(application):
  19. with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)):
  20. manager = MaterialManager(mocked_registry)
  21. manager.initialize()
  22. assert manager.getMaterialGroupListByGUID("TEST!")[0].name == "test"
  23. assert manager.getMaterialGroupListByGUID("TEST2!")[0].name == "base_material"
  24. def test_getRootMaterialIDforDiameter(application):
  25. with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)):
  26. manager = MaterialManager(mocked_registry)
  27. manager.initialize()
  28. assert manager.getRootMaterialIDForDiameter("base_material", "3") == "base_material"
  29. def test_getMaterialNodeByTypeMachineHasNoMaterials(application):
  30. with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)):
  31. manager = MaterialManager(mocked_registry)
  32. manager.initialize()
  33. mocked_stack = MagicMock()
  34. assert manager.getMaterialNodeByType(mocked_stack, "0", "nozzle", "", "") is None
  35. def test_getMaterialNodeByTypeMachineHasMaterialsButNoMaterialFound(application):
  36. with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)):
  37. manager = MaterialManager(mocked_registry)
  38. manager.initialize()
  39. mocked_stack = MagicMock()
  40. mocked_stack.definition.getMetaDataEntry = MagicMock(return_value = True) # For the "has_materials" metadata
  41. assert manager.getMaterialNodeByType(mocked_stack, "0", "nozzle", "", "") is None
  42. def test_getMaterialNodeByTypeMachineHasMaterialsAndMaterialExists(application):
  43. with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)):
  44. manager = MaterialManager(mocked_registry)
  45. manager.initialize()
  46. mocked_result = MagicMock()
  47. manager.getMaterialNode = MagicMock(return_value = mocked_result)
  48. mocked_stack = MagicMock()
  49. mocked_stack.definition.getMetaDataEntry = MagicMock(return_value = True) # For the "has_materials" metadata
  50. assert manager.getMaterialNodeByType(mocked_stack, "0", "nozzle", "", "TEST!") is mocked_result
  51. def test_getAllMaterialGroups(application):
  52. with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)):
  53. manager = MaterialManager(mocked_registry)
  54. manager.initialize()
  55. material_groups = manager.getAllMaterialGroups()
  56. assert "base_material" in material_groups
  57. assert "test" in material_groups
  58. assert material_groups["base_material"].name == "base_material"
  59. assert material_groups["test"].name == "test"
  60. class TestAvailableMaterials:
  61. def test_happy(self, application):
  62. with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)):
  63. manager = MaterialManager(mocked_registry)
  64. manager.initialize()
  65. available_materials = manager.getAvailableMaterials(mocked_definition, None, None, 3)
  66. assert "base_material" in available_materials
  67. assert "test" in available_materials
  68. def test_wrongDiameter(self, application):
  69. with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)):
  70. manager = MaterialManager(mocked_registry)
  71. manager.initialize()
  72. available_materials = manager.getAvailableMaterials(mocked_definition, None, None, 200)
  73. assert available_materials == {} # Nothing found.
  74. def test_excludedMaterials(self, application):
  75. with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)):
  76. manager = MaterialManager(mocked_registry)
  77. manager.initialize()
  78. with patch.object(mocked_definition, "getMetaDataEntry", MagicMock(return_value = ["test"])):
  79. available_materials = manager.getAvailableMaterials(mocked_definition, None, None, 3)
  80. assert "base_material" in available_materials
  81. assert "test" not in available_materials
  82. class Test_getFallbackMaterialIdByMaterialType:
  83. def test_happyFlow(self, application):
  84. with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)):
  85. manager = MaterialManager(mocked_registry)
  86. manager.initialize()
  87. assert manager.getFallbackMaterialIdByMaterialType("pla") == "test"
  88. def test_unknownMaterial(self, application):
  89. with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)):
  90. manager = MaterialManager(mocked_registry)
  91. manager.initialize()
  92. assert manager.getFallbackMaterialIdByMaterialType("OMGZOMG") is None
  93. def test_getMaterialNode(application):
  94. with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)):
  95. manager = MaterialManager(mocked_registry)
  96. manager._updateMaps()
  97. assert manager.getMaterialNode("fdmmachine", None, None, 3, "base_material").getMetaDataEntry("id") == "test"
  98. def test_getAvailableMaterialsForMachineExtruder(application):
  99. with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)):
  100. manager = MaterialManager(mocked_registry)
  101. manager.initialize()
  102. mocked_machine = MagicMock()
  103. mocked_machine.getBuildplateName = MagicMock(return_value = "build_plate")
  104. mocked_machine.definition = mocked_definition
  105. mocked_extruder_stack = MagicMock()
  106. mocked_extruder_stack.variant.getId = MagicMock(return_value = "test")
  107. mocked_extruder_stack.getApproximateMaterialDiameter = MagicMock(return_value = 2.85)
  108. available_materials = manager.getAvailableMaterialsForMachineExtruder(mocked_machine, mocked_extruder_stack)
  109. assert "base_material" in available_materials
  110. assert "test" in available_materials
  111. class TestFavorites:
  112. def test_addFavorite(self, application):
  113. with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)):
  114. manager = MaterialManager(mocked_registry)
  115. manager.materialsUpdated = MagicMock()
  116. manager.addFavorite("blarg")
  117. assert manager.getFavorites() == {"blarg"}
  118. application.getPreferences().setValue.assert_called_once_with("cura/favorite_materials", "blarg")
  119. manager.materialsUpdated.emit.assert_called_once_with()
  120. def test_removeNotExistingFavorite(self, application):
  121. with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)):
  122. manager = MaterialManager(mocked_registry)
  123. manager.materialsUpdated = MagicMock()
  124. manager.removeFavorite("blarg")
  125. manager.materialsUpdated.emit.assert_not_called()
  126. def test_removeExistingFavorite(self, application):
  127. with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)):
  128. manager = MaterialManager(mocked_registry)
  129. manager.materialsUpdated = MagicMock()
  130. manager.addFavorite("blarg")
  131. manager.removeFavorite("blarg")
  132. assert manager.materialsUpdated.emit.call_count == 2
  133. application.getPreferences().setValue.assert_called_with("cura/favorite_materials", "")
  134. assert manager.getFavorites() == set()