Ejemplo n.º 1
0
    def test_resolve_with_defaults(self):
        root = TemplateNode()
        self.assertIsNotNone(root)
        self.assertIsNotNone(root.children)
        self.assertEqual(len(root.children), 0)

        node = TemplateInputNode()
        self.assertIsNotNone(node)

        root.append(node)
        self.assertEqual(len(root.children), 1)
        self.assertEqual(0, node.index)

        conversation = Conversation(self._client_context)

        question = Question.create_from_text(
            self._client_context, "Hello world",
            self._client_context.bot.sentence_splitter)
        question.current_sentence()._response = "Hello matey"
        conversation.record_dialog(question)

        self._client_context.bot._conversation_mgr._conversations[
            "testid"] = conversation

        response = root.resolve(self._client_context)
        self.assertIsNotNone(response)
        self.assertEqual(response, "Hello world")
Ejemplo n.º 2
0
    def test_store_logs(self):
        self.tearDown()

        config = FileStorageConfiguration()
        config.logs_storage._dirs = [self._tmpdir]

        engine = FileStorageEngine(config)
        engine.initialise()
        store = FileLogsStore(engine)
        self.assertEqual(store.storage_engine, engine)

        store.empty()

        client = TestClient()
        client_context = client.create_client_context("user1")
        conversation = Conversation(client_context)

        error_log = {"error": "logger ERROR log"}
        warning_log = {"warning": "logger WARNING log"}
        info_log = {"info": "logger INFO log"}
        debug_log = {"debug": "logger DEBUG log"}

        conversation.append_log(error_log)
        conversation.append_log(warning_log)
        conversation.append_log(info_log)
        conversation.append_log(debug_log)

        store.store_logs(client_context, conversation)

        store.empty()
Ejemplo n.º 3
0
    def test_attrib_with_html(self):
        template = ET.fromstring("""
            <template>
                <a target="_new" href="http://www.google.com/search?q=&lt;star /&gt;"> Google Search </a>
            </template>
            """)

        conversation = Conversation(self._client_context)
        question = Question.create_from_text(
            self._client_context, "GOOGLE AIML",
            self._client_context.bot.sentence_splitter)
        question.current_sentence()._response = "OK"
        conversation.record_dialog(question)
        match = PatternOneOrMoreWildCardNode("*")
        context = MatchContext(max_search_depth=100, max_search_timeout=-1)
        context.add_match(Match(Match.WORD, match, "AIML"))
        question.current_sentence()._matched_context = context
        self._client_context.bot._conversation_mgr._conversations[
            "testid"] = conversation

        ast = self._graph.parse_template_expression(template)
        self.assertIsNotNone(ast)
        self.assertIsInstance(ast, TemplateNode)
        self.assertIsNotNone(ast.children)
        self.assertEqual(len(ast.children), 1)

        xml_node = ast.children[0]
        self.assertIsNotNone(xml_node)
        self.assertIsInstance(xml_node, TemplateXMLNode)

        attribs = xml_node.attribs
        self.assertEqual(2, len(attribs))

        self.assertIsInstance(attribs['target'], TemplateWordNode)
        target = attribs['target']
        self.assertEqual(len(target.children), 0)
        self.assertEqual("_new", target.word)

        self.assertIsInstance(attribs['href'], TemplateNode)
        href = attribs['href']
        self.assertEqual(len(href.children), 3)

        self.assertIsInstance(href.children[0], TemplateWordNode)
        self.assertEqual('http://www.google.com/search?q=',
                         href.children[0].word)

        self.assertIsInstance(href.children[1], TemplateNode)
        self.assertEqual(1, len(href.children[1].children))
        star = href.children[1].children[0]
        self.assertIsInstance(star, TemplateStarNode)

        self.assertIsInstance(href.children[2], TemplateWordNode)
        self.assertEqual('', href.children[2].word)

        result = xml_node.resolve(self._client_context)
        self.assertIsNotNone(result)
        self.assertEqual(
            result,
            '<a target="_new" href="http://www.google.com/search?q=AIML">Google Search</a>'
        )
    def assert_modify_conversation_data(self, store):

        client = TestClient()
        client_context = client.create_client_context("user1")

        conversation = Conversation(client_context)

        question1 = Question.create_from_text(client_context, "Hello There")
        question1.sentence(0).response = "Hi"
        conversation.record_dialog(question1)

        store.modify_conversation_data(client_context, conversation)
        store.commit()

        debugInfo, _ = store.debug_conversation_data(client_context)
        self.assertIsNotNone(debugInfo)
        self.assertIsNotNone(debugInfo['conversations'])
        conversations = debugInfo['conversations']
        self.assertIsNotNone(conversations['questions'])
        self.assertEqual(1, len(conversations['questions']))
        question = conversations['questions'][0]
        self.assertEqual(1, len(question['sentences']))
        sentence = question['sentences'][0]
        self.assertEqual("Hello There", sentence['question'])
        self.assertEqual("Hi", sentence['response'])
