diff --git a/libraries/botbuilder-core/tests/simple_adapter.py b/libraries/botbuilder-core/tests/simple_adapter.py index 1202ad7f1..0ded46f45 100644 --- a/libraries/botbuilder-core/tests/simple_adapter.py +++ b/libraries/botbuilder-core/tests/simple_adapter.py @@ -2,20 +2,32 @@ # 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 +58,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_with_create_conversation.py similarity index 62% rename from libraries/botbuilder-core/tests/teams/simple_adapter.py rename to libraries/botbuilder-core/tests/teams/simple_adapter_with_create_conversation.py index a80fa29b3..477aa3b28 100644 --- a/libraries/botbuilder-core/tests/teams/simple_adapter.py +++ b/libraries/botbuilder-core/tests/teams/simple_adapter_with_create_conversation.py @@ -2,20 +2,32 @@ # 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): +class SimpleAdapterWithCreateConversation(BotAdapter): # pylint: disable=unused-argument - def __init__(self, call_on_send=None, call_on_update=None, call_on_delete=None): - super(SimpleAdapter, self).__init__() + 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 @@ -46,6 +58,17 @@ 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() + 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" @@ -57,4 +80,4 @@ async def update_activity(self, context: TurnContext, activity: Activity): async def process_request(self, activity, handler): context = TurnContext(self, activity) - return self.run_pipeline(context, handler) + 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 new file mode 100644 index 000000000..27a68c1f2 --- /dev/null +++ b/libraries/botbuilder-core/tests/teams/test_teams_info.py @@ -0,0 +1,51 @@ +# 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_with_create_conversation import SimpleAdapterWithCreateConversation + + +class TestTeamsInfo(aiounittest.AsyncTestCase): + async def test_send_message_to_teams(self): + def create_conversation(): + pass + + adapter = SimpleAdapterWithCreateConversation( + 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"