Exemple #1
0
    def setUpClass(cls):
        cls.bot_id = str(uuid4())
        cls.skill_id = str(uuid4())

        cls._test_id_factory = ConversationIdFactoryForTest()

        cls._claims_identity = ClaimsIdentity({}, False)

        cls._claims_identity.claims[AuthenticationConstants.AUDIENCE_CLAIM] = cls.bot_id
        cls._claims_identity.claims[AuthenticationConstants.APP_ID_CLAIM] = cls.skill_id
        cls._claims_identity.claims[
            AuthenticationConstants.SERVICE_URL_CLAIM
        ] = "http://testbot.com/api/messages"
        cls._conversation_reference = ConversationReference(
            conversation=ConversationAccount(id=str(uuid4())),
            service_url="http://testbot.com/api/messages",
        )
        activity = Activity.create_message_activity()
        activity.apply_conversation_reference(cls._conversation_reference)
        skill = BotFrameworkSkill(
            app_id=cls.skill_id,
            id="skill",
            skill_endpoint="http://testbot.com/api/messages",
        )
        cls._options = SkillConversationIdFactoryOptions(
            from_bot_oauth_scope=cls.bot_id,
            from_bot_id=cls.bot_id,
            activity=activity,
            bot_framework_skill=skill,
        )
    def _build_message_activity(
            self, conversation_reference: ConversationReference) -> Activity:
        if not conversation_reference:
            raise TypeError(str(conversation_reference))

        activity = Activity.create_message_activity()
        activity.apply_conversation_reference(conversation_reference)

        return activity
    def create_begin_activity(self, action_id: str):
        if action_id not in self.SkillAction:
            raise Exception(
                f'Unable to create begin activity for "${action_id}".')

        # We only support one activity for Echo so no further checks are needed
        activity = Activity.create_message_activity()
        activity.name = self.SkillAction.MESSAGE.value
        activity.text = "Begin the Echo Skill"

        return activity
Exemple #4
0
    async def test_end_of_conversation_from_expect_replies_calls_delete_conversation_reference(
        self,
    ):
        activity_sent: Activity = None

        # Callback to capture the parameters sent to the skill
        async def capture_action(
            from_bot_id: str,  # pylint: disable=unused-argument
            to_bot_id: str,  # pylint: disable=unused-argument
            to_uri: str,  # pylint: disable=unused-argument
            service_url: str,  # pylint: disable=unused-argument
            conversation_id: str,  # pylint: disable=unused-argument
            activity: Activity,
        ):
            # Capture values sent to the skill so we can assert the right parameters were used.
            nonlocal activity_sent
            activity_sent = activity

        eoc = Activity.create_end_of_conversation_activity()
        expected_replies = list([eoc])

        # Create a mock skill client to intercept calls and capture what is sent.
        mock_skill_client = self._create_mock_skill_client(
            capture_action, expected_replies=expected_replies
        )

        # Use Memory for conversation state
        conversation_state = ConversationState(MemoryStorage())
        dialog_options = self.create_skill_dialog_options(
            conversation_state, mock_skill_client
        )

        # Create the SkillDialogInstance and the activity to send.
        sut = SkillDialog(dialog_options, dialog_id="dialog")
        activity_to_send = Activity.create_message_activity()
        activity_to_send.delivery_mode = DeliveryModes.expect_replies
        activity_to_send.text = str(uuid.uuid4())
        client = DialogTestClient(
            "test",
            sut,
            BeginSkillDialogOptions(activity_to_send),
            conversation_state=conversation_state,
        )

        # Send something to the dialog to start it
        await client.send_activity("hello")

        simple_id_factory: SimpleConversationIdFactory = dialog_options.conversation_id_factory
        self.assertEqual(0, len(simple_id_factory.conversation_refs))
        self.assertEqual(1, simple_id_factory.create_count)
Exemple #5
0
    async def test_legacy_conversation_id_factory(self):
        mock_adapter = Mock()

        legacy_factory = LegacyConversationIdFactoryForTest()
        conversation_reference = ConversationReference(
            conversation=ConversationAccount(id=str(uuid4())),
            service_url="http://testbot.com/api/messages",
        )

        conversation_id = await legacy_factory.create_skill_conversation_id(
            conversation_reference
        )

        async def continue_conversation(
            reference: ConversationReference,
            callback: Callable,
            bot_id: str = None,
            claims_identity: ClaimsIdentity = None,
            audience: str = None,
        ):  # pylint: disable=unused-argument
            # Invoke the callback created by the handler so we can assert the rest of the execution.
            turn_context = TurnContext(
                mock_adapter,
                conversation_reference_extension.get_continuation_activity(
                    conversation_reference
                ),
            )
            await callback(turn_context)

        async def send_activities(
            context: TurnContext, activities: List[Activity]
        ):  # pylint: disable=unused-argument
            return [ResourceResponse(id="resourceId")]

        mock_adapter.continue_conversation = continue_conversation
        mock_adapter.send_activities = send_activities

        activity = Activity.create_message_activity()
        activity.apply_conversation_reference(conversation_reference)

        sut = self.create_skill_handler_for_testing(mock_adapter, legacy_factory)
        await sut.test_on_send_to_conversation(
            self._claims_identity, conversation_id, activity
        )
    def test_create_message_activity(self):
        # Act
        result = Activity.create_message_activity()

        # Assert
        self.assertEqual(result.type, ActivityTypes.message)