Ejemplo n.º 5
0
    def assert_conversation_storage(self,
                                    store,
                                    can_empty=True,
                                    test_load=True):

        if can_empty is True:
            store.empty()

        client = TestClient()
        client_context = client.create_client_context("user1")

        conversation = Conversation(client_context)

        question1 = Question.create_from_text(client_context, "Hello There")
        question1.sentence(0).response = "Hi"
        conversation.record_dialog(question1)

        store.store_conversation(client_context, conversation)
        store.commit()

        if test_load is True:
            conversation2 = Conversation(client_context)
            store.load_conversation(client_context, conversation2)

            self.assertEqual(1, len(conversation2.questions))
            self.assertEqual(1, len(conversation2.questions[0].sentences))
            self.assertEqual("Hello There",
                             conversation2.questions[0].sentences[0].text())
            self.assertEqual("Hi",
                             conversation2.questions[0].sentences[0].response)
Ejemplo n.º 6
0
    def test_load_logs(self):
        config = RedisStorageConfiguration()
        engine = RedisStorageEngine(config)
        engine.initialise()
        store = RedisLogsStore(engine)

        client = TestClient()
        client_context = client.create_client_context("user1")
        conversation = Conversation(client_context)

        error_log = {"error": "logger ERROR log"}
        warning_log = {"warning": "logger WARNING log"}
        info_log = {"info": "logger INFO log"}
        debug_log = {"debug": "logger DEBUG log"}

        conversation.append_log(error_log)
        conversation.append_log(warning_log)
        conversation.append_log(info_log)
        conversation.append_log(debug_log)

        store.store_logs(client_context, conversation)

        logInfo = store.load_logs(client_context)
        self.assertIsNotNone(logInfo)
        logs = logInfo['logs']
        self.assertIsNotNone(logs)
        self.assertEqual(4, len(logs))
        self.assertEqual({"error": "logger ERROR log"}, logs[0])
    def test_parse_last_sentences_from_response(self):

        client = TestClient()
        client_context = ClientContext(client, "testid")
        client_context.bot = Bot(BotConfiguration(), client)
        client_context.bot.configuration.conversations._max_histories = 3
        client_context.brain = client_context.bot.brain

        conversation = Conversation(client_context)
        self.assertIsNotNone(conversation)

        response = "Hello World"
        that = conversation.parse_last_sentences_from_response(
            client_context, response)
        self.assertEqual("Hello World", that)

        response = "Hello World. Second sentence"
        that = conversation.parse_last_sentences_from_response(
            client_context, response)
        self.assertEqual("Second sentence", that)

        response = "Hello World. Second sentence. Third Sentence"
        that = conversation.parse_last_sentences_from_response(
            client_context, response)
        self.assertEqual("Third Sentence", that)
Ejemplo n.º 8
0
    def assert_just_conversation_storage(self,
                                         store,
                                         can_empty=True,
                                         test_load=True):

        if can_empty is True:
            store.empty()

        client = TestClient()
        client_context = client.create_client_context("user1")

        conversation = Conversation(client_context)

        question1 = Question.create_from_text(client_context, "Hello There")
        question1.sentence(0).response = "Hi"
        question1.sentence(0).matched_context = MatchContext(
            max_search_depth=99,
            max_search_timeout=99,
            matched_nodes=[
                Match(Match.WORD, PatternWordNode("Hello"), "Hello")
            ],
            template_node=None,
            sentence="HELLO",
            response="Hi There")

        conversation.record_dialog(question1)

        store.store_conversation(client_context, conversation)
