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)
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"])
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)
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)
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)
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)
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
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
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)
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')
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"])
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")
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
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]))
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]))
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)
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)
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)
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)
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)
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)
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", }, }, ], )
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")