async def test_parse_dialogflow_low_score(self):
        with OpsDroid() as opsdroid:
            opsdroid.config['parsers'] = [{
                'name': 'dialogflow',
                'access-token': "test",
                "min-score": 0.8
            }]
            mock_skill = amock.CoroutineMock()
            match_dialogflow_action('myaction')(mock_skill)

            mock_connector = amock.CoroutineMock()
            message = Message("Hello world", "user", "default", mock_connector)

            with amock.patch.object(dialogflow, 'call_dialogflow') as \
                    mocked_call_dialogflow:
                mocked_call_dialogflow.return_value = {
                    "result": {
                        "action": "myaction",
                        "score": 0.7
                    },
                    "status": {
                        "code": 200,
                        "errorType": "success"
                    }
                }
                await dialogflow.parse_dialogflow(
                    opsdroid, message, opsdroid.config['parsers'][0])

            self.assertFalse(mock_skill.called)
    async def test_parse_dialogflow_raises(self):
        with OpsDroid() as opsdroid:
            opsdroid.config['parsers'] = [{
                'name': 'dialogflow',
                'access-token': "test"
            }]
            mock_skill = amock.CoroutineMock()
            mock_skill.side_effect = Exception()
            opsdroid.loader.current_import_config = {"name": "mocked-skill"}
            match_dialogflow_action('myaction')(mock_skill)

            mock_connector = amock.MagicMock()
            mock_connector.respond = amock.CoroutineMock()
            message = Message("Hello world", "user", "default", mock_connector)

            with amock.patch.object(dialogflow, 'call_dialogflow') as \
                    mocked_call_dialogflow:
                mocked_call_dialogflow.return_value = {
                    "result": {
                        "action": "myaction",
                        "score": 0.7
                    },
                    "status": {
                        "code": 200,
                        "errorType": "success"
                    }
                }
                skills = await dialogflow.parse_dialogflow(
                    opsdroid, message, opsdroid.config['parsers'][0])
                self.assertEqual(mock_skill, skills[0]["skill"])

            await opsdroid.run_skill(skills[0]["skill"], skills[0]["config"],
                                     message)
            self.assertTrue(skills[0]["skill"].called)
    async def test_parse_dialogflow_failure(self):
        with OpsDroid() as opsdroid:
            opsdroid.config["parsers"] = [{
                "name": "dialogflow",
                "access-token": "test"
            }]
            mock_skill = amock.CoroutineMock()
            match_dialogflow_action("myaction")(mock_skill)

            mock_connector = amock.CoroutineMock()
            message = Message("Hello world", "user", "default", mock_connector)

            with amock.patch.object(
                    dialogflow, "call_dialogflow") as mocked_call_dialogflow:
                mocked_call_dialogflow.return_value = {
                    "result": {
                        "action": "myaction",
                        "score": 0.7
                    },
                    "status": {
                        "code": 404,
                        "errorType": "not found"
                    },
                }
                skills = await dialogflow.parse_dialogflow(
                    opsdroid, opsdroid.skills, message,
                    opsdroid.config["parsers"][0])
                self.assertFalse(skills)