Ejemplo n.º 9
0
    def get_conversation(self, client_context):

        assert (client_context is not None)
        assert (client_context.userid  is not None)

        if client_context.userid in self._conversations:
            YLogger.info(client_context, "Retrieving conversation for client %s", client_context.userid)
            conversation = self._conversations[client_context.userid]

            # Load existing conversation from cache
            if self.configuration.multi_client:
                if self._conversation_storage is not None:
                    self._conversation_storage.load_conversation(client_context, conversation)

        else:
            YLogger.info(client_context, "Creating new conversation for client %s", client_context.userid)

            conversation = Conversation(client_context)

            if client_context.brain.default_variables is not None:
                conversation.load_initial_variables(client_context.brain.default_variables)

            self._conversations[client_context.userid] = conversation

            if self._conversation_storage is not None:
                self._conversation_storage.load_conversation(client_context, conversation)

            if self.configuration.restore_last_topic is True:
                pass

        return conversation
Ejemplo n.º 10
0
    def test_node_no_sentences(self):
        root = TemplateNode()
        node = TemplateStarNode()
        root.append(node)

        conversation = Conversation(self._client_context)
        question = Question()
        conversation.record_dialog(question)
        self._client_context.bot._conversation_mgr._conversations["testid"] = conversation

        self.assertEqual("", root.resolve(self._client_context))
Ejemplo n.º 11
0
    def test_store_conversation(self):
        client = TestClient()
        client_context = client.create_client_context("user1")

        conversation = Conversation(client_context)

        question1 = Question.create_from_text(client_context, "Hello There")
        question1.sentence(0).response = "Hi"
        conversation.record_dialog(question1)

        convo_store = ConversationStore()
        with self.assertRaises(NotImplementedError):
            convo_store.store_conversation(client_context, conversation)
Ejemplo n.º 12
0
    def conversation_asserts(self, storage_engine, visit=True):

        client = TestClient()
        client_context = client.create_client_context("user1")

        conversation = Conversation(client_context)

        question1 = Question.create_from_text(client_context, "Hello There")
        question1.sentence(0).response = "Hi"
        conversation.record_dialog(question1)

        convo_store = storage_engine.conversation_store()
        convo_store.store_conversation(client_context, conversation)
        convo_store.commit()
Ejemplo n.º 13
0
    def test_to_document_with_id(self):

        client = TestClient()
        client_context = client.create_client_context("testuser")

        convo = Convo(client_context)

        question = Question.create_from_text(client_context, "Hello world")
        question.current_sentence()._response = "Hello matey"
        convo.record_dialog(question)

        conversation = Conversation(client_context, convo)
        conversation.id = '666'

        doc = conversation.to_document()
        self.assertEqual(
            {
                '_id': '666',
                'clientid': 'testclient',
                'userid': 'testuser',
                'botid': 'bot',
                'brainid': 'brain',
                'conversation': {
                    'client_context': {
                        'clientid': 'testclient',
                        'userid': 'testuser',
                        'botid': 'bot',
                        'brainid': 'brain',
                        'depth': 0
                    },
                    'questions': [{
                        'srai':
                        False,
                        'sentences': [{
                            'words': ['Hello', 'world'],
                            'response': 'Hello matey',
                            'positivity': 0.0,
                            'subjectivity': 0.5
                        }],
                        'current_sentence_no':
                        -1,
                        'properties': {}
                    }],
                    'max_histories':
                    100,
                    'properties': {
                        'topic': '*'
                    }
                }
            }, doc)
Ejemplo n.º 14
0
    def test_resolve_no_defaults_inside_topic(self):
        root = TemplateNode()
        self.assertIsNotNone(root)
        self.assertIsNotNone(root.children)
        self.assertEqual(len(root.children), 0)

        node = TemplateTopicStarNode(index=1)
        self.assertIsNotNone(node)
        self.assertEqual(1, node.index)

        root.append(node)
        self.assertEqual(len(root.children), 1)

        conversation = Conversation(self._client_context)

        question = Question.create_from_text(self._client_context, "Hello world")
        question.current_sentence()._response = "Hello matey"
        conversation.record_dialog(question)

        question = Question.create_from_text(self._client_context, "How are you")
        question.current_sentence()._response = "Very well thanks"
        conversation.record_dialog(question)

        match = PatternOneOrMoreWildCardNode("*")
        context = MatchContext(max_search_depth=100, max_search_timeout=-1, tokenizer=self._client_context.brain.tokenizer)
        context.add_match(Match(Match.TOPIC, match, "Matched"))
        question.current_sentence()._matched_context = context
        conversation.record_dialog(question)

        self._client_context.bot._conversation_mgr._conversations["testid"] = conversation

        self.assertEqual("Matched", node.resolve(self._client_context))
