def test_extra_key_in_fixture_element(simple_list_schema):
    """Missing data that was expected by the fixture represents a mismatch."""
    fixture: Dict = {
        "the_list": [
            {
                "some_text": "foo",
                "some_number": 27
            },
            {
                "some_text": "bar"
            }
        ]
    }
    actual: Dict = {
        "the_list": [
            {
                "some_text": "foo"
            },
            {
                "some_text": "bar"
            }
        ]
    }
    compare: CompareComplexVariable = CompareComplexVariable(simple_list_schema)
    assert compare(fixture, actual) is False
def test_fixture_none_raises(simple_list_schema):
    """This should simply never happen, because the comparison algorithm should never try to traverse a null as a
    folder."""
    compare: CompareComplexVariable = CompareComplexVariable(
        simple_list_schema)
    with pytest.raises(AssertionError):
        compare(None, {})
def test_nested_keyed_list_extra_value_in_fixture(keyed_list_in_list_schema):
    fixture: Dict = {
        "the_list": [
            {
                "the_keyed_list": {
                    "susan": {"some_text": "A"},
                    "bob": {"some_text": "B"}
                }
            },
            {
                "the_keyed_list": {
                    "steve": {"some_text": "C"},
                    "charlene": {"some_text": "D"}
                }
            }
        ]
    }
    actual: Dict = {
        "the_list": [
            {
                "the_keyed_list": {
                    "susan": {"some_text": "A"},
                    "bob": {"some_text": "B"}
                }
            },
            {
                "the_keyed_list": {
                    "charlene": {"some_text": "D"}
                }
            }
        ]
    }
    compare: CompareComplexVariable = CompareComplexVariable(keyed_list_in_list_schema)
    assert compare(fixture, actual) is False
def test_nested_list_actual_has_more_elements(list_in_list_schema):
    fixture: Dict = {
        "outer": [
            {
                "inner": [
                    {"some_text": "A"},
                    {"some_text": "B"}
                ]
            },
            {
                "inner": [
                    {"some_text": "D"}
                ]
            }
        ]
    }
    actual: Dict = {
        "outer": [
            {
                "inner": [
                    {"some_text": "A"},
                    {"some_text": "B"}
                ]
            },
            {
                "inner": [
                    {"some_text": "C"},
                    {"some_text": "D"}
                ]
            }
        ]
    }
    compare: CompareComplexVariable = CompareComplexVariable(list_in_list_schema)
    assert compare(fixture, actual) is False
def test_nested_folder_only_in_actual(folder_in_list_schema):
    """See note above about missing data."""
    fixture: Dict = {
        "the_list": [
            {},
            {
                "the_folder": {
                    "some_text": "bar"
                }
            }
        ]
    }
    actual: Dict = {
        "the_list": [
            {
                "the_folder": {
                    "some_text": "foo"
                }
            },
            {
                "the_folder": {
                    "some_text": "bar"
                }
            }
        ]
    }
    compare: CompareComplexVariable = CompareComplexVariable(folder_in_list_schema)
    assert compare(fixture, actual) is True
def test_nested_folder_contains_mismatch(folder_in_list_schema):
    fixture: Dict = {
        "the_list": [
            {
                "the_folder": {
                    "some_text": "FOO"
                }
            },
            {
                "the_folder": {
                    "some_text": "bar"
                }
            }
        ]
    }
    actual: Dict = {
        "the_list": [
            {
                "the_folder": {
                    "some_text": "foo"
                }
            },
            {
                "the_folder": {
                    "some_text": "bar"
                }
            }
        ]
    }
    compare: CompareComplexVariable = CompareComplexVariable(folder_in_list_schema)
    assert compare(fixture, actual) is False
Exemple #7
0
def test_triply_nested_folder_actual_has_extra(nested_folder_schema):
    actual: Dict = {
        "some_text": "Foo",
        "parent": {
            "some_text": "X",
            "child": {
                "some_text": "Y",
                "grandchild": {
                    "some_text": "Z"
                }
            }
        }
    }
    fixture: Dict = {
        "some_text": "Foo",
        "parent": {
            "some_text": "X",
            "child": {
                "some_text": "Y"
            }
        }
    }
    compare: CompareComplexVariable = CompareComplexVariable(
        nested_folder_schema)
    assert compare(fixture, actual) is True
