import pytest from core.concept import Concept @pytest.mark.parametrize("name, variables, expected", [ ("my name is a", ["a"], "my name is __var__0"), ("a b c d", ["b", "c"], "a __var__0 __var__1 d"), ("a 'b c' d", ["b", "c"], "a b c d"), ("a | b", ["a", "b"], "__var__0 | __var__1"), ("a b a c", ["a", "b"], "__var__0 __var__1 __var__0 c"), ("a b a c", ["b", "a"], "__var__1 __var__0 __var__1 c"), ]) def test_i_can_get_concept_key(name, variables, expected): concept = Concept(name) for v in variables: concept.set_prop(v, None) concept.init_key() assert concept.metadata.key == expected def test_key_does_not_use_variable_when_definition_is_set(): concept = Concept("plus").set_prop('plus') concept.init_key() assert concept.metadata.key == "plus" def test_i_can_serialize(): """ Test concept.to_dict() :return: """ concept = Concept( name="concept_name", is_builtin=True, is_unique=True, key="concept_key", body="definition of the body", where="definition of the where", pre="definition of the pre", post="definition of the post", definition="bnf definition", definition_type="def type", desc="this this the desc", id="123456" ).set_prop("a", 10).set_prop("b", None) to_dict = concept.to_dict() assert to_dict == { 'body': 'definition of the body', 'definition': 'bnf definition', 'definition_type': 'def type', 'desc': 'this this the desc', 'id': '123456', 'is_builtin': True, 'is_unique': True, 'key': 'concept_key', 'name': 'concept_name', 'post': 'definition of the post', 'pre': 'definition of the pre', 'props': [('a', 10), ('b', None)], 'where': 'definition of the where' } def test_i_can_deserialize(): """ Test concept.from_dict() :return: """ from_dict = { 'body': 'definition of the body', 'definition': 'bnf definition', 'definition_type': 'def type', 'desc': 'this this the desc', 'id': '123456', 'is_builtin': True, 'is_unique': True, 'key': 'concept_key', 'name': 'concept_name', 'post': 'definition of the post', 'pre': 'definition of the pre', 'props': [('a', 10), ('b', None)], 'where': 'definition of the where' } concept = Concept().from_dict(from_dict) assert concept == Concept( name="concept_name", is_builtin=True, is_unique=True, key="concept_key", body="definition of the body", where="definition of the where", pre="definition of the pre", post="definition of the post", definition="bnf definition", definition_type="def type", desc="this this the desc", id="123456" ).set_prop("a", 10).set_prop("b", None) def test_i_can_compare_concept_with_circular_reference(): foo = Concept("foo") foo.metadata.body = foo assert foo == foo def test_i_can_compare_concept_with_sophisticated_circular_reference(): foo = Concept("foo") bar = Concept("foo", body=foo) baz = Concept("foo", body=bar) foo.metadata.body = baz assert foo != bar def test_i_can_compare_concept_with_sophisticated_circular_reference_in_other_metadata(): foo = Concept("foo") bar = Concept("foo", pre=foo) baz = Concept("foo", pre=bar) foo.metadata.pre = baz assert foo != bar