예제 #1
0
    async def test_parse_witai_raise_ClientOSError(self):
        with OpsDroid() as opsdroid:
            opsdroid.config["parsers"] = [{
                "name": "witai",
                "access-token": "test",
                "min-score": 0.3
            }]
            mock_skill = amock.CoroutineMock()
            match_witai("get_weather")(mock_skill)

            mock_connector = amock.CoroutineMock()
            message = Message(
                text="how's the weather outside",
                user="******",
                target="default",
                connector=mock_connector,
            )

            with amock.patch.object(witai, "call_witai") as mocked_call:
                mocked_call.side_effect = ClientOSError()
                await witai.parse_witai(opsdroid, opsdroid.skills, message,
                                        opsdroid.config["parsers"][0])

            self.assertFalse(mock_skill.called)
            self.assertTrue(mocked_call.called)
예제 #2
0
    async def test_parse_witai(self):
        with OpsDroid() as opsdroid:
            opsdroid.config['parsers'] = [
                {'name': 'witai', 'access-token': 'test', 'min-score': 0.3}
            ]
            mock_skill = amock.CoroutineMock()
            match_witai('get_weather')(mock_skill)

            mock_connector = amock.CoroutineMock()
            message = Message("how's the weather outside", "user",
                              "default", mock_connector)

            with amock.patch.object(witai, 'call_witai') as mocked_call_witai:
                mocked_call_witai.return_value = {
                    'msg_id': '0fI07qSgCwM79NEjs',
                    '_text': "how's the weather outside",
                    'entities': {
                        'intent': [
                            {
                                'confidence': 0.99897986426571,
                                'value': 'get_weather'
                            }
                        ]
                    }}
                skills = await witai.parse_witai(
                    opsdroid, message, opsdroid.config['parsers'][0])
                self.assertEqual(mock_skill, skills[0]["skill"])
예제 #3
0
    async def test_parse_witai_failure(self):
        with OpsDroid() as opsdroid:
            opsdroid.config["parsers"] = [{
                "name": "witai",
                "access-token": "test",
                "min-score": 0.3
            }]
            mock_skill = amock.CoroutineMock()
            match_witai("get_weather")(mock_skill)

            mock_connector = amock.CoroutineMock()
            message = Message(
                text="how's the weather outside",
                user="******",
                target="default",
                connector=mock_connector,
            )

            with amock.patch.object(witai, "call_witai") as mocked_call_witai:
                mocked_call_witai.return_value = {
                    "code": "auth",
                    "error": "missing or wrong auth token",
                }
                skills = await witai.parse_witai(opsdroid, opsdroid.skills,
                                                 message,
                                                 opsdroid.config["parsers"][0])
                self.assertFalse(skills)
예제 #4
0
    async def test_parse_witai_no_intent(self):
        with OpsDroid() as opsdroid:
            opsdroid.config["parsers"] = [{
                "name": "witai",
                "access-token": "test",
                "min-score": 0.3
            }]
            mock_skill = amock.CoroutineMock()
            match_witai("get_weather")(mock_skill)

            mock_connector = amock.CoroutineMock()
            message = Message(
                text="how's the weather outside",
                user="******",
                target="default",
                connector=mock_connector,
            )

            with amock.patch.object(witai, "call_witai") as mocked_call_witai:
                mocked_call_witai.return_value = {
                    "msg_id": "0fI07qSgCwM79NEjs",
                    "_text": "Book an appointment for today",
                    "entities": {
                        "test": [{
                            "value": "test"
                        }]
                    },
                }
                await witai.parse_witai(opsdroid, opsdroid.skills, message,
                                        opsdroid.config["parsers"][0])

            self.assertFalse(mock_skill.called)
예제 #5
0
    async def test_parse_witai_low_score(self):
        with OpsDroid() as opsdroid:
            opsdroid.config["parsers"] = [
                {"name": "witai", "access-token": "test", "min-score": 0.3}
            ]
            mock_skill = amock.CoroutineMock()
            match_witai("get_weather")(mock_skill)

            mock_connector = amock.CoroutineMock()
            message = Message(
                "how's the weather outside", "user", "default", mock_connector
            )

            with amock.patch.object(witai, "call_witai") as mocked_call_witai:
                mocked_call_witai.return_value = {
                    "msg_id": "0fI07qSgCwM79NEjs",
                    "_text": "how's the weather outside",
                    "entities": {
                        "intent": [
                            {"confidence": 0.19897986426571, "value": "get_weather"}
                        ]
                    },
                }
                await witai.parse_witai(
                    opsdroid, opsdroid.skills, message, opsdroid.config["parsers"][0]
                )

            self.assertFalse(mock_skill.called)
