diff --git a/tests/Machines/TestQualityNode.py b/tests/Machines/TestQualityNode.py index 54266cb6ad..ffe897d203 100644 --- a/tests/Machines/TestQualityNode.py +++ b/tests/Machines/TestQualityNode.py @@ -1,50 +1,95 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + from unittest.mock import patch, MagicMock import pytest from cura.Machines.QualityNode import QualityNode - -instance_container_metadata_dict = {"fdmprinter": {"variant_1": {"material_1": [{"id": "intent_1"}, {"id": "intent_2"}]}}, - "machine_1": {"variant_2": {"material_2": [{"id": "intent_3"}, {"id": "intent_4"}]}}} - -metadata_dict = {} - - -def getMetadataEntrySideEffect(*args, **kwargs): - return metadata_dict.get(args[0]) - - -def createMockedInstanceContainer(container_id): - result = MagicMock() - result.getId = MagicMock(return_value=container_id) - result.getMetaDataEntry = MagicMock(side_effect=getMetadataEntrySideEffect) - return result - - -def getInstanceContainerSideEffect(*args, **kwargs): - - definition_dict = instance_container_metadata_dict.get(kwargs["definition"]) - variant_dict = definition_dict.get(kwargs["variant"]) - return variant_dict.get(kwargs["material"]) +## Metadata for hypothetical containers that get put in the registry. +metadatas = [ + { + "id": "matching_intent", # Matches our query. + "type": "intent", + "definition": "correct_definition", + "variant": "correct_variant", + "material": "correct_material", + "quality_type": "correct_quality_type" + }, + { + "id": "matching_intent_2", # Matches our query as well. + "type": "intent", + "definition": "correct_definition", + "variant": "correct_variant", + "material": "correct_material", + "quality_type": "correct_quality_type" + }, + { + "id": "bad_type", + "type": "quality", # Doesn't match because it's not an intent. + "definition": "correct_definition", + "variant": "correct_variant", + "material": "correct_material", + "quality_type": "correct_quality_type" + }, + { + "id": "bad_definition", + "type": "intent", + "definition": "wrong_definition", # Doesn't match on the definition. + "variant": "correct_variant", + "material": "correct_material", + "quality_type": "correct_quality_type" + }, + { + "id": "bad_variant", + "type": "intent", + "definition": "correct_definition", + "variant": "wrong_variant", # Doesn't match on the variant. + "material": "correct_material", + "quality_type": "correct_quality_type" + }, + { + "id": "bad_material", + "type": "intent", + "definition": "correct_definition", + "variant": "correct_variant", + "material": "wrong_material", # Doesn't match on the material. + "quality_type": "correct_quality_type" + }, + { + "id": "bad_quality", + "type": "intent", + "definition": "correct_definition", + "variant": "correct_variant", + "material": "correct_material", + "quality_type": "wrong_quality_type" # Doesn't match on the quality type. + }, + { + "id": "quality_1", + "quality_type": "correct_quality_type", + "material": "correct_material" + } +] @pytest.fixture def container_registry(): result = MagicMock() - result.findInstanceContainersMetadata = MagicMock(side_effect=getInstanceContainerSideEffect) + def findContainersMetadata(**kwargs): + return [metadata for metadata in metadatas if kwargs.items() <= metadata.items()] + result.findContainersMetadata = findContainersMetadata + result.findInstanceContainersMetadata = findContainersMetadata return result - def test_qualityNode_machine_1(container_registry): material_node = MagicMock() - material_node.variant.machine.quality_definition = "machine_1" - material_node.variant.variant_name = "variant_2" - material_node.base_file = "material_2" + material_node.variant.machine.quality_definition = "correct_definition" + material_node.variant.variant_name = "correct_variant" with patch("cura.Machines.QualityNode.IntentNode"): - with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value=container_registry)): + with patch("UM.Settings.ContainerRegistry.ContainerRegistry.getInstance", MagicMock(return_value = container_registry)): node = QualityNode("quality_1", material_node) assert len(node.intents) == 3 - assert "intent_3" in node.intents - assert "intent_4" in node.intents + assert "matching_intent" in node.intents + assert "matching_intent_2" in node.intents assert "empty_intent" in node.intents \ No newline at end of file