Ejemplo n.º 15
0
    def test_node_with_star(self):
        root = TemplateNode()
        node = TemplateStarNode()
        root.append(node)

        conversation = Conversation(self._client_context)
        question = Question.create_from_text(
            self._client_context, "Hello world",
            self._client_context.bot.sentence_splitter)
        question.current_sentence()._response = "Hello matey"
        conversation.record_dialog(question)
        question = Question.create_from_text(
            self._client_context, "How are you",
            self._client_context.bot.sentence_splitter)
        question.current_sentence()._response = "Very well thanks"
        conversation.record_dialog(question)
        match = PatternOneOrMoreWildCardNode("*")
        context = MatchContext(max_search_depth=100,
                               max_search_timeout=-1,
                               tokenizer=self._client_context.brain.tokenizer)
        context.add_match(Match(Match.WORD, match, "Matched"))
        question.current_sentence()._matched_context = context

        conversation.record_dialog(question)
        self._client_context.bot._conversation_mgr._conversations[
            "testid"] = conversation

        self.assertEqual("Matched", root.resolve(self._client_context))
Ejemplo n.º 16
0
    def test_store_converstion_no_logger(self):
        config = LoggerStorageConfiguration()
        store = MockLoggerConversationStore(config)

        client = TestClient()
        client_context = client.create_client_context("user1")

        conversation = Conversation(client_context)

        question1 = Question.create_from_text(client_context, "Hello There")
        question1.sentence(0).response = "Hi"
        conversation.record_dialog(question1)

        store.store_conversation(client_context, conversation)

        self.assertFalse(store.logged)
Ejemplo n.º 17
0
    def test_conversations_storage_exception_on_save_load(self):
        config = RedisStorageConfiguration()
        engine = RedisStorageEngine(config)
        engine.initialise()
        store = MockRedisConversationStore(engine, fail_write=False, fail_read=False)

        client = TestClient()
        client_context = client.create_client_context("user1")

        conversation1 = Conversation(client_context)

        store.store_conversation(client_context, conversation1)

        conversation2 = Conversation(client_context)

        store.load_conversation(client_context, conversation2)
Ejemplo n.º 18
0
    def test_repr_with_id(self):
        client = TestClient()
        client_context = client.create_client_context("testuser")

        convo = Convo(client_context)

        question = Question.create_from_text(client_context, "Hello world")
        question.current_sentence()._response = "Hello matey"
        convo.record_dialog(question)

        conversation = Conversation(client_context, convo)
        conversation.id = '1'

        self.assertEquals(
            "<Conversation(id='1', client='testclient', user='******', bot='bot', brain='brain')",
            str(conversation))
Ejemplo n.º 19
0
    def test_store_conversation(self):
        config = LoggerStorageConfiguration()
        engine = LoggerStorageEngine(config)
        engine.initialise()
        store = LoggerConversationStore(engine)

        client = TestClient()
        client_context = client.create_client_context("user1")

        conversation = Conversation(client_context)

        question1 = Question.create_from_text(client_context, "Hello There")
        question1.sentence(0).response = "Hi"
        conversation.record_dialog(question1)

        store.store_conversation(client_context, conversation)
Ejemplo n.º 20
0
    def test_resolve_with_no_defaults(self):
        root = TemplateNode()
        self.assertIsNotNone(root)
        self.assertIsNotNone(root.children)
        self.assertEqual(len(root.children), 0)

        node = TemplateRequestNode(index=1)
        self.assertIsNotNone(node)

        root.append(node)
        self.assertEqual(len(root.children), 1)
        self.assertEqual("1", node.index.word)

        conversation = Conversation(self._client_context)
        self._client_context.bot._conversation_mgr._conversations[
            "testid"] = conversation

        question = Question.create_from_text(self._client_context,
                                             "Hello world")
        question.current_sentence()._response = "Hello matey"
        conversation._questions.append(question)

        question = Question.create_from_text(self._client_context,
                                             "What did you say")
        question.current_sentence()._response = "Hello matey"
        conversation._questions.append(question)

        response = root.resolve(self._client_context)
        self.assertIsNotNone(response)
        self.assertEqual(response, "Hello world")
