diff --git a/tests/Machines/TestMachineNode.py b/tests/Machines/TestMachineNode.py new file mode 100644 index 0000000000..d0fe8c65ba --- /dev/null +++ b/tests/Machines/TestMachineNode.py @@ -0,0 +1,61 @@ +from unittest.mock import patch, MagicMock +import pytest + +from UM.Settings.Interfaces import ContainerInterface +from cura.Machines.MachineNode import MachineNode + + +machine_node_variant_added_test_data = [({"type": "Not a variant!"}, ["Variant One", "Variant Two"]), # Wrong type + ({"type": "variant", "name": "Variant One"}, ["Variant One", "Variant Two"]), # Name already added + ({"type": "variant", "name": "Variant Three", "hardware_type": "Not a nozzle"}, ["Variant One", "Variant Two"]), # Wrong hardware type + ({"type": "variant", "name": "Variant Three", "hardware_type": "nozzle", "definition": "machine_3"}, ["Variant One", "Variant Two"]), # Wrong definition ID + ({"type": "variant", "name": "Variant Three", "hardware_type": "nozzle", "definition": "machine_1"}, ["Variant One", "Variant Two", "Variant Three"])] # Yay! It's finally added + + +metadata_dict = {} + + +@pytest.fixture +def container_registry(): + result = MagicMock() + result.findInstanceContainersMetadata = MagicMock(return_value = [{"id": "variant_1", "name": "Variant One"}, {"id": "variant_2", "name": "Variant Two"}]) + return result + + +def getMetadataEntrySideEffect(*args, **kwargs): + return metadata_dict.get(args[0]) + + +def createMockedInstanceContainer(): + result = MagicMock(spec = ContainerInterface) + result.getMetaDataEntry = MagicMock(side_effect=getMetadataEntrySideEffect) + return result + + +def createMachineNode(container_id, container_registry): + with patch("cura.Machines.MachineNode.VariantNode"): # We're not testing the variant node here, so patch it out. + with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value=container_registry)): + return MachineNode(container_id) + + +def test_machineNodeInit(container_registry): + machine_node = createMachineNode("machine_1", container_registry) + + # As variants get stored by name, we want to check if those get added. + assert "Variant One" in machine_node.variants + assert "Variant Two" in machine_node.variants + assert len(machine_node.variants) == 2 # And ensure that *only* those two got added. + + +@pytest.mark.parametrize("metadata,variant_result_list", machine_node_variant_added_test_data) +def test_machineNodeVariantAdded(container_registry, metadata, variant_result_list): + machine_node = createMachineNode("machine_1", container_registry) + + with patch("cura.Machines.MachineNode.VariantNode"): # We're not testing the variant node here, so patch it out. + with patch.dict(metadata_dict, metadata): + mocked_container = createMockedInstanceContainer() + machine_node._variantAdded(mocked_container) + + assert len(variant_result_list) == len(machine_node.variants) + for name in variant_result_list: + assert name in machine_node.variants \ No newline at end of file