예제 #6
0
    async def test_parse_witai_no_intent(self):
        with OpsDroid() as opsdroid:
            opsdroid.config['parsers'] = [
                {'name': 'witai', 'access-token': 'test', 'min-score': 0.3}
            ]
            mock_skill = amock.CoroutineMock()
            match_witai('get_weather')(mock_skill)

            mock_connector = amock.CoroutineMock()
            message = Message("how's the weather outside", "user",
                              "default", mock_connector)

            with amock.patch.object(witai, 'call_witai') as mocked_call_witai:
                mocked_call_witai.return_value = {
                    'msg_id': '0fI07qSgCwM79NEjs',
                    '_text': "Book an appointment for today",
                    'entities': {
                        'test': [
                            {
                                'value': 'test'
                            }
                        ]
                    }}
                await witai.parse_witai(opsdroid, message,
                                        opsdroid.config['parsers'][0])

            self.assertFalse(mock_skill.called)
예제 #7
0
 async def test_parse_witai(self):
     with OpsDroid() as opsdroid:
         opsdroid.config["parsers"] = [{"name": "witai"}]
         witai_intent = ""
         skill = amock.CoroutineMock()
         mock_connector = Connector({}, opsdroid=opsdroid)
         match_witai(witai_intent)(skill)
         message = Message("Hello world", "user", "default", mock_connector)
         with amock.patch('opsdroid.parsers.witai.parse_witai'):
             tasks = await opsdroid.parse(message)
             self.assertEqual(len(tasks), 1)
             for task in tasks:
                 await task
예제 #8
0
 async def test_parse_witai(self):
     with OpsDroid() as opsdroid:
         opsdroid.config["parsers"] = [{"name": "witai"}]
         witai_intent = ""
         skill = amock.CoroutineMock()
         mock_connector = Connector({})
         match_witai(witai_intent)(skill)
         message = Message("Hello world", "user", "default", mock_connector)
         with amock.patch('opsdroid.parsers.witai.parse_witai'):
             tasks = await opsdroid.parse(message)
             self.assertEqual(len(tasks), 1)
             for task in tasks:
                 await task
예제 #9
0
 async def test_parse_witai(self):
     with OpsDroid() as opsdroid:
         opsdroid.config["parsers"] = {"witai": {"enabled": True}}
         witai_intent = ""
         skill = amock.CoroutineMock()
         mock_connector = Connector({}, opsdroid=opsdroid)
         match_witai(witai_intent)(skill)
         message = Message(
             text="Hello world",
             user="******",
             target="default",
             connector=mock_connector,
         )
         with amock.patch("opsdroid.parsers.witai.parse_witai"):
             tasks = await opsdroid.parse(message)
             self.assertEqual(len(tasks), 2)
예제 #10
0
    async def test_parse_witai_raises(self):
        with OpsDroid() as opsdroid:
            opsdroid.config['parsers'] = [
                {'name': 'witai', 'access-token': 'test', 'min-score': 0.3}
            ]
            mock_skill = await self.getRaisingMockSkill()
            mock_skill.config = {
                "name": "mocked-skill"
            }
            opsdroid.skills.append(match_witai('get_weather')(mock_skill))

            mock_connector = amock.MagicMock()
            mock_connector.respond = amock.CoroutineMock()
            message = Message("how's the weather outside", "user",
                              "default", mock_connector)

            with amock.patch.object(witai, 'call_witai') as mocked_call_witai:
                mocked_call_witai.return_value = {
                    'msg_id': '0fI07qSgCwM79NEjs',
                    '_text': "how's the weather outside",
                    'entities': {
                        'intent': [
                            {
                                'confidence': 0.99897986426571,
                                'value': 'get_weather'
                            }
                        ]
                    }}
                skills = await witai.parse_witai(
                    opsdroid, opsdroid.skills, message, opsdroid.config['parsers'][0])
                self.assertEqual(mock_skill, skills[0]['skill'])

            await opsdroid.run_skill(
                skills[0], skills[0]['skill'].config, message)
            self.assertLogs('_LOGGER', 'exception')