Ejemplo n.º 21
0
    def test_node_no_question(self):
        root = TemplateNode()
        node = TemplateStarNode()
        root.append(node)

        conversation = Conversation(self._client_context)
        self._client_context.bot._conversation_mgr._conversations["testid"] = conversation

        self.assertEqual("", root.resolve(self._client_context))
Ejemplo n.º 22
0
    def get_conversation(self, client_context):

        assert (client_context is not None)
        assert (client_context.userid is not None)

        if client_context.userid in self._conversations:
            YLogger.debug(client_context,
                          "Retrieving conversation for client %s",
                          client_context.userid)
            conversation = self._conversations[client_context.userid]

            # Load existing conversation from cache
            if self.configuration.multi_client:
                if self._conversation_storage is not None:
                    self._conversation_storage.load_conversation(
                        client_context, conversation)

        else:
            YLogger.debug(client_context,
                          "Creating new conversation for client %s",
                          client_context.userid)

            conversation = Conversation(client_context)

            conversation.num_categories = client_context.brain.aiml_parser.num_categories

            conversation.load_initial_variables(
                client_context.brain.default_variables)

            self._conversations[client_context.userid] = conversation

            if self._conversation_storage is not None:
                self._conversation_storage.load_conversation(
                    client_context, conversation)

            if client_context.server_mode is False:
                self.load_learnf_with_userid(client_context)

            if self.configuration.restore_last_topic is True:
                pass

        return conversation
Ejemplo n.º 23
0
    def test_save_conversation_with_exception(self):
        config = FileStorageConfiguration()
        config.conversation_storage._dirs = [self._tmpdir]

        engine = FileStorageEngine(config)
        engine.initialise()
        store = FileConversationStore(engine)

        store.empty()

        client = TestClient()
        client_context = client.create_client_context("user1")

        conversation = Conversation(client_context)

        question1 = Question.create_from_text(client_context, "Hello There")
        question1.sentence(0).response = "Hi"
        conversation.record_dialog(question1)

        store.store_conversation(client_context, conversation)
Ejemplo n.º 24
0
    def test_that_pattern(self):
        client = TestClient()
        client_context = ClientContext(client, "testid")
        client_context.bot = Bot(BotConfiguration(), client)
        client_context.bot.configuration.conversations._max_histories = 3
        client_context.brain = client_context.bot.brain

        conversation = Conversation(client_context)

        self.assertEquals("*", conversation.parse_last_sentences_from_response(""))
        self.assertEquals("HELLO", conversation.parse_last_sentences_from_response("HELLO"))
        self.assertEquals("HELLO", conversation.parse_last_sentences_from_response(".HELLO"))
        self.assertEquals("HELLO", conversation.parse_last_sentences_from_response("HELLO."))
        self.assertEquals("HELLO", conversation.parse_last_sentences_from_response(".HELLO."))
        self.assertEquals("HELLO THERE", conversation.parse_last_sentences_from_response("HELLO THERE"))
        self.assertEquals("THERE", conversation.parse_last_sentences_from_response("HELLO. THERE"))
        self.assertEquals("THERE", conversation.parse_last_sentences_from_response("HELLO. THERE!"))
Ejemplo n.º 25
0
    def test_store_logs(self):
        config = RedisStorageConfiguration()
        engine = RedisStorageEngine(config)
        engine.initialise()
        store = RedisLogsStore(engine)

        client = TestClient()
        client_context = client.create_client_context("user1")
        conversation = Conversation(client_context)

        error_log = {"error": "logger ERROR log"}
        warning_log = {"warning": "logger WARNING log"}
        info_log = {"info": "logger INFO log"}
        debug_log = {"debug": "logger DEBUG log"}

        conversation.append_log(error_log)
        conversation.append_log(warning_log)
        conversation.append_log(info_log)
        conversation.append_log(debug_log)

        store.store_logs(client_context, conversation)
Ejemplo n.º 26
0
    def test_resolve_no_sentence(self):
        root = TemplateNode()
        self.assertIsNotNone(root)
        self.assertIsNotNone(root.children)
        self.assertEqual(len(root.children), 0)

        node = TemplateInputNode(index=3)
        self.assertIsNotNone(node)

        root.append(node)
        self.assertEqual(len(root.children), 1)
        self.assertEqual(3, node.index)

        conversation = Conversation(self._client_context)

        question = Question.create_from_text(
            self._client_context, "Hello world",
            self._client_context.bot.sentence_splitter)
        question.current_sentence()._response = "Hello matey"
        conversation.record_dialog(question)

        question = Question.create_from_text(
            self._client_context, "How are you. Are you well",
            self._client_context.bot.sentence_splitter)
        question.current_sentence()._response = "Fine thanks"
        conversation.record_dialog(question)

        self._client_context.bot._conversation_mgr._conversations[
            "testid"] = conversation

        with self.assertRaises(Exception):
            root.resolve(self._client_context)
