TestMaterialManager.py 8.3 KB

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