예제 #11
0
    async def test_parse_witai(self):
        with OpsDroid() as opsdroid:
            opsdroid.config["parsers"] = [{
                "name": "witai",
                "access-token": "test",
                "min-score": 0.3
            }]
            mock_skill = await self.getMockSkill()
            opsdroid.skills.append(match_witai("get_weather")(mock_skill))

            mock_connector = amock.CoroutineMock()
            message = Message(
                text="how's the weather outside",
                user="******",
                target="default",
                connector=mock_connector,
            )

            with amock.patch.object(witai, "call_witai") as mocked_call_witai:
                mocked_call_witai.return_value = {
                    "msg_id": "0fI07qSgCwM79NEjs",
                    "_text": "how's the weather outside",
                    "entities": {
                        "intent": [{
                            "confidence": 0.99897986426571,
                            "value": "get_weather"
                        }]
                    },
                }
                skills = await witai.parse_witai(opsdroid, opsdroid.skills,
                                                 message,
                                                 opsdroid.config["parsers"][0])
                self.assertEqual(mock_skill, skills[0]["skill"])
예제 #12
0
    async def test_parse_witai_raises(self):
        with OpsDroid() as opsdroid:
            opsdroid.config["parsers"] = [
                {"name": "witai", "access-token": "test", "min-score": 0.3}
            ]
            mock_skill = await self.getRaisingMockSkill()
            mock_skill.config = {"name": "mocked-skill"}
            opsdroid.skills.append(match_witai("get_weather")(mock_skill))

            mock_connector = amock.MagicMock()
            mock_connector.send = amock.CoroutineMock()
            message = Message(
                "how's the weather outside", "user", "default", mock_connector
            )

            with amock.patch.object(witai, "call_witai") as mocked_call_witai:
                mocked_call_witai.return_value = {
                    "msg_id": "0fI07qSgCwM79NEjs",
                    "_text": "how's the weather outside",
                    "entities": {
                        "intent": [
                            {"confidence": 0.99897986426571, "value": "get_weather"}
                        ]
                    },
                }
                skills = await witai.parse_witai(
                    opsdroid, opsdroid.skills, message, opsdroid.config["parsers"][0]
                )
                self.assertEqual(mock_skill, skills[0]["skill"])

            await opsdroid.run_skill(skills[0], skills[0]["skill"].config, message)
            self.assertLogs("_LOGGER", "exception")
예제 #13
0
async def test_match_witai(opsdroid):
    intent = "myIntent"
    decorator = matchers.match_witai(intent)
    opsdroid.skills.append(decorator(await get_mock_skill()))
    assert len(opsdroid.skills) == 1
    assert opsdroid.skills[0].matchers[0]["witai_intent"] == intent
    assert asyncio.iscoroutinefunction(opsdroid.skills[0]) is True
예제 #14
0
 async def test_match_witai(self):
     with OpsDroid() as opsdroid:
         intent = "myIntent"
         decorator = matchers.match_witai(intent)
         opsdroid.skills.append(decorator(await self.getMockSkill()))
         self.assertEqual(len(opsdroid.skills), 1)
         self.assertEqual(opsdroid.skills[0].matchers[0]["witai_intent"], intent)
         self.assertTrue(asyncio.iscoroutinefunction(opsdroid.skills[0]))
예제 #15
0
 async def test_match_witai(self):
     with OpsDroid() as opsdroid:
         intent = "myIntent"
         decorator = matchers.match_witai(intent)
         opsdroid.skills.append(decorator(await self.getMockSkill()))
         self.assertEqual(len(opsdroid.skills), 1)
         self.assertEqual(opsdroid.skills[0].matchers[0]["witai_intent"], intent)
         self.assertTrue(asyncio.iscoroutinefunction(opsdroid.skills[0]))
예제 #16
0
 async def test_match_witai(self):
     with OpsDroid() as opsdroid:
         intent = "myIntent"
         mockedskill = mock.MagicMock()
         decorator = matchers.match_witai(intent)
         decorator(mockedskill)
         self.assertEqual(len(opsdroid.skills), 1)
         self.assertEqual(opsdroid.skills[0]["witai_intent"], intent)
         self.assertIsInstance(opsdroid.skills[0]["skill"], mock.MagicMock)
예제 #17
0
    async def test_parse_witai_no_entity(self):
        with OpsDroid() as opsdroid:
            opsdroid.config["parsers"] = [{"name": "witai", "token": "test"}]
            mock_skill = amock.CoroutineMock()
            match_witai("get_weather")(mock_skill)

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

            with amock.patch.object(witai, "call_witai") as mocked_call_witai:
                mocked_call_witai.return_value = {
                    "msg_id": "0MDw4dxgcoIyBZeVx",
                    "_text": "hi",
                    "entities": {},
                }
                await witai.parse_witai(opsdroid, opsdroid.skills, message,
                                        opsdroid.config["parsers"][0])

            self.assertFalse(mock_skill.called)