Ejemplo n.º 27
0
    def test_resolve_with_no_defaults(self):
        root = TemplateNode()
        self.assertIsNotNone(root)
        self.assertIsNotNone(root.children)
        self.assertEqual(len(root.children), 0)

        node = TemplateThatNode(question=1, sentence=1)
        self.assertIsNotNone(node)

        root.append(node)
        self.assertEqual(len(root.children), 1)
        self.assertEqual(1, node.question)
        self.assertEqual(1, node.sentence)

        conversation = Conversation(self._client_context)

        question = Question.create_from_text(self._client_context,
                                             "Hello world")
        question.current_sentence()._response = "Hello matey"
        conversation.record_dialog(question)

        question = Question.create_from_text(self._client_context,
                                             "How are you")
        question.current_sentence()._response = "Very well thanks"
        conversation.record_dialog(question)

        self._client_context.bot._conversation_mgr._conversations[
            "testid"] = conversation

        self.assertEqual("Hello matey", node.resolve(self._client_context))
Ejemplo n.º 28
0
    def test_resolve_with_no_defaults(self):
        root = TemplateNode()
        self.assertIsNotNone(root)
        self.assertIsNotNone(root.children)
        self.assertEqual(len(root.children), 0)

        node = TemplateResponseNode(index=1)
        self.assertIsNotNone(node)
        self.assertIsInstance(node.index, TemplateNode)

        root.append(node)
        self.assertEqual(len(root.children), 1)

        conversation = Conversation(self._client_context)

        question = Question.create_from_text(self._client_context,
                                             "Hello1 question")
        question.current_sentence()._response = "Hello1 response"
        conversation.record_dialog(question)

        question = Question.create_from_text(self._client_context,
                                             "Hello quesiton2")
        question.current_sentence()._response = "Hello2 response"
        conversation.record_dialog(question)

        self._client_context.bot._conversation_mgr._conversations[
            "testid"] = conversation

        response = root.resolve(self._client_context)
        self.assertIsNotNone(response)
        self.assertEqual(response, "Hello1 response")
Ejemplo n.º 29
0
    def test_resolve_no_sentence(self):
        root = TemplateNode()
        self.assertIsNotNone(root)
        self.assertIsNotNone(root.children)
        self.assertEqual(len(root.children), 0)

        node = TemplateRequestNode(index=3)
        self.assertIsNotNone(node)

        root.append(node)
        self.assertEqual(len(root.children), 1)
        self.assertEqual("3", node.index.word)

        conversation = Conversation(self._client_context)

        question = Question.create_from_text(self._client_context,
                                             "Hello world")
        question.current_sentence()._response = "Hello matey"
        conversation.record_dialog(question)

        question = Question.create_from_text(self._client_context,
                                             "How are you. Are you well")
        question.current_sentence()._response = "Fine thanks"
        conversation.record_dialog(question)

        self._client_context.bot._conversation_mgr._conversations[
            "testid"] = conversation

        response = root.resolve(self._client_context)
        self.assertIsNotNone(response)
        self.assertEqual(response, "")
Ejemplo n.º 30
0
    def test_resolve_to_string_three_digit(self):
        root = TemplateNode()
        self.assertIsNotNone(root)
        self.assertIsNotNone(root.children)
        self.assertEqual(len(root.children), 0)

        node = TemplateThatNode(index="1,1,3")
        self.assertIsNotNone(node)

        root.append(node)
        self.assertEqual(len(root.children), 1)
        self.assertIsInstance(node.index, TemplateNode)

        conversation = Conversation(self._client_context)

        question = Question.create_from_text(self._client_context,
                                             "Hello world")
        question.current_sentence()._response = "Hello matey"
        conversation.record_dialog(question)

        question = Question.create_from_text(self._client_context,
                                             "How are you")
        question.current_sentence()._response = "Very well thanks"
        conversation.record_dialog(question)

        self._client_context.bot._conversation_mgr._conversations[
            "testid"] = conversation

        self.assertEqual("", node.resolve(self._client_context))