def test_extra_key_in_actual_element(simple_list_schema):
    """Missing data in the FIXTURE represents lack of test coverage."""

    msg: str = """This test demonstrates a subtle limitation of the expected value comparison (EVC) system. The EVC
    allows a Polytropos user to create fixtures that do not cover every known variable, such that they do not need to be
    identical to the actual output in order to be failure-free. This is equivalent to incomplete test coverage in code.
    Without vastly complicating the EVC system, there is no way to track whether a particular nested variable was
    captured in one list item but not another. DO NOT assume that, because element 1 of the fixture has variable X and
    element 2 does not, the actual value of element 2 explicitly lacks variable X."""
    warnings.warn(msg, RuntimeWarning)

    fixture: Dict = {
        "the_list": [{
            "some_text": "foo"
        }, {
            "some_text": "bar",
            "some_number": 42
        }]
    }
    actual: Dict = {
        "the_list": [{
            "some_text": "foo",
            "some_number": 27
        }, {
            "some_text": "bar",
            "some_number": 42
        }]
    }
    compare: CompareComplexVariable = CompareComplexVariable(
        simple_list_schema)
    assert compare(fixture, actual) is True
def test_nested_keyed_list_only_in_actual(keyed_list_in_list_schema):
    """See warnings above about missing data"""
    fixture: Dict = {
        "the_list": [
            {
                "the_keyed_list": {
                    "susan": {"some_text": "A"},
                    "bob": {"some_text": "B"}
                }
            },
            {}
        ]
    }
    actual: Dict = {
        "the_list": [
            {
                "the_keyed_list": {
                    "susan": {"some_text": "A"},
                    "bob": {"some_text": "B"}
                }
            },
            {
                "the_keyed_list": {
                    "steve": {"some_text": "C"},
                    "charlene": {"some_text": "D"}
                }
            }
        ]
    }
    compare: CompareComplexVariable = CompareComplexVariable(keyed_list_in_list_schema)
    assert compare(fixture, actual) is True
def test_mismatch_in_one_element(simple_list_schema):
    fixture: Dict = {
        "the_list": [
            {
                "some_text": "foo",
                "some_number": 27
            },
            {
                "some_text": "BAR"
            }
        ]
    }
    actual: Dict = {
        "the_list": [
            {
                "some_text": "foo",
                "some_number": 27
            },
            {
                "some_text": "bar"
            }
        ]
    }
    compare: CompareComplexVariable = CompareComplexVariable(simple_list_schema)
    assert compare(fixture, actual) is False
Exemple #11
0
def test_nested_mismatch_on_lower_level(nested_folder_schema):
    fixture: Dict = {
        "some_text": "Foo",
        "parent": {
            "some_text": "X",
            "child": {
                "some_text": "Y",
                "grandchild": {
                    "some_text": "Z"
                }
            }
        }
    }
    actual: Dict = {
        "some_text": "Bar",
        "parent": {
            "some_text": "X",
            "child": {
                "some_text": "Y",
                "grandchild": {
                    "some_text": "Z"
                }
            }
        }
    }
    compare: CompareComplexVariable = CompareComplexVariable(
        nested_folder_schema)
    assert compare(fixture, actual) is False
def test_keyed_list_element_only_in_actual(keyed_list_in_list_schema):
    fixture: Dict = {
        "the_list": [
            {
                "the_keyed_list": {
                    "susan": {"some_text": "A"},
                    "bob": {"some_text": "B"}
                }
            },
            {
                "the_keyed_list": {
                    "steve": {},
                    "charlene": {"some_text": "D"}
                }
            }
        ]
    }
    actual: Dict = {
        "the_list": [
            {
                "the_keyed_list": {
                    "susan": {"some_text": "A"},
                    "bob": {"some_text": "B"}
                }
            },
            {
                "the_keyed_list": {
                    "steve": {"some_text": "C"},
                    "charlene": {"some_text": "D"}
                }
            }
        ]
    }
    compare: CompareComplexVariable = CompareComplexVariable(keyed_list_in_list_schema)
    assert compare(fixture, actual) is True
def test_nested_named_list_identical(named_list_in_list_schema):
    fixture: Dict = {
        "the_list": [{
            "the_named_list": {
                "susan": {
                    "some_text": "A"
                },
                "bob": {
                    "some_text": "B"
                }
            }
        }, {
            "the_named_list": {
                "rick": {
                    "some_text": "C"
                },
                "charlene": {
                    "some_text": "D"
                }
            }
        }]
    }
    actual: Dict = copy.deepcopy(fixture)
    compare: CompareComplexVariable = CompareComplexVariable(
        named_list_in_list_schema)
    assert compare(fixture, actual) is True