예제 #18
0
    async def test_parse_witai_raise_ClientOSError(self):
        with OpsDroid() as opsdroid:
            opsdroid.config['parsers'] = [
                {'name': 'witai', 'access-token': 'test', 'min-score': 0.3}
            ]
            mock_skill = amock.CoroutineMock()
            match_witai('get_weather')(mock_skill)

            mock_connector = amock.CoroutineMock()
            message = Message("how's the weather outside", "user",
                              "default", mock_connector)

            with amock.patch.object(witai, 'call_witai') as mocked_call:
                mocked_call.side_effect = ClientOSError()
                await witai.parse_witai(opsdroid, message,
                                        opsdroid.config['parsers'][0])

            self.assertFalse(mock_skill.called)
            self.assertTrue(mocked_call.called)
예제 #19
0
    async def test_parse_witai_failure(self):
        with OpsDroid() as opsdroid:
            opsdroid.config['parsers'] = [
                {'name': 'witai', 'access-token': 'test', 'min-score': 0.3}
            ]
            mock_skill = amock.CoroutineMock()
            match_witai('get_weather')(mock_skill)

            mock_connector = amock.CoroutineMock()
            message = Message("how's the weather outside", "user",
                              "default", mock_connector)

            with amock.patch.object(witai, 'call_witai') as mocked_call_witai:
                mocked_call_witai.return_value = {
                    "code": "auth",
                    "error": "missing or wrong auth token"
                    }
                skills = await witai.parse_witai(
                    opsdroid, message, opsdroid.config['parsers'][0])
                self.assertFalse(skills)
예제 #20
0
    async def test_parse_witai_no_entity(self):
        with OpsDroid() as opsdroid:
            opsdroid.config['parsers'] = [
                {'name': 'witai', 'access-token': 'test'}
            ]
            mock_skill = amock.CoroutineMock()
            match_witai('get_weather')(mock_skill)

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

            with amock.patch.object(witai, 'call_witai') as mocked_call_witai:
                mocked_call_witai.return_value = {
                    'msg_id': '0MDw4dxgcoIyBZeVx',
                    '_text': "hi",
                    'entities': {}}
                await witai.parse_witai(opsdroid, message,
                                        opsdroid.config['parsers'][0])

            self.assertFalse(mock_skill.called)
예제 #21
0
    async def test_parse_witai_raises(self):
        with OpsDroid() as opsdroid:
            opsdroid.config['parsers'] = [
                {'name': 'witai', 'access-token': 'test', 'min-score': 0.3}
            ]
            mock_skill = amock.CoroutineMock()
            mock_skill.side_effect = Exception()
            opsdroid.loader.current_import_config = {
                "name": "mocked-skill"
            }
            match_witai('get_weather')(mock_skill)

            mock_connector = amock.MagicMock()
            mock_connector.respond = amock.CoroutineMock()
            message = Message("how's the weather outside", "user",
                              "default", mock_connector)

            with amock.patch.object(witai, 'call_witai') as mocked_call_witai:
                mocked_call_witai.return_value = {
                    'msg_id': '0fI07qSgCwM79NEjs',
                    '_text': "how's the weather outside",
                    'entities': {
                        'intent': [
                            {
                                'confidence': 0.99897986426571,
                                'value': 'get_weather'
                            }
                        ]
                    }}
                skills = await witai.parse_witai(
                    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)
