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