async def test_on_teams_messaging_extension_bot_message_send_activity_with_empty_string( self, ): # Arrange activity = Activity( type=ActivityTypes.invoke, name="composeExtension/submitAction", value={ "data": { "key": "value" }, "context": { "theme": "dark" }, "commandId": "test_command", "commandContext": "command_context_test", "botMessagePreviewAction": "", "botActivityPreview": [Activity().serialize()], "messagePayload": MessageActionsPayload().serialize(), }, ) turn_context = TurnContext(SimpleAdapter(), activity) # Act bot = TestingTeamsActivityHandler() await bot.on_turn(turn_context) # Assert assert len(bot.record) == 3 assert bot.record[0] == "on_invoke_activity" assert bot.record[ 1] == "on_teams_messaging_extension_submit_action_dispatch" assert bot.record[2] == "on_teams_messaging_extension_submit_action"
async def test_on_teams_messaging_extension_fetch_task(self): # Arrange activity = Activity( type=ActivityTypes.invoke, name="composeExtension/fetchTask", value={ "data": { "key": "value" }, "context": { "theme": "dark" }, "commandId": "test_command", "commandContext": "command_context_test", "botMessagePreviewAction": "message_action", "botActivityPreview": [{ "id": "123" }], "messagePayload": { "id": "abc123" }, }, ) turn_context = TurnContext(SimpleAdapter(), activity) # Act bot = TestingTeamsActivityHandler() await bot.on_turn(turn_context) # Assert assert len(bot.record) == 2 assert bot.record[0] == "on_invoke_activity" assert bot.record[1] == "on_teams_messaging_extension_fetch_task"
async def test_on_teams_messaging_extension_configuration_query_settings_url(self): # Arrange activity = Activity( type=ActivityTypes.invoke, name="composeExtension/querySettingUrl", value={ "commandId": "test_command", "parameters": [], "messagingExtensionQueryOptions": {"skip": 1, "count": 1}, "state": "state_string", }, ) turn_context = TurnContext(SimpleAdapter(), activity) # Act bot = TestingTeamsActivityHandler() await bot.on_turn(turn_context) # Assert assert len(bot.record) == 2 assert bot.record[0] == "on_invoke_activity" assert ( bot.record[1] == "on_teams_messaging_extension_configuration_query_settings_url" )
async def test_on_teams_members_removed_activity(self): # arrange activity = Activity( type=ActivityTypes.conversation_update, channel_data={ "eventType": "teamMemberRemoved", "team": { "id": "team_id_1", "name": "new_team_name" }, }, members_removed=[ ChannelAccount( id="123", name="test_user", aad_object_id="asdfqwerty", role="tester", ) ], channel_id=Channels.ms_teams, ) turn_context = TurnContext(SimpleAdapter(), activity) # Act bot = TestingTeamsActivityHandler() await bot.on_turn(turn_context) # Assert assert len(bot.record) == 2 assert bot.record[0] == "on_conversation_update_activity" assert bot.record[1] == "on_teams_members_removed"
async def test_typing_activity(self): activity = Activity(type=ActivityTypes.typing) turn_context = TurnContext(SimpleAdapter(), activity) # Act bot = TestingTeamsActivityHandler() await bot.on_turn(turn_context) assert len(bot.record) == 1 assert bot.record[0] == "on_typing_activity"
async def test_pass_resource_responses_through(self): def validate_responses(activities: List[Activity]): pass # no need to do anything. adapter = SimpleAdapter(call_on_send=validate_responses) context = TurnContext(adapter, Activity()) activity_id = str(uuid.uuid1()) activity = TestMessage.message(activity_id) resource_response = await context.send_activity(activity) self.assertTrue(resource_response.id == activity_id, "Incorrect response Id returned")
async def test_on_signin_verify_state(self): # arrange activity = Activity(type=ActivityTypes.invoke, name="signin/verifyState") turn_context = TurnContext(SimpleAdapter(), activity) # Act bot = TestingTeamsActivityHandler() await bot.on_turn(turn_context) # Assert assert len(bot.record) == 2 assert bot.record[0] == "on_invoke_activity" assert bot.record[1] == "on_teams_signin_verify_state"
async def test_turn_error(self): async def on_error(turn_context: TurnContext, err: Exception): nonlocal self self.assertIsNotNone(turn_context, "turn_context not found.") self.assertIsNotNone(err, "error not found.") self.assertEqual(err.__class__, Exception, "unexpected error thrown.") adapter = SimpleAdapter() adapter.on_turn_error = on_error def handler(context: TurnContext): # pylint: disable=unused-argument raise Exception await adapter.process_request(TestMessage.message(), handler)
async def test_on_teams_meeting_end_event(self): activity = Activity( type=ActivityTypes.event, name="application/vnd.microsoft.meetingEnd", channel_id=Channels.ms_teams, ) turn_context = TurnContext(SimpleAdapter(), activity) # Act bot = TestingTeamsActivityHandler() await bot.on_turn(turn_context) assert len(bot.record) == 2 assert bot.record[0] == "on_event_activity" assert bot.record[1] == "on_teams_meeting_end_event"
async def test_on_app_based_link_query(self): # arrange activity = Activity( type=ActivityTypes.invoke, name="composeExtension/query", value={"url": "http://www.test.com"}, ) turn_context = TurnContext(SimpleAdapter(), activity) # Act bot = TestingTeamsActivityHandler() await bot.on_turn(turn_context) # Assert assert len(bot.record) == 2 assert bot.record[0] == "on_invoke_activity" assert bot.record[1] == "on_teams_messaging_extension_query"
async def test_on_file_consent_bad_action_activity(self): # Arrange activity = Activity( type=ActivityTypes.invoke, name="fileConsent/invoke", value={"action": "bad_action"}, ) turn_context = TurnContext(SimpleAdapter(), activity) # Act bot = TestingTeamsActivityHandler() await bot.on_turn(turn_context) # Assert assert len(bot.record) == 2 assert bot.record[0] == "on_invoke_activity" assert bot.record[1] == "on_teams_file_consent"
async def test_on_teams_messaging_extension_card_button_clicked(self): # Arrange activity = Activity( type=ActivityTypes.invoke, name="composeExtension/onCardButtonClicked", value={"key": "value"}, ) turn_context = TurnContext(SimpleAdapter(), activity) # Act bot = TestingTeamsActivityHandler() await bot.on_turn(turn_context) # Assert assert len(bot.record) == 2 assert bot.record[0] == "on_invoke_activity" assert bot.record[1] == "on_teams_messaging_extension_card_button_clicked"
async def test_on_teams_o365_connector_card_action(self): # arrange activity = Activity( type=ActivityTypes.invoke, name="actionableMessage/executeAction", value={"body": "body_here", "actionId": "action_id_here"}, ) turn_context = TurnContext(SimpleAdapter(), activity) # Act bot = TestingTeamsActivityHandler() await bot.on_turn(turn_context) # Assert assert len(bot.record) == 2 assert bot.record[0] == "on_invoke_activity" assert bot.record[1] == "on_teams_o365_connector_card_action"
async def test_on_teams_task_module_submit(self): # Arrange activity = Activity( type=ActivityTypes.invoke, name="task/submit", value={ "data": {"key": "value"}, "context": TaskModuleRequestContext().serialize(), }, ) turn_context = TurnContext(SimpleAdapter(), activity) # Act bot = TestingTeamsActivityHandler() await bot.on_turn(turn_context) # Assert assert len(bot.record) == 2 assert bot.record[0] == "on_invoke_activity" assert bot.record[1] == "on_teams_task_module_submit"
def test_adapter_use_chaining(self): adapter = SimpleAdapter() adapter.use(CallCountingMiddleware()).use(CallCountingMiddleware())
def test_adapter_single_use(self): adapter = SimpleAdapter() adapter.use(CallCountingMiddleware())