예제 #22
0
    async def test_parse_witai_entities_multiple_values(self):
        with OpsDroid() as opsdroid:
            opsdroid.config["parsers"] = [{
                "name": "witai",
                "token": "test",
                "min-score": 0.3
            }]
            mock_skill = await self.getMockSkill()
            opsdroid.skills.append(match_witai("aws_cost")(mock_skill))

            mock_connector = amock.CoroutineMock()
            message = Message(
                text="aws cost since december",
                user="******",
                target="default",
                connector=mock_connector,
            )

            with amock.patch.object(witai, "call_witai") as mocked_call_witai:
                mocked_call_witai.return_value = {
                    "_text": "aws cost since december",
                    "entities": {
                        "intent": [{
                            "confidence": 0.99965322126667,
                            "value": "aws_cost"
                        }],
                        "datetime": [{
                            "confidence":
                            0.9995,
                            "type":
                            "interval",
                            "from": {
                                "grain": "month",
                                "value": "2022-12-01T00:00:00.000-08:00",
                            },
                            "values": [
                                {
                                    "type": "interval",
                                    "from": {
                                        "grain": "month",
                                        "value":
                                        "2022-12-01T00:00:00.000-08:00",
                                    },
                                },
                                {
                                    "type": "interval",
                                    "from": {
                                        "grain": "month",
                                        "value":
                                        "2023-12-01T00:00:00.000-08:00",
                                    },
                                },
                                {
                                    "type": "interval",
                                    "from": {
                                        "grain": "month",
                                        "value":
                                        "2024-12-01T00:00:00.000-08:00",
                                    },
                                },
                            ],
                        }],
                    },
                    "WARNING": "DEPRECATED",
                    "msg_id": "051qg0BBGn4O7xZDj",
                }
                [skill
                 ] = await witai.parse_witai(opsdroid, opsdroid.skills,
                                             message,
                                             opsdroid.config["parsers"][0])

            self.assertEqual(len(skill["message"].entities.keys()), 1)
            self.assertTrue("datetime" in skill["message"].entities.keys())
            self.assertEqual(
                skill["message"].entities["datetime"]["value"],
                [
                    {
                        "type": "interval",
                        "from": {
                            "grain": "month",
                            "value": "2022-12-01T00:00:00.000-08:00",
                        },
                    },
                    {
                        "type": "interval",
                        "from": {
                            "grain": "month",
                            "value": "2023-12-01T00:00:00.000-08:00",
                        },
                    },
                    {
                        "type": "interval",
                        "from": {
                            "grain": "month",
                            "value": "2024-12-01T00:00:00.000-08:00",
                        },
                    },
                ],
            )
예제 #23
0
    async def test_parse_witai_entities(self):
        with OpsDroid() as opsdroid:
            opsdroid.config["parsers"] = [{
                "name": "witai",
                "access-token": "test",
                "min-score": 0.3
            }]
            mock_skill = await self.getMockSkill()
            opsdroid.skills.append(match_witai("get_weather")(mock_skill))

            mock_connector = amock.CoroutineMock()
            message = Message(
                text="what is the weather in london",
                user="******",
                target="default",
                connector=mock_connector,
            )

            with amock.patch.object(witai, "call_witai") as mocked_call_witai:
                mocked_call_witai.return_value = {
                    "msg_id": "0fI07qSgCwM79NEjs",
                    "_text": "what is the weather in london",
                    "entities": {
                        "intent": [{
                            "confidence": 0.99897986426571,
                            "value": "get_weather"
                        }],
                        "location": [{
                            "confidence": 0.93009,
                            "value": "london",
                            "resolved": {
                                "values": [
                                    {
                                        "name": "London",
                                        "grain": "locality",
                                        "type": "resolved",
                                        "timezone": "Europe/London",
                                        "coords": {
                                            "lat": 51.508529663086,
                                            "long": -0.12574000656605,
                                        },
                                        "external": {
                                            "geonames": "2643743",
                                            "wikidata": "Q84",
                                            "wikipedia": "London",
                                        },
                                    },
                                    {
                                        "name": "London",
                                        "grain": "locality",
                                        "type": "resolved",
                                        "timezone": "America/New_York",
                                        "coords": {
                                            "lat": 39.886451721191,
                                            "long": -83.448249816895,
                                        },
                                        "external": {
                                            "geonames": "4517009",
                                            "wikidata": "Q1001456",
                                            "wikipedia": "London, Ohio",
                                        },
                                    },
                                    {
                                        "name": "London",
                                        "grain": "locality",
                                        "type": "resolved",
                                        "timezone": "America/Toronto",
                                        "coords": {
                                            "lat": 42.983390808105,
                                            "long": -81.233039855957,
                                        },
                                        "external": {
                                            "geonames": "6058560",
                                            "wikidata": "Q22647924",
                                        },
                                    },
                                ]
                            },
                        }],
                    },
                }
                [skill
                 ] = await witai.parse_witai(opsdroid, opsdroid.skills,
                                             message,
                                             opsdroid.config["parsers"][0])

            self.assertEqual(len(skill["message"].entities.keys()), 1)
            self.assertTrue("location" in skill["message"].entities.keys())
            self.assertEqual(skill["message"].entities["location"]["value"],
                             "london")