示例#4
0
    async def test_parse_dialogflow(self):
        os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "path/test.json"
        with OpsDroid() as opsdroid:
            opsdroid.config["parsers"] = {
                "dialogflow": {
                    "project-id": "test",
                    "enabled": True
                }
            }
            dialogflow_action = "smalltalk.greetings.whatsup"
            skill = amock.CoroutineMock()
            mock_connector = Connector({}, opsdroid=opsdroid)
            match_dialogflow_action(dialogflow_action)(skill)
            message = Message(
                text="Hello world",
                user="******",
                target="default",
                connector=mock_connector,
            )
            with amock.patch(
                    "opsdroid.parsers.dialogflow.parse_dialogflow"
            ), amock.patch("opsdroid.parsers.dialogflow.call_dialogflow"):
                tasks = await opsdroid.parse(message)
                self.assertEqual(len(tasks), 2)

                tasks = await opsdroid.parse(message)
                self.assertLogs("_LOGGER", "warning")
    async def test_parse_dialogflow_low_score(self):
        with OpsDroid() as opsdroid:
            opsdroid.config['parsers'] = [
                    {
                        'name': 'dialogflow',
                        'access-token': "test",
                        "min-score": 0.8
                    }
                ]
            mock_skill = amock.CoroutineMock()
            match_dialogflow_action('myaction')(mock_skill)

            mock_connector = amock.CoroutineMock()
            message = Message("Hello world", "user", "default", mock_connector)

            with amock.patch.object(dialogflow, 'call_dialogflow') as \
                    mocked_call_dialogflow:
                mocked_call_dialogflow.return_value = {
                        "result": {
                            "action": "myaction",
                            "score": 0.7
                        },
                        "status": {
                            "code": 200,
                            "errorType": "success"
                        }
                    }
                await dialogflow.parse_dialogflow(
                    opsdroid, opsdroid.skills, message, opsdroid.config['parsers'][0])

            self.assertFalse(mock_skill.called)
    async def test_parse_dialogflow_raises(self):
        with OpsDroid() as opsdroid:
            opsdroid.config['parsers'] = [
                    {'name': 'dialogflow', 'access-token': "test"}
                ]
            mock_skill = await self.getRaisingMockSkill()
            mock_skill.config = {
                "name": "greetings"
            }
            opsdroid.skills.append(match_dialogflow_action('myaction')(mock_skill))

            mock_connector = amock.MagicMock()
            mock_connector.send = amock.CoroutineMock()
            message = Message("Hello world", "user", "default", mock_connector)

            with amock.patch.object(dialogflow, 'call_dialogflow') as \
                    mocked_call_dialogflow:
                mocked_call_dialogflow.return_value = {
                        "result": {
                            "action": "myaction",
                            "score": 0.7
                        },
                        "status": {
                            "code": 200,
                            "errorType": "success"
                        }
                    }
                skills = await dialogflow.parse_dialogflow(
                    opsdroid, opsdroid.skills, message, opsdroid.config['parsers'][0])
                self.assertEqual(mock_skill, skills[0]["skill"])

            await opsdroid.run_skill(
                skills[0]["skill"], skills[0]["config"], message
            )
            self.assertLogs('_LOGGER', 'exception')
示例#7
0
    async def test_parse_dialogflow_raises(self):
        with OpsDroid() as opsdroid:
            opsdroid.config['parsers'] = [{
                'name': 'dialogflow',
                'access-token': "test"
            }]
            mock_skill = await self.getRaisingMockSkill()
            mock_skill.config = {"name": "greetings"}
            opsdroid.skills.append(
                match_dialogflow_action('myaction')(mock_skill))

            mock_connector = amock.MagicMock()
            mock_connector.respond = amock.CoroutineMock()
            message = Message("Hello world", "user", "default", mock_connector)

            with amock.patch.object(dialogflow, 'call_dialogflow') as \
                    mocked_call_dialogflow:
                mocked_call_dialogflow.return_value = {
                    "result": {
                        "action": "myaction",
                        "score": 0.7
                    },
                    "status": {
                        "code": 200,
                        "errorType": "success"
                    }
                }
                skills = await dialogflow.parse_dialogflow(
                    opsdroid, opsdroid.skills, message,
                    opsdroid.config['parsers'][0])
                self.assertEqual(mock_skill, skills[0]["skill"])

            await opsdroid.run_skill(skills[0]["skill"], skills[0]["config"],
                                     message)
            self.assertLogs('_LOGGER', 'exception')
