mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-04-28 14:54:27 +08:00
185 lines
8.2 KiB
Python
185 lines
8.2 KiB
Python
from unittest.mock import MagicMock, patch
|
|
|
|
from cura.Machines.MaterialManager import MaterialManager
|
|
|
|
|
|
mocked_registry = MagicMock()
|
|
material_1 = {"id": "test", "GUID":"TEST!", "base_file": "base_material", "definition": "fdmmachine", "approximate_diameter": "3", "brand": "generic", "material": "pla"}
|
|
material_2 = {"id": "base_material", "GUID": "TEST2!", "base_file": "test", "definition": "fdmmachine", "approximate_diameter": "3", "material": "pla"}
|
|
mocked_registry.findContainersMetadata = MagicMock(return_value = [material_1, material_2])
|
|
|
|
|
|
mocked_definition = MagicMock()
|
|
mocked_definition.getId = MagicMock(return_value = "fdmmachine")
|
|
mocked_definition.getMetaDataEntry = MagicMock(return_value = [])
|
|
|
|
|
|
def test_initialize(application):
|
|
# Just test if the simple loading works
|
|
with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)):
|
|
manager = MaterialManager(mocked_registry)
|
|
manager.initialize()
|
|
# Double check that we actually got some material nodes
|
|
assert manager.getMaterialGroup("base_material").name == "base_material"
|
|
assert manager.getMaterialGroup("test").name == "test"
|
|
|
|
|
|
def test_getMaterialGroupListByGUID(application):
|
|
with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)):
|
|
manager = MaterialManager(mocked_registry)
|
|
manager.initialize()
|
|
|
|
assert manager.getMaterialGroupListByGUID("TEST!")[0].name == "test"
|
|
assert manager.getMaterialGroupListByGUID("TEST2!")[0].name == "base_material"
|
|
|
|
|
|
def test_getRootMaterialIDforDiameter(application):
|
|
with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)):
|
|
manager = MaterialManager(mocked_registry)
|
|
manager.initialize()
|
|
|
|
assert manager.getRootMaterialIDForDiameter("base_material", "3") == "base_material"
|
|
|
|
|
|
def test_getMaterialNodeByTypeMachineHasNoMaterials(application):
|
|
with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)):
|
|
manager = MaterialManager(mocked_registry)
|
|
manager.initialize()
|
|
|
|
mocked_stack = MagicMock()
|
|
assert manager.getMaterialNodeByType(mocked_stack, "0", "nozzle", "", "") is None
|
|
|
|
|
|
def test_getMaterialNodeByTypeMachineHasMaterialsButNoMaterialFound(application):
|
|
with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)):
|
|
manager = MaterialManager(mocked_registry)
|
|
manager.initialize()
|
|
|
|
mocked_stack = MagicMock()
|
|
mocked_stack.definition.getMetaDataEntry = MagicMock(return_value = True) # For the "has_materials" metadata
|
|
|
|
assert manager.getMaterialNodeByType(mocked_stack, "0", "nozzle", "", "") is None
|
|
|
|
|
|
def test_getMaterialNodeByTypeMachineHasMaterialsAndMaterialExists(application):
|
|
with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)):
|
|
manager = MaterialManager(mocked_registry)
|
|
manager.initialize()
|
|
mocked_result = MagicMock()
|
|
manager.getMaterialNode = MagicMock(return_value = mocked_result)
|
|
mocked_stack = MagicMock()
|
|
mocked_stack.definition.getMetaDataEntry = MagicMock(return_value = True) # For the "has_materials" metadata
|
|
|
|
assert manager.getMaterialNodeByType(mocked_stack, "0", "nozzle", "", "TEST!") is mocked_result
|
|
|
|
|
|
def test_getAllMaterialGroups(application):
|
|
with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)):
|
|
manager = MaterialManager(mocked_registry)
|
|
manager.initialize()
|
|
|
|
material_groups = manager.getAllMaterialGroups()
|
|
|
|
assert "base_material" in material_groups
|
|
assert "test" in material_groups
|
|
assert material_groups["base_material"].name == "base_material"
|
|
assert material_groups["test"].name == "test"
|
|
|
|
|
|
class TestAvailableMaterials:
|
|
def test_happy(self, application):
|
|
with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)):
|
|
manager = MaterialManager(mocked_registry)
|
|
manager.initialize()
|
|
|
|
available_materials = manager.getAvailableMaterials(mocked_definition, None, None, 3)
|
|
|
|
assert "base_material" in available_materials
|
|
assert "test" in available_materials
|
|
|
|
def test_wrongDiameter(self, application):
|
|
with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)):
|
|
manager = MaterialManager(mocked_registry)
|
|
manager.initialize()
|
|
|
|
available_materials = manager.getAvailableMaterials(mocked_definition, None, None, 200)
|
|
assert available_materials == {} # Nothing found.
|
|
|
|
def test_excludedMaterials(self, application):
|
|
with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)):
|
|
manager = MaterialManager(mocked_registry)
|
|
manager.initialize()
|
|
with patch.object(mocked_definition, "getMetaDataEntry", MagicMock(return_value = ["test"])):
|
|
available_materials = manager.getAvailableMaterials(mocked_definition, None, None, 3)
|
|
assert "base_material" in available_materials
|
|
assert "test" not in available_materials
|
|
|
|
|
|
class Test_getFallbackMaterialIdByMaterialType:
|
|
def test_happyFlow(self, application):
|
|
with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)):
|
|
manager = MaterialManager(mocked_registry)
|
|
manager.initialize()
|
|
|
|
assert manager.getFallbackMaterialIdByMaterialType("pla") == "test"
|
|
|
|
def test_unknownMaterial(self, application):
|
|
with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)):
|
|
manager = MaterialManager(mocked_registry)
|
|
manager.initialize()
|
|
assert manager.getFallbackMaterialIdByMaterialType("OMGZOMG") is None
|
|
|
|
|
|
def test_getMaterialNode(application):
|
|
with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)):
|
|
manager = MaterialManager(mocked_registry)
|
|
manager._updateMaps()
|
|
|
|
assert manager.getMaterialNode("fdmmachine", None, None, 3, "base_material").getMetaDataEntry("id") == "test"
|
|
|
|
|
|
def test_getAvailableMaterialsForMachineExtruder(application):
|
|
with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)):
|
|
manager = MaterialManager(mocked_registry)
|
|
manager.initialize()
|
|
|
|
mocked_machine = MagicMock()
|
|
mocked_machine.getBuildplateName = MagicMock(return_value = "build_plate")
|
|
mocked_machine.definition = mocked_definition
|
|
mocked_extruder_stack = MagicMock()
|
|
mocked_extruder_stack.variant.getId = MagicMock(return_value = "test")
|
|
mocked_extruder_stack.getApproximateMaterialDiameter = MagicMock(return_value = 2.85)
|
|
|
|
available_materials = manager.getAvailableMaterialsForMachineExtruder(mocked_machine, mocked_extruder_stack)
|
|
assert "base_material" in available_materials
|
|
assert "test" in available_materials
|
|
|
|
|
|
class TestFavorites:
|
|
def test_addFavorite(self, application):
|
|
with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)):
|
|
manager = MaterialManager(mocked_registry)
|
|
manager.materialsUpdated = MagicMock()
|
|
manager.addFavorite("blarg")
|
|
assert manager.getFavorites() == {"blarg"}
|
|
|
|
application.getPreferences().setValue.assert_called_once_with("cura/favorite_materials", "blarg")
|
|
manager.materialsUpdated.emit.assert_called_once_with()
|
|
|
|
def test_removeNotExistingFavorite(self, application):
|
|
with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)):
|
|
manager = MaterialManager(mocked_registry)
|
|
manager.materialsUpdated = MagicMock()
|
|
manager.removeFavorite("blarg")
|
|
manager.materialsUpdated.emit.assert_not_called()
|
|
|
|
def test_removeExistingFavorite(self, application):
|
|
with patch("UM.Application.Application.getInstance", MagicMock(return_value=application)):
|
|
manager = MaterialManager(mocked_registry)
|
|
manager.materialsUpdated = MagicMock()
|
|
manager.addFavorite("blarg")
|
|
|
|
manager.removeFavorite("blarg")
|
|
assert manager.materialsUpdated.emit.call_count == 2
|
|
application.getPreferences().setValue.assert_called_with("cura/favorite_materials", "")
|
|
assert manager.getFavorites() == set() |