Refactored Caching, Refactored BnfNodeParser, Introduced Sphinx
This commit is contained in:
@@ -1,96 +1,79 @@
|
||||
import pytest
|
||||
from core.builtin_concepts import BuiltinConcepts
|
||||
from core.concept import Concept, ConceptParts
|
||||
from core.sheerka.Sheerka import Sheerka
|
||||
|
||||
from tests.TestUsingFileBasedSheerka import TestUsingFileBasedSheerka
|
||||
from tests.TestUsingMemoryBasedSheerka import TestUsingMemoryBasedSheerka
|
||||
|
||||
|
||||
class TestSheerkaModifyConcept(TestUsingMemoryBasedSheerka):
|
||||
|
||||
def test_i_can_modify_a_concept(self):
|
||||
sheerka, context, foo, bar = self.init_concepts("foo", "bar", create_new=True)
|
||||
sheerka, context, foo, bar = self.init_concepts("foo", "bar", create_new=True, cache_only=False)
|
||||
|
||||
foo_instance = sheerka.new("foo")
|
||||
foo_instance.metadata.body = "value" # modify metadata
|
||||
foo_instance.set_prop(BuiltinConcepts.ISA, bar) # modify property
|
||||
foo_instance.set_metadata_value(ConceptParts.BODY, "body value") # modify value
|
||||
foo_instance.metadata.body = "metadata value" # modify metadata
|
||||
foo_instance.def_var("var_name", "default value") # modify definition of variables
|
||||
foo_instance.add_prop(BuiltinConcepts.ISA, bar) # modify property
|
||||
foo_instance.set_value(ConceptParts.BODY, "body value") # modify value
|
||||
foo_instance.set_value("var_name", "var value") # modify value
|
||||
res = sheerka.modify_concept(context, foo_instance)
|
||||
|
||||
assert res.status
|
||||
assert sheerka.isinstance(res.body, BuiltinConcepts.NEW_CONCEPT)
|
||||
assert res.body.body.metadata.body == "value"
|
||||
assert res.body.body.get_prop(BuiltinConcepts.ISA) == bar
|
||||
assert res.body.body.metadata.body == "metadata value"
|
||||
assert res.body.body.metadata.variables == [("var_name", "default value")]
|
||||
assert res.body.body.get_prop(BuiltinConcepts.ISA) == {bar}
|
||||
assert res.body.body.body == "body value"
|
||||
assert res.body.body.get_value("var_name") == "var value"
|
||||
|
||||
# test that object
|
||||
sheerka.reset_cache()
|
||||
foo_from_sheerka = sheerka.new("foo")
|
||||
assert foo_from_sheerka.metadata.body == "value"
|
||||
assert foo_from_sheerka.get_prop(BuiltinConcepts.ISA) == bar
|
||||
foo_from_sheerka = sheerka.get_by_key("foo")
|
||||
assert foo_from_sheerka.metadata.body == "metadata value"
|
||||
assert foo_from_sheerka.metadata.variables == [("var_name", "default value")]
|
||||
assert foo_from_sheerka.get_prop(BuiltinConcepts.ISA) == {bar}
|
||||
assert foo_from_sheerka.body == "body value"
|
||||
assert foo_from_sheerka.get_value("var_name") == "var value"
|
||||
|
||||
# test that ref by id is updated
|
||||
sheerka.reset_cache()
|
||||
foo_from_sheerka = sheerka.get_by_id(foo.id)
|
||||
assert foo_from_sheerka.metadata.body == "value"
|
||||
assert foo_from_sheerka.get_prop(BuiltinConcepts.ISA) == bar
|
||||
assert foo_from_sheerka.body == "body value"
|
||||
# other caches are also updated
|
||||
assert sheerka.get_by_id(foo.id).metadata.body == "metadata value"
|
||||
assert sheerka.get_by_name(foo.name).metadata.body == "metadata value"
|
||||
assert sheerka.get_by_hash(foo_instance.get_definition_hash()).metadata.body == "metadata value"
|
||||
|
||||
# test that ref by name is updated
|
||||
sheerka.reset_cache()
|
||||
foo_from_sheerka = sheerka.get_by_name(foo.name)
|
||||
assert foo_from_sheerka.metadata.body == "value"
|
||||
assert foo_from_sheerka.get_prop(BuiltinConcepts.ISA) == bar
|
||||
assert foo_from_sheerka.body == "body value"
|
||||
|
||||
# test that ref by hash is updated
|
||||
foo_from_sdp = sheerka.sdp.get(Sheerka.CONCEPTS_BY_HASH_ENTRY, foo_instance.get_definition_hash())
|
||||
assert foo_from_sdp.metadata.body == "value"
|
||||
assert foo_from_sdp.get_prop(BuiltinConcepts.ISA) == bar
|
||||
assert foo_from_sdp.body == "body value"
|
||||
|
||||
# previous ref by hash is removed (since that definition hash has changed)
|
||||
with pytest.raises(IndexError):
|
||||
sheerka.sdp.get(Sheerka.CONCEPTS_BY_HASH_ENTRY, foo_instance.get_original_definition_hash())
|
||||
|
||||
def test_i_can_modify_concept_modifying_only_properties_and_body(self):
|
||||
sheerka, context, foo, bar = self.init_concepts("foo", "bar", create_new=True)
|
||||
|
||||
foo_instance = sheerka.new("foo")
|
||||
foo_instance.set_prop(BuiltinConcepts.ISA, bar)
|
||||
foo_instance.set_metadata_value(ConceptParts.BODY, "body value")
|
||||
res = sheerka.modify_concept(context, foo_instance)
|
||||
|
||||
assert res.status
|
||||
|
||||
foo_from_sheerka = sheerka.new("foo")
|
||||
assert foo_from_sheerka.get_prop(BuiltinConcepts.ISA) == bar
|
||||
assert foo_from_sheerka.body == "body value"
|
||||
|
||||
def test_cache_is_updated_when_a_concept_is_modified(self):
|
||||
sheerka, context, foo = self.init_concepts("foo", create_new=True)
|
||||
|
||||
foo_instance = sheerka.new("foo")
|
||||
foo_instance.metadata.body = "value"
|
||||
res = sheerka.modify_concept(context, foo_instance)
|
||||
assert res.status
|
||||
|
||||
foo_from_sheerka = sheerka.get("foo")
|
||||
assert foo_from_sheerka.metadata.body == "value"
|
||||
|
||||
foo_by_id_from_sheerka = sheerka.get_by_id(foo.id)
|
||||
assert foo_by_id_from_sheerka.metadata.body == "value"
|
||||
# sdp can be updated
|
||||
sheerka.cache_manager.commit(context)
|
||||
from_sdp = sheerka.sdp.get(sheerka.CONCEPTS_BY_ID_ENTRY, foo.id)
|
||||
assert from_sdp.metadata.body == "metadata value"
|
||||
assert from_sdp.metadata.variables == [("var_name", "default value")]
|
||||
assert from_sdp.get_prop(BuiltinConcepts.ISA) == {bar}
|
||||
assert from_sdp.body == "body value"
|
||||
assert from_sdp.get_value("var_name") == "var value"
|
||||
|
||||
def test_i_cannot_modify_a_concept_that_does_not_exists(self):
|
||||
sheerka, context, foo = self.init_concepts("foo", create_new=False)
|
||||
sheerka, context = self.init_concepts()
|
||||
|
||||
foo_instance = sheerka.new("foo")
|
||||
foo_instance.metadata.body = "value"
|
||||
res = sheerka.modify_concept(context, foo_instance)
|
||||
foo = Concept("foo").init_key()
|
||||
sheerka.set_id_if_needed(foo, False)
|
||||
|
||||
res = sheerka.modify_concept(context, foo)
|
||||
assert not res.status
|
||||
assert sheerka.isinstance(res.body, BuiltinConcepts.UNKNOWN_CONCEPT)
|
||||
assert res.body.body.key == foo.key
|
||||
assert res.body.body == ("id", foo.id)
|
||||
|
||||
def test_i_cannot_modify_a_concept_that_returns_an_error(self):
|
||||
sheerka, context = self.init_concepts()
|
||||
|
||||
foo = Concept("foo").init_key()
|
||||
res = sheerka.modify_concept(context, foo)
|
||||
|
||||
assert not res.status
|
||||
assert sheerka.isinstance(res.body, BuiltinConcepts.ERROR)
|
||||
|
||||
def test_i_cannot_modify_if_the_concept_has_not_changed(self):
|
||||
sheerka, context, foo = self.init_concepts("foo", create_new=True)
|
||||
res = sheerka.modify_concept(context, foo)
|
||||
|
||||
assert not res.status
|
||||
assert sheerka.isinstance(res.body, BuiltinConcepts.CONCEPT_ALREADY_DEFINED)
|
||||
|
||||
def test_i_can_modify_a_concept_that_is_in_a_list(self):
|
||||
sheerka, context, foo1, foo2 = self.init_concepts(
|
||||
@@ -105,7 +88,19 @@ class TestSheerkaModifyConcept(TestUsingMemoryBasedSheerka):
|
||||
assert sheerka.isinstance(res.body, BuiltinConcepts.NEW_CONCEPT)
|
||||
assert res.body.body.metadata.body == "value"
|
||||
|
||||
sheerka.reset_cache()
|
||||
foo_from_sheerka = sheerka.new("foo")
|
||||
assert foo_from_sheerka[0].metadata.body == "1"
|
||||
assert foo_from_sheerka[1].metadata.body == "value"
|
||||
|
||||
|
||||
class TestSheerkaModifyConceptUsingFile(TestUsingFileBasedSheerka):
|
||||
|
||||
def test_i_can_modify_a_concept_from_a_new_sheerka(self):
|
||||
sheerka, context, foo = self.init_concepts("foo", create_new=True)
|
||||
sheerka.cache_manager.commit(context)
|
||||
|
||||
sheerka = self.get_sheerka()
|
||||
foo.add_prop("a", "b")
|
||||
res = sheerka.modify_concept(context, foo)
|
||||
|
||||
assert res.status
|
||||
|
||||
Reference in New Issue
Block a user