示例#8
0
    async def test_parse_dialogflow_failure(self):
        os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "path/test.json"

        with OpsDroid() as opsdroid:
            opsdroid.config["parsers"] = [{
                "name": "dialogflow",
                "project-id": "test"
            }]
            mock_skill = await self.getMockSkill()
            mock_skill.config = {"name": "greetings"}
            opsdroid.skills.append(
                match_dialogflow_action("smalltalk.greetings.whatsup")(
                    mock_skill))

            mock_connector = amock.CoroutineMock()
            message = Message(text="Hello",
                              user="******",
                              target="default",
                              connector=mock_connector)

            with amock.patch.object(
                    dialogflow, "call_dialogflow") as mocked_call_dialogflow:
                mocked_call_dialogflow.side_effect = Exception()

                skills = await dialogflow.parse_dialogflow(
                    opsdroid, opsdroid.skills, message,
                    opsdroid.config["parsers"][0])
                self.assertEqual(skills, None)
                self.assertLogs("_LOGGERS", "debug")
    async def test_parse_dialogflow(self):
        with OpsDroid() as opsdroid:
            opsdroid.config["parsers"] = [{
                "name": "dialogflow",
                "access-token": "test"
            }]
            mock_skill = await self.getMockSkill()
            mock_skill.config = {"name": "greetings"}
            opsdroid.skills.append(
                match_dialogflow_action("myaction")(mock_skill))

            mock_connector = amock.CoroutineMock()
            message = Message("Hello world", "user", "default", mock_connector)

            with amock.patch.object(
                    dialogflow, "call_dialogflow") as mocked_call_dialogflow:
                mocked_call_dialogflow.return_value = {
                    "result": {
                        "action": "myaction",
                        "score": 0.7
                    },
                    "status": {
                        "code": 200,
                        "errorType": "success"
                    },
                }
                skills = await dialogflow.parse_dialogflow(
                    opsdroid, opsdroid.skills, message,
                    opsdroid.config["parsers"][0])
                self.assertEqual(mock_skill, skills[0]["skill"])
    async def test_parse_dialogflow_entities(self):
        with OpsDroid() as opsdroid:
            opsdroid.config["parsers"] = [{
                "name": "dialogflow",
                "access-token": "test"
            }]
            mock_skill = await self.getMockSkill()
            mock_skill.config = {"name": "greetings"}
            opsdroid.skills.append(
                match_dialogflow_action("restaurant.search")(mock_skill))

            mock_connector = amock.CoroutineMock()
            message = Message("I want some good French food", "user",
                              "default", mock_connector)

            with amock.patch.object(
                    dialogflow, "call_dialogflow") as mocked_call_dialogflow:
                mocked_call_dialogflow.return_value = {
                    "id": "aab19d9e-3a85-4d44-95ac-2eda162c9663",
                    "timestamp": "2019-05-24T16:44:06.972Z",
                    "lang": "en",
                    "result": {
                        "source": "agent",
                        "resolvedQuery": "I want some good French food",
                        "action": "restaurant.search",
                        "actionIncomplete": False,
                        "parameters": {
                            "Cuisine": "French"
                        },
                        "contexts": [],
                        "metadata": {
                            "intentId": "4e6ce594-6be3-461d-8d5b-418343cfbda6",
                            "webhookUsed": "false",
                            "webhookForSlotFillingUsed": "false",
                            "isFallbackIntent": "false",
                            "intentName": "restaurant.search",
                        },
                        "fulfillment": {
                            "speech": "",
                            "messages": [{
                                "type": 0,
                                "speech": ""
                            }],
                        },
                        "score": 0.8299999833106995,
                    },
                    "status": {
                        "code": 200,
                        "errorType": "success"
                    },
                    "sessionId": "30ad1a2f-e760-d62f-5a21-e8aafc1eaa35",
                }
                [skill] = await dialogflow.parse_dialogflow(
                    opsdroid, opsdroid.skills, message,
                    opsdroid.config["parsers"][0])
                self.assertEqual(len(skill["message"].entities.keys()), 1)
                self.assertTrue("Cuisine" in skill["message"].entities.keys())
                self.assertEqual(skill["message"].entities["Cuisine"]["value"],
                                 "French")
