Simplify quality node intents list test

Not a whole lot of mocking.
I also added a lot of extra instance containers that should NOT match.

Added during testing & tooling.
This commit is contained in:
Ghostkeeper 2019-09-27 16:04:49 +02:00
parent 900761b373
commit 45f3b6eeb2
No known key found for this signature in database
GPG Key ID: 86BEF881AE2CF276

View File

@ -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 from unittest.mock import patch, MagicMock
import pytest import pytest
from cura.Machines.QualityNode import QualityNode from cura.Machines.QualityNode import QualityNode
## Metadata for hypothetical containers that get put in the registry.
instance_container_metadata_dict = {"fdmprinter": {"variant_1": {"material_1": [{"id": "intent_1"}, {"id": "intent_2"}]}}, metadatas = [
"machine_1": {"variant_2": {"material_2": [{"id": "intent_3"}, {"id": "intent_4"}]}}} {
"id": "matching_intent", # Matches our query.
metadata_dict = {} "type": "intent",
"definition": "correct_definition",
"variant": "correct_variant",
def getMetadataEntrySideEffect(*args, **kwargs): "material": "correct_material",
return metadata_dict.get(args[0]) "quality_type": "correct_quality_type"
},
{
def createMockedInstanceContainer(container_id): "id": "matching_intent_2", # Matches our query as well.
result = MagicMock() "type": "intent",
result.getId = MagicMock(return_value=container_id) "definition": "correct_definition",
result.getMetaDataEntry = MagicMock(side_effect=getMetadataEntrySideEffect) "variant": "correct_variant",
return result "material": "correct_material",
"quality_type": "correct_quality_type"
},
def getInstanceContainerSideEffect(*args, **kwargs): {
"id": "bad_type",
definition_dict = instance_container_metadata_dict.get(kwargs["definition"]) "type": "quality", # Doesn't match because it's not an intent.
variant_dict = definition_dict.get(kwargs["variant"]) "definition": "correct_definition",
return variant_dict.get(kwargs["material"]) "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 @pytest.fixture
def container_registry(): def container_registry():
result = MagicMock() 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 return result
def test_qualityNode_machine_1(container_registry): def test_qualityNode_machine_1(container_registry):
material_node = MagicMock() material_node = MagicMock()
material_node.variant.machine.quality_definition = "machine_1" material_node.variant.machine.quality_definition = "correct_definition"
material_node.variant.variant_name = "variant_2" material_node.variant.variant_name = "correct_variant"
material_node.base_file = "material_2"
with patch("cura.Machines.QualityNode.IntentNode"): 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) node = QualityNode("quality_1", material_node)
assert len(node.intents) == 3 assert len(node.intents) == 3
assert "intent_3" in node.intents assert "matching_intent" in node.intents
assert "intent_4" in node.intents assert "matching_intent_2" in node.intents
assert "empty_intent" in node.intents assert "empty_intent" in node.intents