diff --git a/tests/Machines/TestVariantNode.py b/tests/Machines/TestVariantNode.py index 7c0d7c901d..88683f10ba 100644 --- a/tests/Machines/TestVariantNode.py +++ b/tests/Machines/TestVariantNode.py @@ -4,18 +4,34 @@ import pytest from cura.Machines.VariantNode import VariantNode -metadata_dict = {"fdmprinter": {"no_variant": [{"base_file": "material_1", "id": "material_1"}, {"base_file": "material_2", "id": "material_2"}]}, +instance_container_metadata_dict = {"fdmprinter": {"no_variant": [{"base_file": "material_1", "id": "material_1"}, {"base_file": "material_2", "id": "material_2"}]}, "machine_1": {"no_variant": [{"base_file": "material_1", "id": "material_1"}, {"base_file": "material_2", "id": "material_2"}], "Variant One": [{"base_file": "material_1", "id": "material_1"}, {"base_file": "material_2", "id": "material_2"}]}} +material_node_added_test_data = [({"type": "Not a material"}, ["material_1", "material_2"]), # Wrong type + ({"type": "material", "base_file": "material_3"}, ["material_1", "material_2"]), # material_3 is on the "NOPE" list. + ({"type": "material", "base_file": "material_4", "definition": "machine_3"}, ["material_1", "material_2"]), # Wrong machine + ({"type": "material", "base_file": "material_4", "definition": "machine_1"}, ["material_1", "material_2"]), # No variant + ({"type": "material", "base_file": "material_4", "definition": "machine_1", "variant": "Variant Three"}, ["material_1", "material_2"]), # Wrong variant + ({"type": "material", "base_file": "material_4", "definition": "machine_1", "variant": "Variant One"}, ["material_1", "material_2", "material_4"]) + ] + + +metadata_dict = {} + + def getMetadataEntrySideEffect(*args, **kwargs): + return metadata_dict.get(args[0]) + + +def getInstanceContainerSideEffect(*args, **kwargs): variant = kwargs.get("variant") definition = kwargs.get("definition") if variant is not None: - return metadata_dict.get(definition).get(variant) - return metadata_dict.get(definition).get("no_variant") + return instance_container_metadata_dict.get(definition).get(variant) + return instance_container_metadata_dict.get(definition).get("no_variant") @pytest.fixture @@ -28,15 +44,25 @@ def machine_node(): @pytest.fixture def container_registry(): result = MagicMock() - result.findInstanceContainersMetadata = MagicMock(side_effect = getMetadataEntrySideEffect) + result.findInstanceContainersMetadata = MagicMock(side_effect = getInstanceContainerSideEffect) result.findContainersMetadata = MagicMock(return_value = [{"name": "Variant One"}]) return result -def test_variantNodeInit(container_registry, machine_node): +def createMockedInstanceContainer(): + result = MagicMock() + result.getMetaDataEntry = MagicMock(side_effect=getMetadataEntrySideEffect) + return result + + +def createVariantNode(container_id, machine_node, container_registry): with patch("cura.Machines.VariantNode.MaterialNode"): # We're not testing the material node here, so patch it out. with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value=container_registry)): - node = VariantNode("variant_1", machine_node) + return VariantNode(container_id, machine_node) + + +def test_variantNodeInit(container_registry, machine_node): + node = createVariantNode("variant_1", machine_node, container_registry) assert "material_1" in node.materials assert "material_2" in node.materials @@ -45,10 +71,22 @@ def test_variantNodeInit(container_registry, machine_node): def test_variantNodeInit_excludedMaterial(container_registry, machine_node): machine_node.exclude_materials = ["material_1"] - with patch("cura.Machines.VariantNode.MaterialNode"): # We're not testing the material node here, so patch it out. - with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value=container_registry)): - node = VariantNode("variant_1", machine_node) + node = createVariantNode("variant_1", machine_node, container_registry) assert "material_1" not in node.materials assert "material_2" in node.materials assert len(node.materials) == 1 + + +@pytest.mark.parametrize("metadata,material_result_list", material_node_added_test_data) +def test_materialAdded(container_registry, machine_node, metadata, material_result_list): + variant_node = createVariantNode("machine_1", machine_node, container_registry) + machine_node.exclude_materials = ["material_3"] + with patch("cura.Machines.VariantNode.MaterialNode"): # We're not testing the material node here, so patch it out. + with patch.dict(metadata_dict, metadata): + mocked_container = createMockedInstanceContainer() + variant_node._materialAdded(mocked_container) + + assert len(material_result_list) == len(variant_node.materials) + for name in material_result_list: + assert name in variant_node.materials \ No newline at end of file