示例#11
0
    async def test_parse_dialogflow_low_score(self):
        os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "path/test.json"
        dialogflow_response = NestedNamespace({
            "query_result": {
                "query_text": "what is up",
                "action": "smalltalk.greetings.whatsup",
                "parameters": {},
                "all_required_params_present": True,
                "fulfillment_text": "Not much. What's new with you?",
                "fulfillment_messages": {
                    "text": {
                        "text": "Not much. What's new with you?"
                    }
                },
                "intent": {},
                "intent_detection_confidence": 0.3,
                "language_code": "en",
            }
        })
        with OpsDroid() as opsdroid:
            opsdroid.config["parsers"] = [{
                "name": "dialogflow",
                "project-id": "test",
                "min-score": 0.8
            }]
            mock_skill = amock.CoroutineMock()
            match_dialogflow_action("myaction")(mock_skill)

            mock_connector = amock.CoroutineMock()
            message = Message(text="Hello",
                              user="******",
                              target="default",
                              connector=mock_connector)

            with amock.patch.object(
                    dialogflow, "call_dialogflow") as mocked_call_dialogflow:
                mocked_call_dialogflow.return_value = dialogflow_response
                await dialogflow.parse_dialogflow(
                    opsdroid, opsdroid.skills, message,
                    opsdroid.config["parsers"][0])

            self.assertFalse(mock_skill.called)
            self.assertLogs("_LOGGERS", "debug")
示例#12
0
    async def test_parse_dialogflow(self):
        with OpsDroid() as opsdroid:
            opsdroid.config["parsers"] = [{"name": "dialogflow"}]
            dialogflow_action = ""
            skill = amock.CoroutineMock()
            mock_connector = Connector({}, opsdroid=opsdroid)
            match_dialogflow_action(dialogflow_action)(skill)
            message = Message("user", "default", mock_connector, "Hello world")
            with amock.patch('opsdroid.parsers.dialogflow.parse_dialogflow'):
                tasks = await opsdroid.parse(message)
                self.assertEqual(len(tasks), 1)

                # Once apiai parser stops working, remove this test!
                opsdroid.config["parsers"] = [{"name": "apiai"}]
                tasks = await opsdroid.parse(message)
                self.assertLogs('_LOGGER', 'warning')

                # But leave this bit
                for task in tasks:
                    await task
示例#13
0
    async def test_parse_dialogflow(self):
        with OpsDroid() as opsdroid:
            opsdroid.config["parsers"] = [{"name": "dialogflow"}]
            dialogflow_action = ""
            skill = amock.CoroutineMock()
            mock_connector = Connector({}, opsdroid=opsdroid)
            match_dialogflow_action(dialogflow_action)(skill)
            message = Message("Hello world", "user", "default", mock_connector)
            with amock.patch('opsdroid.parsers.dialogflow.parse_dialogflow'):
                tasks = await opsdroid.parse(message)
                self.assertEqual(len(tasks), 1)

                # Once apiai parser stops working, remove this test!
                opsdroid.config["parsers"] = [{"name": "apiai"}]
                tasks = await opsdroid.parse(message)
                self.assertLogs('_LOGGER', 'warning')

                # But leave this bit
                for task in tasks:
                    await task
    async def test_parse_dialogflow_raise_ClientOSError(self):
        with OpsDroid() as opsdroid:
            opsdroid.config['parsers'] = [{
                'name': 'dialogflow',
                'access-token': "test",
                "min-score": 0.8
            }]
            mock_skill = amock.CoroutineMock()
            match_dialogflow_action('myaction')(mock_skill)

            mock_connector = amock.CoroutineMock()
            message = Message("Hello world", "user", "default", mock_connector)

            with amock.patch.object(dialogflow, 'call_dialogflow') \
                    as mocked_call:
                mocked_call.side_effect = ClientOSError()
                await dialogflow.parse_dialogflow(
                    opsdroid, message, opsdroid.config['parsers'][0])

            self.assertFalse(mock_skill.called)
            self.assertTrue(mocked_call.called)
