import pytest from base import BaseTest, DummyObj from caching.FastCache import FastCache from core.ExecutionContext import ContextActions from services.SheerkaMemory import SheerkaMemory class TestSheerkaEngine(BaseTest): @pytest.fixture() def service(self, sheerka): return SheerkaMemory(sheerka) # I want a new instance to keep Sheerka clean (when I update stm) def test_i_can_add_to_global_short_term_memory(self, service): dummy = DummyObj() service.add_to_short_term_memory(None, "a", dummy) assert service.short_term_objects.copy() == {'global': {'a': dummy}} def test_i_can_add_and_get_stm_data(self, context, service): sub_context = context.push("TestSheerkaEngine", ContextActions.TESTING, None) service.add_to_short_term_memory(None, "a", "global level") service.add_to_short_term_memory(context, "a", "context level") service.add_to_short_term_memory(sub_context, "a", "sub context level") assert service.get_from_short_term_memory(sub_context, "a") == "sub context level" assert service.get_from_short_term_memory(context, "a") == "context level" assert service.get_from_short_term_memory(None, "a") == "global level" def test_i_can_list_stm_data(self, context, service): sub_context = context.push("TestSheerkaEngine", ContextActions.TESTING, None) service.add_to_short_term_memory(None, "a", "global a") service.add_to_short_term_memory(None, "b", "global b") service.add_to_short_term_memory(context, "a", "context a") service.add_to_short_term_memory(context, "c", "context c") service.add_to_short_term_memory(sub_context, "d", "sub context d") service.add_to_short_term_memory(sub_context, "a", "sub context a") assert service.list_short_term_memory(sub_context) == {"a": "sub context a", "b": "global b", "c": "context c", "d": "sub context d"} assert service.list_short_term_memory(context) == {"a": "context a", "b": "global b", "c": "context c"} assert service.list_short_term_memory(None) == {"a": "global a", "b": "global b"} def test_i_can_list_stm_data_when_context_have_no_entry(self, context, service): sub_context = context.push("TestSheerkaEngine", ContextActions.TESTING, None) service.add_to_short_term_memory(sub_context, "d", "sub context d") service.add_to_short_term_memory(sub_context, "a", "sub context a") assert service.list_short_term_memory(sub_context) == {"a": "sub context a", "d": "sub context d"} assert service.list_short_term_memory(context) == {} assert service.list_short_term_memory(None) == {} def test_i_value_are_removed_when_cache_is_full(self, context, service): service.short_term_objects = FastCache(3) context1 = context.push("TestSheerkaEngine", ContextActions.TESTING, None) context2 = context.push("TestSheerkaEngine", ContextActions.TESTING, None) context3 = context.push("TestSheerkaEngine", ContextActions.TESTING, None) service.add_to_short_term_memory(context, "a", "context") service.add_to_short_term_memory(context1, "b", "context 1") service.add_to_short_term_memory(context2, "c", "context 2") assert context.id in service.short_term_objects service.add_to_short_term_memory(context3, "d", "context 3") assert context.id not in service.short_term_objects