def test_nested_list_extra_value_in_actual(list_in_list_schema):
    """See warning above about missing data"""
    fixture: Dict = {
        "outer": [{
            "inner": [{
                "some_text": "A"
            }, {
                "some_text": "B"
            }]
        }, {
            "inner": [{}, {
                "some_text": "D"
            }]
        }]
    }
    actual: Dict = {
        "outer": [{
            "inner": [{
                "some_text": "A"
            }, {
                "some_text": "B"
            }]
        }, {
            "inner": [{
                "some_text": "C"
            }, {
                "some_text": "D"
            }]
        }]
    }
    compare: CompareComplexVariable = CompareComplexVariable(
        list_in_list_schema)
    assert compare(fixture, actual) is True
Exemple #15
0
def test_keyed_list_in_folder_mismatch(keyed_list_in_nested_folder_schema):
    fixture: Dict = {
        "parent": {
            "child": {
                "grandchild": {
                    "the_keyed_list": {
                        "Steve": {
                            "some_text": "Foo"
                        }
                    }
                }
            }
        }
    }
    actual: Dict = {
        "parent": {
            "child": {
                "grandchild": {
                    "the_keyed_list": {
                        "Steve": {
                            "some_text": "Bar"
                        }
                    }
                }
            }
        }
    }
    compare: CompareComplexVariable = CompareComplexVariable(
        keyed_list_in_nested_folder_schema)
    assert compare(fixture, actual) is False
def test_nested_list_extra_value_in_fixture(list_in_list_schema):
    fixture: Dict = {
        "outer": [
            {
                "inner": [
                    {"some_text": "A"},
                    {"some_text": "B"}
                ]
            },
            {
                "inner": [
                    {"some_text": "C"},
                    {"some_text": "D"}
                ]
            }
        ]
    }
    actual: Dict = {
        "outer": [
            {
                "inner": [
                    {"some_text": "A"},
                    {"some_text": "B"}
                ]
            },
            {
                "inner": [
                    {},
                    {"some_text": "D"}
                ]
            }
        ]
    }
    compare: CompareComplexVariable = CompareComplexVariable(list_in_list_schema)
    assert compare(fixture, actual) is False
def test_nested_folder_empty_in_fixture(folder_in_list_schema):
    """See warning above about missing data in the fixture."""
    fixture: Dict = {
        "the_list": [
            {
                "the_folder": {}
            },
            {
                "the_folder": {
                    "some_text": "bar"
                }
            }
        ]
    }
    actual: Dict = {
        "the_list": [
            {
                "the_folder": {
                    "some_text": "foo"
                }
            },
            {
                "the_folder": {
                    "some_text": "bar"
                }
            }
        ]
    }
    compare: CompareComplexVariable = CompareComplexVariable(folder_in_list_schema)
    assert compare(fixture, actual) is True
Exemple #18
0
def test_only_actual_has_folder_empty(simple_schema):
    """Missing data in the FIXTURE represents lack of test coverage."""
    fixture: Dict = {
        "some_text": "Foo",
    }
    actual: Dict = {"some_text": "Foo", "the_folder": {}}
    compare: CompareComplexVariable = CompareComplexVariable(simple_schema)
    assert compare(fixture, actual) is True
def test_different_number_empty_elements(simple_list_schema):
    fixture: Dict = {
        "the_list": [{}] * 3
    }
    actual: Dict = {
        "the_list": [{}] * 5
    }
    compare: CompareComplexVariable = CompareComplexVariable(simple_list_schema)
    assert compare(fixture, actual) is False
def test_empty_lists(simple_list_schema):
    fixture: Dict = {
        "the_list": []
    }
    actual: Dict = {
        "the_list": []
    }
    compare: CompareComplexVariable = CompareComplexVariable(simple_list_schema)
    assert compare(fixture, actual) is True
Exemple #21
0
    def _inspect_complex(self, data_type: str, f_val: Optional[Any], a_tree: Dict, path: ListType) -> None:
        assert f_val != POLYTROPOS_NA  # Should have been handled at _inspect
        a_val: Optional[Any] = nesteddicts.get(a_tree, path, default=POLYTROPOS_CONFIRMED_NA)
        if a_val == POLYTROPOS_CONFIRMED_NA:
            self._record_missing(path, data_type, json.dumps(f_val, sort_keys=True))
            return

        compare: CompareComplexVariable = CompareComplexVariable(self.schema)
        if compare(f_val, a_val, path=path):
            self._record_match(path, data_type, json.dumps(f_val, sort_keys=True))
        else:
            self._record_mismatch(path, data_type, json.dumps(f_val, sort_keys=True), json.dumps(a_val, sort_keys=True))