示例#15
0
    async def test_parse_dialogflow_raise_ClientOSError(self):
        with OpsDroid() as opsdroid:
            opsdroid.config['parsers'] = [
                    {
                        'name': 'dialogflow',
                        'access-token': "test",
                        "min-score": 0.8}
                ]
            mock_skill = amock.CoroutineMock()
            match_dialogflow_action('myaction')(mock_skill)

            mock_connector = amock.CoroutineMock()
            message = Message("Hello world", "user", "default", mock_connector)

            with amock.patch.object(dialogflow, 'call_dialogflow') \
                    as mocked_call:
                mocked_call.side_effect = ClientOSError()
                await dialogflow.parse_dialogflow(
                    opsdroid, opsdroid.skills, message, opsdroid.config['parsers'][0])

            self.assertFalse(mock_skill.called)
            self.assertTrue(mocked_call.called)
示例#16
0
 async def test_parse_dialogflow(self):
     with OpsDroid() as opsdroid:
         opsdroid.config["parsers"] = [{"name": "dialogflow"}]
         dialogflow_action = ""
         skill = amock.CoroutineMock()
         mock_connector = Connector({})
         decorator = match_dialogflow_action(dialogflow_action)
         decorator(skill)
         message = Message("Hello world", "user", "default", mock_connector)
         with amock.patch('opsdroid.parsers.dialogflow.parse_dialogflow'):
             tasks = await opsdroid.parse(message)
             self.assertEqual(len(tasks), 3)  # dialogflow, regex and always
             for task in tasks:
                 await task
示例#17
0
 async def test_match_dialogflow(self):
     with OpsDroid() as opsdroid:
         action = "myaction"
         decorator = matchers.match_dialogflow_action(action)
         opsdroid.skills.append(decorator(await self.getMockSkill()))
         self.assertEqual(len(opsdroid.skills), 1)
         self.assertEqual(opsdroid.skills[0].matchers[0]["dialogflow_action"], action)
         self.assertTrue(asyncio.iscoroutinefunction(opsdroid.skills[0]))
         intent = "myIntent"
         decorator = matchers.match_dialogflow_intent(intent)
         opsdroid.skills.append(decorator(await self.getMockSkill()))
         self.assertEqual(len(opsdroid.skills), 2)
         self.assertEqual(opsdroid.skills[1].matchers[0]["dialogflow_intent"], intent)
         self.assertTrue(asyncio.iscoroutinefunction(opsdroid.skills[1]))
示例#18
0
async def test_match_dialogflow(opsdroid):
    action = "myaction"
    decorator = matchers.match_dialogflow_action(action)
    opsdroid.skills.append(decorator(await get_mock_skill()))
    assert len(opsdroid.skills) == 1
    assert opsdroid.skills[0].matchers[0]["dialogflow_action"] == action

    assert asyncio.iscoroutinefunction(opsdroid.skills[0])
    intent = "myIntent"
    decorator = matchers.match_dialogflow_intent(intent)
    opsdroid.skills.append(decorator(await get_mock_skill()))
    assert len(opsdroid.skills) == 2
    assert opsdroid.skills[1].matchers[0]["dialogflow_intent"] == intent
    assert asyncio.iscoroutinefunction(opsdroid.skills[1])
示例#19
0
    async def test_parse_dialogflow(self):
        os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "path/test.json"
        with OpsDroid() as opsdroid:
            opsdroid.config["parsers"] = [{
                "name": "dialogflow",
                "project-id": "test"
            }]
            dialogflow_action = "smalltalk.greetings.whatsup"
            skill = amock.CoroutineMock()
            mock_connector = Connector({}, opsdroid=opsdroid)
            match_dialogflow_action(dialogflow_action)(skill)
            message = Message("Hello world", "user", "default", mock_connector)
            with amock.patch(
                    "opsdroid.parsers.dialogflow.parse_dialogflow"
            ), amock.patch("opsdroid.parsers.dialogflow.call_dialogflow"):
                tasks = await opsdroid.parse(message)
                self.assertEqual(len(tasks), 1)

                tasks = await opsdroid.parse(message)
                self.assertLogs("_LOGGER", "warning")

                # But leave this bit
                for task in tasks:
                    await task
