From 3d0de4146aa2699a115189ebbae6ee7c551b72ed Mon Sep 17 00:00:00 2001 From: mdrichardson Date: Tue, 17 Sep 2019 09:42:00 -0700 Subject: [PATCH 1/5] [Parity w/ Dotnet] create_conversation tentant_id/channel_data --- .../tests/test_bot_framework_adapter.py | 48 ++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/libraries/botbuilder-core/tests/test_bot_framework_adapter.py b/libraries/botbuilder-core/tests/test_bot_framework_adapter.py index e0779df4d..ff5960c58 100644 --- a/libraries/botbuilder-core/tests/test_bot_framework_adapter.py +++ b/libraries/botbuilder-core/tests/test_bot_framework_adapter.py @@ -5,6 +5,7 @@ from unittest.mock import Mock import unittest import aiounittest +import uuid from botbuilder.core import ( BotFrameworkAdapter, @@ -16,6 +17,7 @@ ActivityTypes, ConversationAccount, ConversationReference, + ConversationResourceResponse, ChannelAccount, ) from botframework.connector.aio import ConnectorClient @@ -124,7 +126,12 @@ async def mock_create_conversation(parameters): self.tester.assertIsNotNone( parameters, "create_conversation not passed parameters" ) - return not self.fail_auth + response = ConversationResourceResponse( + activity_id=REFERENCE.activity_id, + service_url=REFERENCE.service_url, + id=uuid.uuid4(), + ) + return response connector_client_mock.conversations.reply_to_activity.side_effect = ( mock_reply_to_activity @@ -247,3 +254,42 @@ async def aux_func_assert_tenant_id_copied(context): ) await adapter.process_activity(incoming, "", aux_func_assert_tenant_id_copied) + + async def test_should_create_valid_conversation_for_msteams(self): + + tenant_id = "testTenant" + + reference = deepcopy(REFERENCE) + reference.conversation.tenant_id = tenant_id + reference.channel_data = { + 'tenant': { + 'id': tenant_id + } + } + adapter = AdapterUnderTest() + + async def aux_func_assert_valid_conversation(context): + self.assertIsNotNone( + context, + "context not passed" + ) + self.assertIsNotNone( + context.activity, + "context has no request" + ) + self.assertIsNotNone( + context.activity.conversation, + "request has invalid conversation" + ) + self.assertEqual( + context.activity.conversation.tenant_id, + tenant_id, + "request has invalid tenant_id on conversation" + ) + self.assertEqual( + context.activity.channel_data['tenant']['id'], + tenant_id, + "request has invalid tenant_id in channel_data" + ) + + await adapter.create_conversation(reference, aux_func_assert_valid_conversation) From 7c2846d7ca4108f75a6276ef803c2a9c8bafa850 Mon Sep 17 00:00:00 2001 From: mdrichardson Date: Tue, 17 Sep 2019 09:42:17 -0700 Subject: [PATCH 2/5] [Parity w/ Dotnet] create_conversation tentant_id/channel_data --- .../botbuilder-core/botbuilder/core/bot_framework_adapter.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libraries/botbuilder-core/botbuilder/core/bot_framework_adapter.py b/libraries/botbuilder-core/botbuilder/core/bot_framework_adapter.py index 00cc672cf..784dadf0e 100644 --- a/libraries/botbuilder-core/botbuilder/core/bot_framework_adapter.py +++ b/libraries/botbuilder-core/botbuilder/core/bot_framework_adapter.py @@ -180,7 +180,8 @@ async def create_conversation( request = TurnContext.apply_conversation_reference( Activity(), reference, is_incoming=True ) - request.conversation = ConversationAccount(id=resource_response.id) + request.conversation = ConversationAccount(id=resource_response.id, tenant_id=parameters.tenant_id) + request.channel_data = parameters.channel_data if resource_response.service_url: request.service_url = resource_response.service_url From 2a2ad6b37dd360d3af0be403f631d5f5afd04639 Mon Sep 17 00:00:00 2001 From: mdrichardson Date: Tue, 17 Sep 2019 09:54:31 -0700 Subject: [PATCH 3/5] black compliant --- .../botbuilder/core/bot_framework_adapter.py | 4 ++- .../tests/test_bot_framework_adapter.py | 25 ++++++------------- 2 files changed, 10 insertions(+), 19 deletions(-) diff --git a/libraries/botbuilder-core/botbuilder/core/bot_framework_adapter.py b/libraries/botbuilder-core/botbuilder/core/bot_framework_adapter.py index 784dadf0e..aaac1119b 100644 --- a/libraries/botbuilder-core/botbuilder/core/bot_framework_adapter.py +++ b/libraries/botbuilder-core/botbuilder/core/bot_framework_adapter.py @@ -180,7 +180,9 @@ async def create_conversation( request = TurnContext.apply_conversation_reference( Activity(), reference, is_incoming=True ) - request.conversation = ConversationAccount(id=resource_response.id, tenant_id=parameters.tenant_id) + request.conversation = ConversationAccount( + id=resource_response.id, tenant_id=parameters.tenant_id + ) request.channel_data = parameters.channel_data if resource_response.service_url: request.service_url = resource_response.service_url diff --git a/libraries/botbuilder-core/tests/test_bot_framework_adapter.py b/libraries/botbuilder-core/tests/test_bot_framework_adapter.py index ff5960c58..c229fbe9f 100644 --- a/libraries/botbuilder-core/tests/test_bot_framework_adapter.py +++ b/libraries/botbuilder-core/tests/test_bot_framework_adapter.py @@ -261,35 +261,24 @@ async def test_should_create_valid_conversation_for_msteams(self): reference = deepcopy(REFERENCE) reference.conversation.tenant_id = tenant_id - reference.channel_data = { - 'tenant': { - 'id': tenant_id - } - } + reference.channel_data = {"tenant": {"id": tenant_id}} adapter = AdapterUnderTest() async def aux_func_assert_valid_conversation(context): + self.assertIsNotNone(context, "context not passed") + self.assertIsNotNone(context.activity, "context has no request") self.assertIsNotNone( - context, - "context not passed" - ) - self.assertIsNotNone( - context.activity, - "context has no request" - ) - self.assertIsNotNone( - context.activity.conversation, - "request has invalid conversation" + context.activity.conversation, "request has invalid conversation" ) self.assertEqual( context.activity.conversation.tenant_id, tenant_id, - "request has invalid tenant_id on conversation" + "request has invalid tenant_id on conversation", ) self.assertEqual( - context.activity.channel_data['tenant']['id'], + context.activity.channel_data["tenant"]["id"], tenant_id, - "request has invalid tenant_id in channel_data" + "request has invalid tenant_id in channel_data", ) await adapter.create_conversation(reference, aux_func_assert_valid_conversation) From 613b90df4feb31b4010a46ab19d18c98a0e71c8e Mon Sep 17 00:00:00 2001 From: mdrichardson Date: Tue, 17 Sep 2019 10:52:51 -0700 Subject: [PATCH 4/5] for pylint --- libraries/botbuilder-core/tests/test_bot_framework_adapter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/botbuilder-core/tests/test_bot_framework_adapter.py b/libraries/botbuilder-core/tests/test_bot_framework_adapter.py index c229fbe9f..469589d6c 100644 --- a/libraries/botbuilder-core/tests/test_bot_framework_adapter.py +++ b/libraries/botbuilder-core/tests/test_bot_framework_adapter.py @@ -4,8 +4,8 @@ from copy import copy, deepcopy from unittest.mock import Mock import unittest -import aiounittest import uuid +import aiounittest from botbuilder.core import ( BotFrameworkAdapter, From f9abb68fb4dbd64440c6b3f26db1ebb8becb0ccb Mon Sep 17 00:00:00 2001 From: mdrichardson Date: Tue, 17 Sep 2019 13:38:09 -0700 Subject: [PATCH 5/5] added called check --- .../botbuilder-core/tests/test_bot_framework_adapter.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/libraries/botbuilder-core/tests/test_bot_framework_adapter.py b/libraries/botbuilder-core/tests/test_bot_framework_adapter.py index 469589d6c..6532b1e52 100644 --- a/libraries/botbuilder-core/tests/test_bot_framework_adapter.py +++ b/libraries/botbuilder-core/tests/test_bot_framework_adapter.py @@ -264,6 +264,8 @@ async def test_should_create_valid_conversation_for_msteams(self): reference.channel_data = {"tenant": {"id": tenant_id}} adapter = AdapterUnderTest() + called = False + async def aux_func_assert_valid_conversation(context): self.assertIsNotNone(context, "context not passed") self.assertIsNotNone(context.activity, "context has no request") @@ -280,5 +282,8 @@ async def aux_func_assert_valid_conversation(context): tenant_id, "request has invalid tenant_id in channel_data", ) + nonlocal called + called = True await adapter.create_conversation(reference, aux_func_assert_valid_conversation) + self.assertTrue(called, "bot logic not called.")