From cf76bd88e4cf6fddc1bc71ceeece662ab78dc956 Mon Sep 17 00:00:00 2001 From: virtual-josh Date: Tue, 25 Feb 2020 13:31:54 -0800 Subject: [PATCH 1/3] adding unit test for helper: --- .../botbuilder-core/tests/simple_adapter.py | 22 ++++++- .../tests/teams/simple_adapter.py | 60 ------------------- .../tests/teams/test_teams_info.py | 49 +++++++++++++++ 3 files changed, 68 insertions(+), 63 deletions(-) delete mode 100644 libraries/botbuilder-core/tests/teams/simple_adapter.py create mode 100644 libraries/botbuilder-core/tests/teams/test_teams_info.py diff --git a/libraries/botbuilder-core/tests/simple_adapter.py b/libraries/botbuilder-core/tests/simple_adapter.py index 1202ad7f1..f70d3c384 100644 --- a/libraries/botbuilder-core/tests/simple_adapter.py +++ b/libraries/botbuilder-core/tests/simple_adapter.py @@ -2,20 +2,27 @@ # Licensed under the MIT License. import unittest -from typing import List +from typing import List, Tuple, Awaitable, Callable from botbuilder.core import BotAdapter, TurnContext -from botbuilder.schema import Activity, ConversationReference, ResourceResponse +from botbuilder.schema import Activity, ConversationReference, ResourceResponse, ConversationParameters class SimpleAdapter(BotAdapter): # pylint: disable=unused-argument - def __init__(self, call_on_send=None, call_on_update=None, call_on_delete=None): + def __init__( + self, + call_on_send=None, + call_on_update=None, + call_on_delete=None, + call_create_conversation=None, + ): super(SimpleAdapter, self).__init__() self.test_aux = unittest.TestCase("__init__") self._call_on_send = call_on_send self._call_on_update = call_on_update self._call_on_delete = call_on_delete + self._call_create_conversation = call_create_conversation async def delete_activity( self, context: TurnContext, reference: ConversationReference @@ -46,6 +53,15 @@ async def send_activities( return responses + async def create_conversation( + self, + reference: ConversationReference, + logic: Callable[[TurnContext], Awaitable] = None, + conversation_parameters: ConversationParameters = None, + ) -> Tuple[ConversationReference, str]: + if self._call_create_conversation is not None: + self._call_create_conversation() + async def update_activity(self, context: TurnContext, activity: Activity): self.test_aux.assertIsNotNone( activity, "SimpleAdapter.update_activity: missing activity" diff --git a/libraries/botbuilder-core/tests/teams/simple_adapter.py b/libraries/botbuilder-core/tests/teams/simple_adapter.py deleted file mode 100644 index a80fa29b3..000000000 --- a/libraries/botbuilder-core/tests/teams/simple_adapter.py +++ /dev/null @@ -1,60 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -import unittest -from typing import List -from botbuilder.core import BotAdapter, TurnContext -from botbuilder.schema import Activity, ConversationReference, ResourceResponse - - -class SimpleAdapter(BotAdapter): - # pylint: disable=unused-argument - - def __init__(self, call_on_send=None, call_on_update=None, call_on_delete=None): - super(SimpleAdapter, self).__init__() - self.test_aux = unittest.TestCase("__init__") - self._call_on_send = call_on_send - self._call_on_update = call_on_update - self._call_on_delete = call_on_delete - - async def delete_activity( - self, context: TurnContext, reference: ConversationReference - ): - self.test_aux.assertIsNotNone( - reference, "SimpleAdapter.delete_activity: missing reference" - ) - if self._call_on_delete is not None: - self._call_on_delete(reference) - - async def send_activities( - self, context: TurnContext, activities: List[Activity] - ) -> List[ResourceResponse]: - self.test_aux.assertIsNotNone( - activities, "SimpleAdapter.delete_activity: missing reference" - ) - self.test_aux.assertTrue( - len(activities) > 0, - "SimpleAdapter.send_activities: empty activities array.", - ) - - if self._call_on_send is not None: - self._call_on_send(activities) - responses = [] - - for activity in activities: - responses.append(ResourceResponse(id=activity.id)) - - return responses - - async def update_activity(self, context: TurnContext, activity: Activity): - self.test_aux.assertIsNotNone( - activity, "SimpleAdapter.update_activity: missing activity" - ) - if self._call_on_update is not None: - self._call_on_update(activity) - - return ResourceResponse(activity.id) - - async def process_request(self, activity, handler): - context = TurnContext(self, activity) - return self.run_pipeline(context, handler) diff --git a/libraries/botbuilder-core/tests/teams/test_teams_info.py b/libraries/botbuilder-core/tests/teams/test_teams_info.py new file mode 100644 index 000000000..9d71e40cb --- /dev/null +++ b/libraries/botbuilder-core/tests/teams/test_teams_info.py @@ -0,0 +1,49 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +import aiounittest + + +from botbuilder.core import TurnContext, MessageFactory +from botbuilder.core.teams import TeamsInfo, TeamsActivityHandler +from botbuilder.schema import Activity +from botbuilder.schema.teams import TeamsChannelData, TeamInfo +from botframework.connector import Channels +from simple_adapter import SimpleAdapter + + +class TestTeamsInfo(aiounittest.AsyncTestCase): + async def test_send_message_to_teams(self): + def create_conversation(): + pass + + adapter = SimpleAdapter(call_create_conversation=create_conversation) + + activity = Activity( + type="message", + text="test_send_message_to_teams_channel", + channel_id=Channels.ms_teams, + service_url="https://example.org", + channel_data=TeamsChannelData(team=TeamInfo(id="team-id")), + ) + turn_context = TurnContext(adapter, activity) + handler = TestTeamsActivityHandler() + await handler.on_turn(turn_context) + + +class TestTeamsActivityHandler(TeamsActivityHandler): + async def on_turn(self, turn_context: TurnContext): + super().on_turn(turn_context) + + if turn_context.activity.text == "test_send_message_to_teams_channel": + await self.call_send_message_to_teams(turn_context) + + async def call_send_message_to_teams(self, turn_context: TurnContext): + msg = MessageFactory.text("call_send_message_to_teams") + channel_id = "teams_channel_123" + reference = await TeamsInfo.send_message_to_teams_channel( + turn_context, msg, channel_id + ) + + assert reference[0].activity_id == "new_conversation_id" + assert reference[1] == "reference123" From d66de1b6ac5bfc44500888fbfe7a04a6e1b440a6 Mon Sep 17 00:00:00 2001 From: virtual-josh Date: Tue, 25 Feb 2020 13:50:00 -0800 Subject: [PATCH 2/3] updating callback function --- ...simple_adapter_with_create_conversation.py | 78 +++++++++++++++++++ .../tests/teams/test_teams_info.py | 4 +- 2 files changed, 80 insertions(+), 2 deletions(-) create mode 100644 libraries/botbuilder-core/tests/teams/simple_adapter_with_create_conversation.py diff --git a/libraries/botbuilder-core/tests/teams/simple_adapter_with_create_conversation.py b/libraries/botbuilder-core/tests/teams/simple_adapter_with_create_conversation.py new file mode 100644 index 000000000..18ac35c82 --- /dev/null +++ b/libraries/botbuilder-core/tests/teams/simple_adapter_with_create_conversation.py @@ -0,0 +1,78 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +import unittest +from typing import List, Tuple, Awaitable, Callable +from botbuilder.core import BotAdapter, TurnContext +from botbuilder.schema import Activity, ConversationReference, ResourceResponse, ConversationParameters + + +class SimpleAdapterWithCreateConversation(BotAdapter): + # pylint: disable=unused-argument + + def __init__( + self, + call_on_send=None, + call_on_update=None, + call_on_delete=None, + call_create_conversation=None, + ): + super(SimpleAdapterWithCreateConversation, self).__init__() + self.test_aux = unittest.TestCase("__init__") + self._call_on_send = call_on_send + self._call_on_update = call_on_update + self._call_on_delete = call_on_delete + self._call_create_conversation = call_create_conversation + + async def delete_activity( + self, context: TurnContext, reference: ConversationReference + ): + self.test_aux.assertIsNotNone( + reference, "SimpleAdapter.delete_activity: missing reference" + ) + if self._call_on_delete is not None: + self._call_on_delete(reference) + + async def send_activities( + self, context: TurnContext, activities: List[Activity] + ) -> List[ResourceResponse]: + self.test_aux.assertIsNotNone( + activities, "SimpleAdapter.delete_activity: missing reference" + ) + self.test_aux.assertTrue( + len(activities) > 0, + "SimpleAdapter.send_activities: empty activities array.", + ) + + if self._call_on_send is not None: + self._call_on_send(activities) + responses = [] + + for activity in activities: + responses.append(ResourceResponse(id=activity.id)) + + return responses + + async def create_conversation( + self, + reference: ConversationReference, + logic: Callable[[TurnContext], Awaitable] = None, + conversation_parameters: ConversationParameters = None, + ) -> Tuple[ConversationReference, str]: + if self._call_create_conversation is not None: + self._call_create_conversation() + ref = ConversationReference(activity_id="new_conversation_id") + return (ref, "reference123") + + async def update_activity(self, context: TurnContext, activity: Activity): + self.test_aux.assertIsNotNone( + activity, "SimpleAdapter.update_activity: missing activity" + ) + if self._call_on_update is not None: + self._call_on_update(activity) + + return ResourceResponse(activity.id) + + async def process_request(self, activity, handler): + context = TurnContext(self, activity) + return await self.run_pipeline(context, handler) diff --git a/libraries/botbuilder-core/tests/teams/test_teams_info.py b/libraries/botbuilder-core/tests/teams/test_teams_info.py index 9d71e40cb..70f129d1d 100644 --- a/libraries/botbuilder-core/tests/teams/test_teams_info.py +++ b/libraries/botbuilder-core/tests/teams/test_teams_info.py @@ -9,7 +9,7 @@ from botbuilder.schema import Activity from botbuilder.schema.teams import TeamsChannelData, TeamInfo from botframework.connector import Channels -from simple_adapter import SimpleAdapter +from simple_adapter_with_create_conversation import SimpleAdapterWithCreateConversation class TestTeamsInfo(aiounittest.AsyncTestCase): @@ -17,7 +17,7 @@ async def test_send_message_to_teams(self): def create_conversation(): pass - adapter = SimpleAdapter(call_create_conversation=create_conversation) + adapter = SimpleAdapterWithCreateConversation(call_create_conversation=create_conversation) activity = Activity( type="message", From 2d10a59c58448414bcd3dfb8a00b0ca7b20343af Mon Sep 17 00:00:00 2001 From: virtual-josh Date: Tue, 25 Feb 2020 14:00:06 -0800 Subject: [PATCH 3/3] black --- libraries/botbuilder-core/tests/simple_adapter.py | 7 ++++++- .../tests/teams/simple_adapter_with_create_conversation.py | 7 ++++++- libraries/botbuilder-core/tests/teams/test_teams_info.py | 4 +++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/libraries/botbuilder-core/tests/simple_adapter.py b/libraries/botbuilder-core/tests/simple_adapter.py index f70d3c384..0ded46f45 100644 --- a/libraries/botbuilder-core/tests/simple_adapter.py +++ b/libraries/botbuilder-core/tests/simple_adapter.py @@ -4,7 +4,12 @@ import unittest from typing import List, Tuple, Awaitable, Callable from botbuilder.core import BotAdapter, TurnContext -from botbuilder.schema import Activity, ConversationReference, ResourceResponse, ConversationParameters +from botbuilder.schema import ( + Activity, + ConversationReference, + ResourceResponse, + ConversationParameters, +) class SimpleAdapter(BotAdapter): diff --git a/libraries/botbuilder-core/tests/teams/simple_adapter_with_create_conversation.py b/libraries/botbuilder-core/tests/teams/simple_adapter_with_create_conversation.py index 18ac35c82..477aa3b28 100644 --- a/libraries/botbuilder-core/tests/teams/simple_adapter_with_create_conversation.py +++ b/libraries/botbuilder-core/tests/teams/simple_adapter_with_create_conversation.py @@ -4,7 +4,12 @@ import unittest from typing import List, Tuple, Awaitable, Callable from botbuilder.core import BotAdapter, TurnContext -from botbuilder.schema import Activity, ConversationReference, ResourceResponse, ConversationParameters +from botbuilder.schema import ( + Activity, + ConversationReference, + ResourceResponse, + ConversationParameters, +) class SimpleAdapterWithCreateConversation(BotAdapter): diff --git a/libraries/botbuilder-core/tests/teams/test_teams_info.py b/libraries/botbuilder-core/tests/teams/test_teams_info.py index 70f129d1d..27a68c1f2 100644 --- a/libraries/botbuilder-core/tests/teams/test_teams_info.py +++ b/libraries/botbuilder-core/tests/teams/test_teams_info.py @@ -17,7 +17,9 @@ async def test_send_message_to_teams(self): def create_conversation(): pass - adapter = SimpleAdapterWithCreateConversation(call_create_conversation=create_conversation) + adapter = SimpleAdapterWithCreateConversation( + call_create_conversation=create_conversation + ) activity = Activity( type="message",