示例#20
0
 async def test_match_dialogflow(self):
     with OpsDroid() as opsdroid:
         action = "myaction"
         mockedskill = mock.MagicMock()
         decorator = matchers.match_dialogflow_action(action)
         decorator(mockedskill)
         self.assertEqual(len(opsdroid.skills), 1)
         self.assertEqual(opsdroid.skills[0]["dialogflow_action"], action)
         self.assertIsInstance(opsdroid.skills[0]["skill"], mock.MagicMock)
         intent = "myIntent"
         decorator = matchers.match_dialogflow_intent(intent)
         decorator(mockedskill)
         self.assertEqual(len(opsdroid.skills), 2)
         self.assertEqual(opsdroid.skills[1]["dialogflow_intent"], intent)
         self.assertIsInstance(opsdroid.skills[1]["skill"], mock.MagicMock)
示例#21
0
    async def test_parse_dialogflow(self):
        os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "path/test.json"
        dialogflow_response = NestedNamespace({
            "query_result": {
                "query_text": "what is up",
                "action": "smalltalk.greetings.whatsup",
                "parameters": {},
                "all_required_params_present": True,
                "fulfillment_text": "Not much. What's new with you?",
                "fulfillment_messages": {
                    "text": {
                        "text": "Not much. What's new with you?"
                    }
                },
                "intent": {},
                "intent_detection_confidence": 1.0,
                "language_code": "en",
            }
        })

        with OpsDroid() as opsdroid:
            opsdroid.config["parsers"] = [{
                "name": "dialogflow",
                "project-id": "test"
            }]
            mock_skill = await self.getMockSkill()
            mock_skill.config = {"name": "greetings"}
            opsdroid.skills.append(
                match_dialogflow_action("smalltalk.greetings.whatsup")(
                    mock_skill))

            mock_connector = amock.CoroutineMock()
            message = Message(
                text="I want some good French food",
                user="******",
                target="default",
                connector=mock_connector,
            )

            with amock.patch.object(
                    dialogflow, "call_dialogflow") as mocked_call_dialogflow:
                mocked_call_dialogflow.return_value = dialogflow_response

                skills = await dialogflow.parse_dialogflow(
                    opsdroid, opsdroid.skills, message,
                    opsdroid.config["parsers"][0])
                self.assertEqual(mock_skill, skills[0]["skill"])
                self.assertLogs("_LOGGERS", "debug")
示例#22
0
 async def test_match_dialogflow(self):
     with OpsDroid() as opsdroid:
         action = "myaction"
         decorator = matchers.match_dialogflow_action(action)
         opsdroid.skills.append(decorator(await self.getMockSkill()))
         self.assertEqual(len(opsdroid.skills), 1)
         self.assertEqual(
             opsdroid.skills[0].matchers[0]["dialogflow_action"], action)
         self.assertTrue(asyncio.iscoroutinefunction(opsdroid.skills[0]))
         intent = "myIntent"
         decorator = matchers.match_dialogflow_intent(intent)
         opsdroid.skills.append(decorator(await self.getMockSkill()))
         self.assertEqual(len(opsdroid.skills), 2)
         self.assertEqual(
             opsdroid.skills[1].matchers[0]["dialogflow_intent"], intent)
         self.assertTrue(asyncio.iscoroutinefunction(opsdroid.skills[1]))
示例#23
0
    async def test_parse_dialogflow(self):
        with OpsDroid() as opsdroid:
            opsdroid.config["parsers"] = [{"name": "dialogflow"}]
            dialogflow_action = ""
            skill = amock.CoroutineMock()
            mock_connector = Connector({})
            decorator = match_dialogflow_action(dialogflow_action)
            decorator(skill)
            message = Message("Hello world", "user", "default", mock_connector)
            with amock.patch('opsdroid.parsers.dialogflow.parse_dialogflow'):
                tasks = await opsdroid.parse(message)
                self.assertEqual(len(tasks), 3)  # dialogflow, regex and always

                # Once apiai parser stops working, remove this test!
                with amock.patch('opsdroid.core._LOGGER.warning') as logmock:
                    opsdroid.config["parsers"] = [{"name": "apiai"}]
                    tasks = await opsdroid.parse(message)
                    self.assertTrue(logmock.called)

                # But leave this bit
                for task in tasks:
                    await task