199 lines
8.7 KiB
Python
199 lines
8.7 KiB
Python
import pytest
|
|
|
|
from core.concept import Concept, ConceptParts
|
|
from core.global_symbols import NotFound
|
|
from core.sheerka.services.SheerkaVariableManager import SheerkaVariableManager
|
|
|
|
from tests.TestUsingFileBasedSheerka import TestUsingFileBasedSheerka
|
|
from tests.TestUsingMemoryBasedSheerka import TestUsingMemoryBasedSheerka
|
|
|
|
|
|
class TestSheerkaVariable(TestUsingMemoryBasedSheerka):
|
|
def test_i_can_record_and_load_a_constant(self):
|
|
sheerka = self.get_sheerka(cache_only=False)
|
|
context = self.get_context(sheerka)
|
|
|
|
sheerka.record_var(context, "TestSheerkaVariable", "my_variable", 1)
|
|
res = sheerka.load_var("TestSheerkaVariable", "my_variable")
|
|
assert res == 1
|
|
|
|
# I can persist in db
|
|
sheerka.om.commit(context)
|
|
|
|
assert sheerka.om.current_sdp().exists(SheerkaVariableManager.VARIABLES_ENTRY,
|
|
"TestSheerkaVariable|my_variable")
|
|
loaded = sheerka.om.current_sdp().get(SheerkaVariableManager.VARIABLES_ENTRY, "TestSheerkaVariable|my_variable")
|
|
assert loaded.event_id == context.event.get_digest()
|
|
assert loaded.key == "my_variable"
|
|
assert loaded.value == 1
|
|
assert loaded.who == "TestSheerkaVariable"
|
|
assert loaded.parents is None
|
|
|
|
def test_i_can_record_and_load_a_concept(self):
|
|
sheerka = self.get_sheerka()
|
|
context = self.get_context(sheerka)
|
|
|
|
concept = Concept("foo").set_value("a", "alpha").set_value(ConceptParts.BODY, 3.14)
|
|
|
|
sheerka.record_var(context, "TestSheerkaVariable", "my_variable", concept)
|
|
res = sheerka.load_var("TestSheerkaVariable", "my_variable")
|
|
|
|
assert res == concept
|
|
assert res.body == concept.body
|
|
assert res.a == concept.a
|
|
|
|
def test_i_can_delete_an_entry(self):
|
|
sheerka = self.get_sheerka()
|
|
context = self.get_context(sheerka)
|
|
|
|
concept = Concept("foo")
|
|
|
|
sheerka.record_var(context, "TestSheerkaVariable", "my_variable", concept)
|
|
assert sheerka.load_var("TestSheerkaVariable", "my_variable") == concept
|
|
|
|
sheerka.delete_var(context, "TestSheerkaVariable", "my_variable")
|
|
assert sheerka.load_var("TestSheerkaVariable", "my_variable") is NotFound
|
|
|
|
def test_i_can_set_and_get_a_value(self):
|
|
sheerka = self.get_sheerka(cache_only=False)
|
|
context = self.get_context(sheerka)
|
|
context.event.user_id = "Test_user"
|
|
|
|
sheerka.set_var(context, "my_variable", "my value")
|
|
res = sheerka.get_var(context, "my_variable")
|
|
assert res == "my value"
|
|
|
|
# I can persist in db
|
|
sheerka.om.commit(context)
|
|
|
|
assert sheerka.om.current_sdp().exists(SheerkaVariableManager.VARIABLES_ENTRY, "Test_user|my_variable")
|
|
loaded = sheerka.om.current_sdp().get(SheerkaVariableManager.VARIABLES_ENTRY, "Test_user|my_variable")
|
|
assert loaded.event_id == context.event.get_digest()
|
|
assert loaded.key == "my_variable"
|
|
assert loaded.value == "my value"
|
|
assert loaded.who == "Test_user"
|
|
assert loaded.parents is None
|
|
|
|
def test_i_can_record_and_load_internal_variables(self):
|
|
sheerka = self.get_sheerka(cache_only=False)
|
|
context = self.get_context(sheerka)
|
|
|
|
sheerka.record_internal_var(context, "TestSheerkaVariable", "my_variable", 1)
|
|
res = sheerka.load_internal_var("TestSheerkaVariable", "my_variable")
|
|
assert res == 1
|
|
|
|
sheerka.record_internal_var(context, "TestSheerkaVariable", "lambda", lambda x: x + 1)
|
|
res = sheerka.load_internal_var("TestSheerkaVariable", "lambda")
|
|
assert res(10) == 11
|
|
|
|
def test_i_can_record_and_load_in_multiple_ontology_layers(self):
|
|
sheerka = self.get_sheerka(cache_only=False)
|
|
context = self.get_context(sheerka)
|
|
|
|
sheerka.record_var(context, "TestSheerkaVariable", "my_variable", 1)
|
|
sheerka.record_internal_var(context, "TestSheerkaVariable", "lambda", lambda x: x + 1)
|
|
sheerka.om.commit(context)
|
|
|
|
sheerka.push_ontology(context, "new ontology")
|
|
sheerka.push_ontology(context, "another ontology")
|
|
|
|
# I can still access to the previous values
|
|
assert sheerka.load_var("TestSheerkaVariable", "my_variable") == 1
|
|
assert sheerka.load_internal_var("TestSheerkaVariable", "lambda")(10) == 11
|
|
|
|
# I can modify the current values
|
|
sheerka.record_var(context, "TestSheerkaVariable", "my_variable", 2)
|
|
sheerka.record_internal_var(context, "TestSheerkaVariable", "lambda", lambda x: x + 2)
|
|
sheerka.om.commit(context)
|
|
|
|
assert sheerka.load_var("TestSheerkaVariable", "my_variable") == 2
|
|
assert sheerka.load_internal_var("TestSheerkaVariable", "lambda")(10) == 12
|
|
|
|
# I can revert back
|
|
sheerka.pop_ontology()
|
|
assert sheerka.load_var("TestSheerkaVariable", "my_variable") == 1
|
|
assert sheerka.load_internal_var("TestSheerkaVariable", "lambda")(10) == 11
|
|
|
|
sheerka.pop_ontology()
|
|
assert sheerka.load_var("TestSheerkaVariable", "my_variable") == 1
|
|
assert sheerka.load_internal_var("TestSheerkaVariable", "lambda")(10) == 11
|
|
|
|
|
|
class TestSheerkaVariableUsingFileBasedSdp(TestUsingFileBasedSheerka):
|
|
|
|
def test_i_can_bound_variables_to_sheerka(self):
|
|
sheerka, context = self.init_test().unpack()
|
|
|
|
old_value = sheerka.enable_process_return_values
|
|
new_value = not old_value
|
|
sheerka.record_var(context, sheerka.name, "enable_process_return_values", new_value)
|
|
sheerka.om.commit(context)
|
|
|
|
assert sheerka.enable_process_return_values == new_value
|
|
|
|
# the modification is persisted upon new Sheerka creation
|
|
sheerka = self.new_sheerka_instance(False)
|
|
assert sheerka.load_var(sheerka.name, "enable_process_return_values") == new_value
|
|
assert sheerka.enable_process_return_values == new_value
|
|
|
|
# reset old value
|
|
sheerka.record_var(context, sheerka.name, "enable_process_return_values", old_value)
|
|
|
|
def test_i_can_bound_variables_to_sheerka_when_ontology_layer(self):
|
|
sheerka, context = self.init_test().unpack()
|
|
|
|
old_value = sheerka.enable_process_return_values
|
|
new_value = not old_value
|
|
sheerka.record_var(context, sheerka.name, "enable_process_return_values", new_value)
|
|
sheerka.om.commit(context)
|
|
|
|
# sanity
|
|
assert sheerka.enable_process_return_values == new_value
|
|
assert sheerka.load_var(sheerka.name, "enable_process_return_values") == new_value
|
|
|
|
# the modification is seen even when there is an ontology layer
|
|
sheerka.push_ontology(context, "new ontology")
|
|
sheerka = self.new_sheerka_instance(False)
|
|
assert sheerka.load_var(sheerka.name, "enable_process_return_values") == new_value
|
|
assert sheerka.enable_process_return_values == new_value
|
|
|
|
# reset old value
|
|
sheerka.record_var(context, sheerka.name, "enable_process_return_values", old_value)
|
|
|
|
# def test_i_can_get_the_parent_when_modified(self):
|
|
# sheerka = self.get_sheerka()
|
|
# context = self.get_context(sheerka)
|
|
#
|
|
# sheerka.record_var(context, "TestSheerkaVariable", "my_variable", 1)
|
|
# sheerka.record_var(context, "TestSheerkaVariable", "my_variable", 2)
|
|
# res = sheerka.load_var("TestSheerkaVariable", "my_variable")
|
|
# assert res == 2
|
|
#
|
|
# loaded = sheerka.om.current_sdp().get(SheerkaVariableManager.VARIABLES_ENTRY, "TestSheerkaVariable.my_variable")
|
|
# assert loaded.event_id == context.event.get_digest()
|
|
# assert loaded.key == "my_variable"
|
|
# assert loaded.value == 2
|
|
# assert loaded.who == "TestSheerkaVariable"
|
|
# assert loaded.parents == ['8c9ada7bf488d84229f6539f76042431638f16d600fe3b7ec7e7161043a40d59']
|
|
#
|
|
# parent = sheerka.om.current_sdp().load_obj(loaded.parents[0])
|
|
# assert parent.event_id == context.event.get_digest()
|
|
# assert parent.key == "my_variable"
|
|
# assert parent.value == 1
|
|
# assert parent.who == "TestSheerkaVariable"
|
|
# assert parent.parents is None
|
|
|
|
# def test_variable_is_not_persisted_if_the_value_is_the_same(self):
|
|
# sheerka = self.get_sheerka(singleton=True)
|
|
# context = self.get_context(sheerka)
|
|
#
|
|
# sheerka.record_var(context, "TestSheerkaVariable", "my_variable", 1)
|
|
# sheerka.record_var(context, "TestSheerkaVariable", "my_variable", 1)
|
|
#
|
|
# loaded = sheerka.om.current_sdp().get(SheerkaVariableManager.VARIABLES_ENTRY, "TestSheerkaVariable.my_variable")
|
|
# assert loaded.event_id == context.event.get_digest()
|
|
# assert loaded.key == "my_variable"
|
|
# assert loaded.value == 1
|
|
# assert loaded.who == "TestSheerkaVariable"
|
|
# assert loaded.parents is None
|