from core.builtin_concepts import BuiltinConcepts from tests.TestUsingMemoryBasedSheerka import TestUsingMemoryBasedSheerka class TestSheerkaAdmin(TestUsingMemoryBasedSheerka): def test_i_can_get_last_ret(self): pass def test_i_can_get_last_error_ret(self): sheerka, context = self.init_concepts() # nothing in history last_error_ret = sheerka.last_error_ret(context) assert sheerka.isinstance(last_error_ret, BuiltinConcepts.RETURN_VALUE) assert not last_error_ret.status assert sheerka.isinstance(last_error_ret.body, BuiltinConcepts.NOT_FOUND) # only success in history r_success = sheerka.ret("Test", True, "success") sheerka.last_return_values.append([r_success]) last_error_ret = sheerka.last_error_ret(context) assert sheerka.isinstance(last_error_ret, BuiltinConcepts.RETURN_VALUE) assert not last_error_ret.status assert sheerka.isinstance(last_error_ret.body, BuiltinConcepts.NOT_FOUND) # at least on error r_failure = sheerka.ret("Test", False, "failure") sheerka.last_return_values.append([r_failure]) assert sheerka.last_error_ret(context) == r_failure # add another success and make sure we get the same error sheerka.last_return_values.append([r_success]) assert sheerka.last_error_ret(context) == r_failure # and I only get the last failure r_failure2 = sheerka.ret("Test", False, "another failure") sheerka.last_return_values.append([r_failure2]) assert sheerka.last_error_ret(context) == r_failure2 # but I still can get the previous error assert sheerka.last_error_ret(context, -2) == r_failure def test_i_can_get_last_error_ret_when_only_one_ret_has_failed(self): sheerka, context = self.init_concepts() r_success = sheerka.ret("Test", True, "success") r_failure = sheerka.ret("Test", False, "False1") sheerka.last_return_values.append([r_success, r_failure]) assert sheerka.last_error_ret(context) == r_failure def test_i_cannot_get_last_error_ret_when_too_many_errors(self): sheerka, context = self.init_concepts() r1 = sheerka.ret("Test", True, "success") r2 = sheerka.ret("Test", False, "False1") r3 = sheerka.ret("Test", False, "False2") sheerka.last_return_values.append([r1, r2, r3]) last_error_ret = sheerka.last_error_ret(context) assert sheerka.isinstance(last_error_ret, BuiltinConcepts.RETURN_VALUE) assert not last_error_ret.status assert sheerka.isinstance(last_error_ret.body, BuiltinConcepts.TOO_MANY_ERRORS) assert last_error_ret.body.body == [r2, r3]