def test_fixture_has_more_elements(simple_list_schema):
    fixture: Dict = {"the_list": [{"some_text": "foo", "some_number": 27}]}
    actual: Dict = {
        "the_list": [{
            "some_text": "foo",
            "some_number": 27
        }, {
            "some_text": "bar"
        }]
    }
    compare: CompareComplexVariable = CompareComplexVariable(
        simple_list_schema)
    assert compare(fixture, actual) is False
def test_identical_simple_lists(simple_list_schema):
    fixture: Dict = {
        "the_list": [{
            "some_text": "foo",
            "some_number": 27
        }, {
            "some_text": "bar"
        }]
    }
    actual: Dict = copy.deepcopy(fixture)
    compare: CompareComplexVariable = CompareComplexVariable(
        simple_list_schema)
    assert compare(fixture, actual) is True
Exemple #24
0
def test_unrecognized_nested_folder_raises(nested_folder_schema):
    fixture: Dict = {
        "parent": {
            "not_a_thing": {
                "grandchild": {
                    "some_text": "Z"
                }
            }
        }
    }
    actual: Dict = copy.deepcopy(fixture)
    compare: CompareComplexVariable = CompareComplexVariable(
        nested_folder_schema)
    with pytest.raises(ValueError):
        compare(fixture, actual)
def test_nested_folder_identical(folder_in_list_schema):
    fixture: Dict = {
        "the_list": [{
            "the_folder": {
                "some_text": "foo"
            }
        }, {
            "the_folder": {
                "some_text": "bar"
            }
        }]
    }
    actual: Dict = copy.deepcopy(fixture)
    compare: CompareComplexVariable = CompareComplexVariable(
        folder_in_list_schema)
    assert compare(fixture, actual) is True
Exemple #26
0
def test_list_in_folder_identical(list_in_nested_folder_schema):
    fixture: Dict = {
        "parent": {
            "child": {
                "grandchild": {
                    "the_list": [{
                        "some_text": "Foo"
                    }]
                }
            }
        }
    }
    actual: Dict = copy.deepcopy(fixture)
    compare: CompareComplexVariable = CompareComplexVariable(
        list_in_nested_folder_schema)
    assert compare(fixture, actual) is True
def test_nested_named_list_key_mismatch(named_list_in_list_schema):
    fixture: Dict = {
        "the_list": [{
            "the_named_list": {
                "susan": {
                    "some_text": "A"
                },
                "bob": {
                    "some_text": "B"
                }
            }
        }, {
            "the_named_list": {
                "rick": {
                    "some_text": "C"
                },
                "charlene": {
                    "some_text": "D"
                }
            }
        }]
    }
    actual: Dict = {
        "the_list": [{
            "the_named_list": {
                "susan": {
                    "some_text": "A"
                },
                "bob": {
                    "some_text": "B"
                }
            }
        }, {
            "the_named_list": {
                "steve": {
                    "some_text": "C"
                },
                "charlene": {
                    "some_text": "D"
                }
            }
        }]
    }
    compare: CompareComplexVariable = CompareComplexVariable(
        named_list_in_list_schema)
    assert compare(fixture, actual) is False
Exemple #28
0
def test_triply_nested_folder_identical(nested_folder_schema):
    fixture: Dict = {
        "some_text": "Foo",
        "parent": {
            "some_text": "X",
            "child": {
                "some_text": "Y",
                "grandchild": {
                    "some_text": "Z"
                }
            }
        }
    }
    actual: Dict = copy.deepcopy(fixture)
    compare: CompareComplexVariable = CompareComplexVariable(
        nested_folder_schema)
    assert compare(fixture, actual) is True
def test_nested_list_identical(list_in_list_schema):
    fixture: Dict = {
        "outer": [
            {
                "inner": [
                    {"some_text": "A"},
                    {"some_text": "B"}
                ]
            },
            {
                "inner": [
                    {"some_text": "C"},
                    {"some_text": "D"}
                ]
            }
        ]
    }
    actual: Dict = copy.deepcopy(fixture)
    compare: CompareComplexVariable = CompareComplexVariable(list_in_list_schema)
    assert compare(fixture, actual) is True
Exemple #30
0
def test_unrecognized_folder_raises(simple_schema):
    fixture: Dict = {"not_a_thing": {"some_text": "Bar"}}
    actual: Dict = copy.deepcopy(fixture)
    compare: CompareComplexVariable = CompareComplexVariable(simple_schema)
    with pytest.raises(ValueError):
        compare(fixture, actual)