def create_thread(self):
        token = self.token
        endpoint = self.endpoint
        user = self.user
        # [START create_thread]
        from datetime import datetime

        from azure.communication.chat import (ChatClient, ChatParticipant,
                                              CommunicationUserIdentifier,
                                              CommunicationTokenCredential)

        # set `endpoint` to an existing ACS endpoint
        chat_client = ChatClient(endpoint, CommunicationTokenCredential(token))

        topic = "test topic"
        participants = [
            ChatParticipant(identifier=user,
                            display_name='name',
                            share_history_time=datetime.utcnow())
        ]

        # creates a new chat_thread everytime
        create_chat_thread_result = chat_client.create_chat_thread(
            topic, thread_participants=participants)

        # creates a new chat_thread if not exists
        idempotency_token = 'b66d6031-fdcc-41df-8306-e524c9f226b8'  # unique identifier
        create_chat_thread_result_w_repeatability_id = chat_client.create_chat_thread(
            topic,
            thread_participants=participants,
            idempotency_token=idempotency_token)
        # [END create_thread]

        self._thread_id = create_chat_thread_result.chat_thread.id
        print("thread created, id: " + self._thread_id)
Esempio n. 2
0
    def create_thread(self):
        # [START create_thread]
        from datetime import datetime
        from azure.communication.chat import(
            ChatClient,
            CommunicationUserIdentifier,
            CommunicationTokenCredential,
            CommunicationTokenRefreshOptions
            ChatThreadParticipant
        )

        refresh_options = CommunicationTokenRefreshOptions(self.token)
        chat_client = ChatClient(self.endpoint, CommunicationTokenCredential(refresh_options))

        topic = "test topic"
        participants = [ChatThreadParticipant(
            user=self.user,
            display_name='name',
            share_history_time=datetime.utcnow()
        )]

        # creates a new chat_thread everytime
        chat_thread_client = chat_client.create_chat_thread(topic, participants)

        # creates a new chat_thread if not exists
        repeatability_request_id = 'b66d6031-fdcc-41df-8306-e524c9f226b8' # unique identifier
        chat_thread_client_w_repeatability_id = chat_client.create_chat_thread(topic,
                                                                               participants,
                                                                               repeatability_request_id)
        # [END create_thread]

        self._thread_id = chat_thread_client.thread_id
        print("thread created, id: " + self._thread_id)
 def create_chat_thread_client(self):
     token = self.token
     endpoint = self.endpoint
     user = self.user
     # [START create_chat_thread_client]
     from datetime import datetime
     from azure.communication.identity import CommunicationUserIdentifier
     from azure.communication.chat import (
         ChatClient,
         ChatThreadParticipant,
         CommunicationTokenCredential
     )
     # retrieve `token` using CommunicationIdentityClient.get_token method
     # set `endpoint` to ACS service endpoint
     # create `user` using CommunicationIdentityClient.create_user method for new users;
     # else for existing users set `user` = CommunicationUserIdentifier(some_user_id)
     chat_client = ChatClient(endpoint, CommunicationTokenCredential(token))
     topic = "test topic"
     participants = [ChatThreadParticipant(
         user=user,
         display_name='name',
         share_history_time=datetime.utcnow()
     )]
     create_chat_thread_result = chat_client.create_chat_thread(topic, thread_participants=participants)
     chat_thread_client = chat_client.get_chat_thread_client(create_chat_thread_result.chat_thread.id)
     # [END create_chat_thread_client]
     self._thread_id = create_chat_thread_result.chat_thread.id
     print("chat_thread_client created")
Esempio n. 4
0
    def test_access_token_validation(self):
        """
        This is to make sure that consecutive calls made using the same chat_client or chat_thread_client
        does not throw an exception due to mismatch in the generation of azure.core.credentials.AccessToken
        """

        # create ChatClient
        chat_client = ChatClient(self.endpoint,
                                 CommunicationTokenCredential(self.token))
        raised = False
        try:
            # create chat thread
            topic1 = "test topic1"
            create_chat_thread1_result = chat_client.create_chat_thread(topic1)
            self.thread_id = create_chat_thread1_result.chat_thread.id

            # get chat thread client
            chat_thread1_client = chat_client.get_chat_thread_client(
                self.thread_id)

            # list all chat threads
            chat_thead_infos = chat_client.list_chat_threads()
            for chat_threads_info_page in chat_thead_infos.by_page():
                for chat_thread_info in chat_threads_info_page:
                    print("ChatThreadInfo: ", chat_thread_info)
        except:
            raised = True

        assert raised is False
    def test_create_chat_thread(self):
        thread_id = "19:[email protected]"
        chat_thread_client = None
        raised = False

        def mock_send(*_, **__):
            return mock_response(status_code=207,
                                 json_payload={
                                     "multipleStatus": [{
                                         "id": thread_id,
                                         "statusCode": 201,
                                         "type": "Thread"
                                     }]
                                 })

        chat_client = ChatClient("https://endpoint",
                                 TestChatClient.credential,
                                 transport=Mock(send=mock_send))

        topic = "test topic"
        user = CommunicationUser(
            "8:acs:57b9bac9-df6c-4d39-a73b-26e944adf6ea_9b0110-08007f1041")
        members = [
            ChatThreadMember(user=user,
                             display_name='name',
                             share_history_time=datetime.utcnow())
        ]
        try:
            chat_thread_client = chat_client.create_chat_thread(topic, members)
        except:
            raised = True
            raise

        self.assertFalse(raised, 'Expected is no excpetion raised')
        assert chat_thread_client.thread_id == thread_id
    def test_create_chat_thread_w_repeatability_request_id(self):
        thread_id = "19:[email protected]"
        chat_thread_client = None
        raised = False
        idempotency_token = "b66d6031-fdcc-41df-8306-e524c9f226b8"

        def mock_send(*_, **__):
            return mock_response(
                status_code=201,
                json_payload={
                    "chatThread": {
                        "id":
                        thread_id,
                        "topic":
                        "test topic",
                        "createdOn":
                        "2020-12-03T21:09:17Z",
                        "createdBy":
                        "8:acs:57b9bac9-df6c-4d39-a73b-26e944adf6ea_9b0110-08007f1041"
                    }
                })

        chat_client = ChatClient("https://endpoint",
                                 TestChatClient.credential,
                                 transport=Mock(send=mock_send))

        topic = "test topic"
        user = CommunicationUserIdentifier(
            "8:acs:57b9bac9-df6c-4d39-a73b-26e944adf6ea_9b0110-08007f1041")
        participants = [
            ChatParticipant(identifier=user,
                            display_name='name',
                            share_history_time=datetime.utcnow())
        ]
        try:
            create_chat_thread_result = chat_client.create_chat_thread(
                topic=topic,
                thread_participants=participants,
                idempotency_token=idempotency_token)
        except:
            raised = True
            raise

        self.assertFalse(raised, 'Expected is no excpetion raised')
        assert create_chat_thread_result.chat_thread.id == thread_id
Esempio n. 7
0
 def create_chat_thread_client(self):
     # [START create_chat_thread_client]
     from datetime import datetime
     from azure.communication.chat import (ChatClient, ChatThreadMember,
                                           CommunicationUser,
                                           CommunicationUserCredential)
     chat_client = ChatClient(self.endpoint,
                              CommunicationUserCredential(self.token))
     topic = "test topic"
     members = [
         ChatThreadMember(user=self.user,
                          display_name='name',
                          share_history_time=datetime.utcnow())
     ]
     chat_thread_client = chat_client.create_chat_thread(topic, members)
     # [END create_chat_thread_client]
     self._thread_id = chat_thread_client.thread_id
     print("chat_thread_client created")
Esempio n. 8
0
 def create_chat_thread_client(self):
     # [START create_chat_thread_client]
     from datetime import datetime
     from azure.communication.chat import (
         ChatClient,
         CommunicationUserIdentifier,
         CommunicationTokenCredential,
         CommunicationTokenRefreshOptions,
         ChatThreadParticipant
     )
     refresh_options = CommunicationTokenRefreshOptions(self.token)
     chat_client = ChatClient(self.endpoint, CommunicationTokenCredential(refresh_options))
     topic = "test topic"
     participants = [ChatThreadParticipant(
         user=self.user,
         display_name='name',
         share_history_time=datetime.utcnow()
     )]
     chat_thread_client = chat_client.create_chat_thread(topic, participants)
     # [END create_chat_thread_client]
     self._thread_id = chat_thread_client.thread_id
     print("chat_thread_client created")
Esempio n. 9
0
class ChatClientTest(CommunicationTestCase):
    def setUp(self):
        super(ChatClientTest, self).setUp()

        self.recording_processors.extend([
            BodyReplacerProcessor(keys=["id", "token", "createdBy", "participants", "multipleStatus", "value"]),
            URIIdentityReplacer(),
            ChatURIReplacer()])

        self.identity_client = CommunicationIdentityClient.from_connection_string(
            self.connection_str)

        endpoint, _ = parse_connection_str(self.connection_str)
        self.endpoint = endpoint

        # create user and issue token
        self.user = self.identity_client.create_user()
        tokenresponse = self.identity_client.get_token(self.user, scopes=["chat"])
        self.token = tokenresponse.token

        # create ChatClient
        refresh_options = CommunicationTokenRefreshOptions(self.token)
        self.chat_client = ChatClient(self.endpoint, CommunicationTokenCredential(refresh_options))

    def tearDown(self):
        super(ChatClientTest, self).tearDown()

        # delete created users and chat threads
        if not self.is_playback():
            self.identity_client.delete_user(self.user)
            self.chat_client.delete_chat_thread(self.thread_id)

    def _create_thread(self, repeatability_request_id=None):
        # create chat thread
        topic = "test topic"
        share_history_time = datetime.utcnow()
        share_history_time = share_history_time.replace(tzinfo=TZ_UTC)
        participants = [ChatThreadParticipant(
            user=self.user,
            display_name='name',
            share_history_time=share_history_time
        )]
        chat_thread_client = self.chat_client.create_chat_thread(topic, participants, repeatability_request_id)
        self.thread_id = chat_thread_client.thread_id

    @pytest.mark.live_test_only
    def test_create_chat_thread(self):
        self._create_thread()
        assert self.thread_id is not None

    @pytest.mark.live_test_only
    def test_create_chat_thread_w_repeatability_request_id(self):
        repeatability_request_id = str(uuid4())
        # create thread
        self._create_thread(repeatability_request_id=repeatability_request_id)
        thread_id = self.thread_id

        # re-create thread with same repeatability_request_id
        self._create_thread(repeatability_request_id=repeatability_request_id)

        # test idempotency
        assert thread_id == self.thread_id

    @pytest.mark.live_test_only
    def test_get_chat_thread(self):
        self._create_thread()
        get_thread_result = self.chat_client.get_chat_thread(self.thread_id)
        assert get_thread_result.id == self.thread_id

    @pytest.mark.live_test_only
    def test_list_chat_threads(self):
        self._create_thread()
        if self.is_live:
            time.sleep(2)

        chat_thread_infos = self.chat_client.list_chat_threads(results_per_page=1)
        for chat_thread_page in chat_thread_infos.by_page():
            li = list(chat_thread_page)
            assert len(li) <= 1

    @pytest.mark.live_test_only
    def test_get_thread_client(self):
        self._create_thread()
        chat_thread_client = self.chat_client.get_chat_thread_client(self.thread_id)
        assert chat_thread_client.thread_id == self.thread_id

    @pytest.mark.live_test_only
    def test_delete_chat_thread(self):
        self._create_thread()
        self.chat_client.delete_chat_thread(self.thread_id)
Esempio n. 10
0
class ChatClientTest(CommunicationTestCase):
    def setUp(self):
        super(ChatClientTest, self).setUp()

        self.recording_processors.extend([
            BodyReplacerProcessor(keys=[
                "id", "token", "createdBy", "participants", "multipleStatus",
                "value"
            ]),
            URIIdentityReplacer(),
            ChatURIReplacer()
        ])

        self.identity_client = CommunicationIdentityClient.from_connection_string(
            self.connection_str)

        endpoint, _ = parse_connection_str(self.connection_str)
        self.endpoint = endpoint

        # create user and issue token
        self.user = self.identity_client.create_user()
        tokenresponse = self.identity_client.get_token(self.user,
                                                       scopes=["chat"])
        self.token = tokenresponse.token

        # create ChatClient
        self.chat_client = ChatClient(self.endpoint,
                                      CommunicationTokenCredential(self.token))

    def tearDown(self):
        super(ChatClientTest, self).tearDown()

        # delete created users and chat threads
        if not self.is_playback():
            self.chat_client.delete_chat_thread(self.thread_id)
            self.identity_client.delete_user(self.user)

    def _create_thread(self, idempotency_token=None):
        # create chat thread
        topic = "test topic"
        share_history_time = datetime.utcnow()
        share_history_time = share_history_time.replace(tzinfo=TZ_UTC)
        participants = [
            ChatParticipant(identifier=self.user,
                            display_name='name',
                            share_history_time=share_history_time)
        ]
        create_chat_thread_result = self.chat_client.create_chat_thread(
            topic,
            thread_participants=participants,
            idempotency_token=idempotency_token)
        self.thread_id = create_chat_thread_result.chat_thread.id

    @pytest.mark.live_test_only
    def test_access_token_validation(self):
        """
        This is to make sure that consecutive calls made using the same chat_client or chat_thread_client
        does not throw an exception due to mismatch in the generation of azure.core.credentials.AccessToken
        """

        # create ChatClient
        chat_client = ChatClient(self.endpoint,
                                 CommunicationTokenCredential(self.token))
        raised = False
        try:
            # create chat thread
            topic1 = "test topic1"
            create_chat_thread1_result = chat_client.create_chat_thread(topic1)
            self.thread_id = create_chat_thread1_result.chat_thread.id

            # get chat thread client
            chat_thread1_client = chat_client.get_chat_thread_client(
                self.thread_id)

            # list all chat threads
            chat_thead_infos = chat_client.list_chat_threads()
            for chat_threads_info_page in chat_thead_infos.by_page():
                for chat_thread_info in chat_threads_info_page:
                    print("ChatThreadInfo: ", chat_thread_info)
        except:
            raised = True

        assert raised is False

    @pytest.mark.live_test_only
    def test_create_chat_thread(self):
        self._create_thread()
        assert self.thread_id is not None

    @pytest.mark.live_test_only
    def test_create_chat_thread_w_no_participants(self):
        # create chat thread
        topic = "test topic"
        create_chat_thread_result = self.chat_client.create_chat_thread(topic)
        self.thread_id = create_chat_thread_result.chat_thread.id
        assert create_chat_thread_result.chat_thread is not None
        assert create_chat_thread_result.errors is None

    @pytest.mark.live_test_only
    def test_create_chat_thread_w_repeatability_request_id(self):
        idempotency_token = str(uuid4())
        # create thread
        self._create_thread(idempotency_token=idempotency_token)
        thread_id = self.thread_id

        # re-create thread with same idempotency_token
        self._create_thread(idempotency_token=idempotency_token)

        # test idempotency
        assert thread_id == self.thread_id

    @pytest.mark.live_test_only
    def test_list_chat_threads(self):
        self._create_thread()
        if self.is_live:
            time.sleep(2)

        chat_threads = self.chat_client.list_chat_threads(results_per_page=1)
        for chat_thread_item_page in chat_threads.by_page():
            li = list(chat_thread_item_page)
            assert len(li) <= 1

    @pytest.mark.live_test_only
    def test_get_thread_client(self):
        self._create_thread()
        chat_thread_client = self.chat_client.get_chat_thread_client(
            self.thread_id)
        assert chat_thread_client.thread_id == self.thread_id

    @pytest.mark.live_test_only
    def test_delete_chat_thread(self):
        self._create_thread()
        self.chat_client.delete_chat_thread(self.thread_id)
Esempio n. 11
0
class ChatThreadClientTest(CommunicationTestCase):
    def setUp(self):
        super(ChatThreadClientTest, self).setUp()
        self.recording_processors.extend([
            BodyReplacerProcessor(keys=[
                "id", "token", "senderId", "chatMessageId", "nextLink",
                "participants", "multipleStatus", "value"
            ]),
            URIIdentityReplacer(),
            ChatURIReplacer()
        ])

        self.identity_client = CommunicationIdentityClient.from_connection_string(
            self.connection_str)

        endpoint, _ = parse_connection_str(self.connection_str)
        self.endpoint = endpoint

        # create user and issue token
        self.user = self.identity_client.create_user()
        tokenresponse = self.identity_client.get_token(self.user,
                                                       scopes=["chat"])
        self.token = tokenresponse.token

        # create another user
        self.new_user = self.identity_client.create_user()
        tokenresponse = self.identity_client.get_token(self.new_user,
                                                       scopes=["chat"])
        self.token_new_user = tokenresponse.token

        # create ChatClient
        refresh_options = CommunicationTokenRefreshOptions(self.token)
        refresh_options_new_user = CommunicationTokenRefreshOptions(
            self.token_new_user)
        self.chat_client = ChatClient(
            self.endpoint, CommunicationTokenCredential(refresh_options))
        self.chat_client_new_user = ChatClient(
            self.endpoint,
            CommunicationTokenCredential(refresh_options_new_user))

    def tearDown(self):
        super(ChatThreadClientTest, self).tearDown()

        # delete created users and chat threads
        if not self.is_playback():
            self.identity_client.delete_user(self.user)
            self.identity_client.delete_user(self.new_user)
            self.chat_client.delete_chat_thread(self.thread_id)

    def _create_thread(self, **kwargs):
        # create chat thread, and ChatThreadClient
        topic = "test topic"
        share_history_time = datetime.utcnow()
        share_history_time = share_history_time.replace(tzinfo=TZ_UTC)
        participants = [
            ChatThreadParticipant(user=self.user,
                                  display_name='name',
                                  share_history_time=share_history_time)
        ]
        create_chat_thread_result = self.chat_client.create_chat_thread(
            topic, thread_participants=participants)
        self.chat_thread_client = self.chat_client.get_chat_thread_client(
            create_chat_thread_result.chat_thread.id)
        self.thread_id = self.chat_thread_client.thread_id

    def _create_thread_w_two_users(self, **kwargs):
        # create chat thread, and ChatThreadClient
        topic = "test topic"
        share_history_time = datetime.utcnow()
        share_history_time = share_history_time.replace(tzinfo=TZ_UTC)
        participants = [
            ChatThreadParticipant(user=self.user,
                                  display_name='name',
                                  share_history_time=share_history_time),
            ChatThreadParticipant(user=self.new_user,
                                  display_name='name',
                                  share_history_time=share_history_time)
        ]
        create_chat_thread_result = self.chat_client.create_chat_thread(
            topic, thread_participants=participants)
        self.chat_thread_client = self.chat_client.get_chat_thread_client(
            create_chat_thread_result.chat_thread.id)
        self.thread_id = self.chat_thread_client.thread_id

    def _send_message(self):
        # send a message
        content = 'hello world'
        sender_display_name = 'sender name'
        create_message_result_id = self.chat_thread_client.send_message(
            content, sender_display_name=sender_display_name)
        message_id = create_message_result_id
        return message_id

    @pytest.mark.live_test_only
    def test_update_topic(self):
        self._create_thread()
        topic = "update topic"
        self.chat_thread_client.update_topic(topic=topic)

    @pytest.mark.live_test_only
    def test_send_message(self):
        self._create_thread()

        content = 'hello world'
        sender_display_name = 'sender name'

        create_message_result_id = self.chat_thread_client.send_message(
            content, sender_display_name=sender_display_name)

        assert create_message_result_id is not None

    @pytest.mark.live_test_only
    def test_get_message(self):
        self._create_thread()
        message_id = self._send_message()
        message = self.chat_thread_client.get_message(message_id)
        assert message.id == message_id
        assert message.type == ChatMessageType.TEXT
        assert message.content.message == 'hello world'

    @pytest.mark.live_test_only
    def test_list_messages(self):
        self._create_thread()
        self._send_message()

        chat_messages = self.chat_thread_client.list_messages(
            results_per_page=1)

        for chat_message in chat_messages.by_page():
            li = list(chat_message)
            assert len(li) <= 1

    @pytest.mark.live_test_only
    def test_update_message(self):
        self._create_thread()
        message_id = self._send_message()

        content = "updated message content"
        self.chat_thread_client.update_message(message_id, content=content)

    @pytest.mark.live_test_only
    def test_delete_message(self):
        self._create_thread()
        message_id = self._send_message()

        self.chat_thread_client.delete_message(message_id)

    @pytest.mark.live_test_only
    def test_list_participants(self):
        self._create_thread()

        # add another participant
        share_history_time = datetime.utcnow()
        share_history_time = share_history_time.replace(tzinfo=TZ_UTC)
        new_participant = ChatThreadParticipant(
            user=self.new_user,
            display_name='name',
            share_history_time=share_history_time)

        self.chat_thread_client.add_participant(new_participant)

        # fetch list of participants
        chat_thread_participants = self.chat_thread_client.list_participants(
            results_per_page=1, skip=1)

        participant_count = 0

        for chat_thread_participant_page in chat_thread_participants.by_page():
            li = list(chat_thread_participant_page)
            assert len(li) <= 1
            participant_count += len(li)
            li[0].user.id = self.user.identifier
        assert participant_count == 1

    @pytest.mark.live_test_only
    def test_add_participant(self):
        self._create_thread()

        share_history_time = datetime.utcnow()
        share_history_time = share_history_time.replace(tzinfo=TZ_UTC)
        new_participant = ChatThreadParticipant(
            user=self.new_user,
            display_name='name',
            share_history_time=share_history_time)
        raised = False

        try:
            self.chat_thread_client.add_participant(new_participant)
        except RuntimeError as e:
            raised = True

        assert raised is False

    @pytest.mark.live_test_only
    def test_add_participants(self):
        self._create_thread()

        share_history_time = datetime.utcnow()
        share_history_time = share_history_time.replace(tzinfo=TZ_UTC)
        new_participant = ChatThreadParticipant(
            user=self.new_user,
            display_name='name',
            share_history_time=share_history_time)
        participants = [new_participant]

        failed_participants = self.chat_thread_client.add_participants(
            participants)

        # no error occured while adding participants
        assert len(failed_participants) == 0

    @pytest.mark.live_test_only
    def test_remove_participant(self):
        self._create_thread()

        # add participant first
        share_history_time = datetime.utcnow()
        share_history_time = share_history_time.replace(tzinfo=TZ_UTC)
        new_participant = ChatThreadParticipant(
            user=self.new_user,
            display_name='name',
            share_history_time=share_history_time)
        participants = [new_participant]

        self.chat_thread_client.add_participants(participants)

        # test remove participant
        self.chat_thread_client.remove_participant(self.new_user)

    @pytest.mark.live_test_only
    def test_send_typing_notification(self):
        self._create_thread()

        self.chat_thread_client.send_typing_notification()

    @pytest.mark.live_test_only
    def test_send_read_receipt(self):
        self._create_thread()
        message_id = self._send_message()

        self.chat_thread_client.send_read_receipt(message_id)

    def _wait_on_thread(self, chat_client, thread_id, message_id):
        # print("Read Receipts Sent: ", read_receipts_sent)
        chat_thread_client = chat_client.get_chat_thread_client(thread_id)
        for _ in range(10):
            read_receipts_paged = chat_thread_client.list_read_receipts()
            chat_message_ids = []
            for page in read_receipts_paged.by_page():
                for item in page:
                    chat_message_ids.append(item.chat_message_id)

            if message_id in chat_message_ids:
                return
            else:
                print("Sleeping for additional 2 secs")
                time.sleep(2)
        raise Exception("Read receipts not updated in 20 seconds. Failing.")

    @pytest.mark.live_test_only
    def test_list_read_receipts(self):
        self._create_thread_w_two_users()

        # first user send 2 messages
        # send messages and read receipts
        for i in range(2):
            message_id = self._send_message()
            self.chat_thread_client.send_read_receipt(message_id)

            if self.is_live:
                self._wait_on_thread(chat_client=self.chat_client,
                                     thread_id=self.thread_id,
                                     message_id=message_id)

        # get chat thread client for second user
        chat_thread_client_new_user = self.chat_client_new_user.get_chat_thread_client(
            self.thread_id)
        # second user sends 1 message
        message_id_new_user = chat_thread_client_new_user.send_message(
            "content", sender_display_name="sender_display_name")
        # send read receipt
        chat_thread_client_new_user.send_read_receipt(message_id_new_user)

        if self.is_live:
            self._wait_on_thread(chat_client=self.chat_client_new_user,
                                 thread_id=self.thread_id,
                                 message_id=message_id_new_user)

        # list read receipts
        read_receipts = self.chat_thread_client.list_read_receipts(
            results_per_page=2, skip=0)

        items = []
        for page in read_receipts.by_page():
            for item in page:
                items.append(item)

        assert len(items) == 2

    @pytest.mark.live_test_only
    def test_get_properties(self):
        self._create_thread()
        get_thread_result = self.chat_thread_client.get_properties(
            self.thread_id)
        assert get_thread_result.id == self.thread_id
class ChatThreadClientTest(CommunicationTestCase):
    def setUp(self):
        super(ChatThreadClientTest, self).setUp()
        self.recording_processors.extend([
            BodyReplacerProcessor(keys=[
                "id", "token", "senderId", "chatMessageId", "nextLink",
                "members", "multipleStatus", "value"
            ]),
            URIIdentityReplacer(),
            ChatURIReplacer()
        ])

        self.identity_client = CommunicationIdentityClient.from_connection_string(
            self.connection_str)

        endpoint, _ = parse_connection_str(self.connection_str)
        self.endpoint = endpoint

        # create user and issue token
        self.user = self.identity_client.create_user()
        tokenresponse = self.identity_client.issue_token(self.user,
                                                         scopes=["chat"])
        self.token = tokenresponse.token

        # create another user
        self.new_user = self.identity_client.create_user()

        # create ChatClient
        self.chat_client = ChatClient(self.endpoint,
                                      CommunicationTokenCredential(self.token))

    def tearDown(self):
        super(ChatThreadClientTest, self).tearDown()

        # delete created users and chat threads
        if not self.is_playback():
            self.identity_client.delete_user(self.user)
            self.identity_client.delete_user(self.new_user)
            self.chat_client.delete_chat_thread(self.thread_id)

    def _create_thread(self):
        # create chat thread, and ChatThreadClient
        topic = "test topic"
        share_history_time = datetime.utcnow()
        share_history_time = share_history_time.replace(tzinfo=TZ_UTC)
        members = [
            ChatThreadMember(user=self.user,
                             display_name='name',
                             share_history_time=share_history_time)
        ]
        self.chat_thread_client = self.chat_client.create_chat_thread(
            topic, members)
        self.thread_id = self.chat_thread_client.thread_id

    @pytest.mark.live_test_only
    def _send_message(self):
        # send a message
        priority = ChatMessagePriority.NORMAL
        content = 'hello world'
        sender_display_name = 'sender name'
        create_message_result = self.chat_thread_client.send_message(
            content,
            priority=priority,
            sender_display_name=sender_display_name)
        self.message_id = create_message_result.id

    @pytest.mark.live_test_only
    def test_update_thread(self):
        self._create_thread()
        topic = "update topic"
        self.chat_thread_client.update_thread(topic=topic)

    @pytest.mark.live_test_only
    def test_send_message(self):
        self._create_thread()

        priority = ChatMessagePriority.NORMAL
        content = 'hello world'
        sender_display_name = 'sender name'

        create_message_result = self.chat_thread_client.send_message(
            content,
            priority=priority,
            sender_display_name=sender_display_name)

        assert create_message_result.id is not None

    @pytest.mark.live_test_only
    def test_get_message(self):
        self._create_thread()
        self._send_message()
        message = self.chat_thread_client.get_message(self.message_id)
        assert message.id == self.message_id

    @pytest.mark.live_test_only
    def test_list_messages(self):
        self._create_thread()
        self._send_message()
        if self.is_live:
            time.sleep(2)

        chat_messages = self.chat_thread_client.list_messages(
            results_per_page=1)

        for chat_message in chat_messages.by_page():
            li = list(chat_message)
            assert len(li) <= 1

    @pytest.mark.live_test_only
    def test_update_message(self):
        self._create_thread()
        self._send_message()

        content = "updated message content"
        self.chat_thread_client.update_message(self.message_id,
                                               content=content)

    @pytest.mark.live_test_only
    def test_delete_message(self):
        self._create_thread()
        self._send_message()

        self.chat_thread_client.delete_message(self.message_id)

    @pytest.mark.live_test_only
    def test_list_members(self):
        self._create_thread()
        if self.is_live:
            time.sleep(2)

        chat_thread_members = self.chat_thread_client.list_members()

        for chat_thread_member_page in chat_thread_members.by_page():
            li = list(chat_thread_member_page)
            assert len(li) == 1
            li[0].user.id = self.user.identifier

    @pytest.mark.live_test_only
    def test_add_members(self):
        self._create_thread()

        share_history_time = datetime.utcnow()
        share_history_time = share_history_time.replace(tzinfo=TZ_UTC)
        new_member = ChatThreadMember(user=self.new_user,
                                      display_name='name',
                                      share_history_time=share_history_time)
        members = [new_member]

        self.chat_thread_client.add_members(members)

    @pytest.mark.live_test_only
    def test_remove_member(self):
        self._create_thread()

        # add member first
        share_history_time = datetime.utcnow()
        share_history_time = share_history_time.replace(tzinfo=TZ_UTC)
        new_member = ChatThreadMember(user=self.new_user,
                                      display_name='name',
                                      share_history_time=share_history_time)
        members = [new_member]

        self.chat_thread_client.add_members(members)

        # test remove member
        self.chat_thread_client.remove_member(self.new_user)

    @pytest.mark.live_test_only
    def test_send_typing_notification(self):
        self._create_thread()

        self.chat_thread_client.send_typing_notification()
Esempio n. 13
0
from datetime import datetime, timedelta
from azure.communication.chat import ChatMessageType
from azure.communication.identity import CommunicationIdentityClient
from azure.communication.chat import ChatParticipant

try:
    print('Azure Communication Services - Chat Quickstart')
    # Create a chat client
    endpoint = "https://<RESOURCE_NAME>.communication.azure.com"
    chat_client = ChatClient(endpoint,
                             CommunicationTokenCredential("<Access Token>"))

    # Start a chat thread
    topic = "test topic"

    create_chat_thread_result = chat_client.create_chat_thread(topic)
    chat_thread_client = chat_client.get_chat_thread_client(
        create_chat_thread_result.chat_thread.id)

    # Get a chat thread client
    thread_id = create_chat_thread_result.chat_thread.id
    chat_thread_client = chat_client.get_chat_thread_client(thread_id)

    # List all chat threads
    start_time = datetime.utcnow() - timedelta(days=2)

    chat_threads = chat_client.list_chat_threads(results_per_page=5,
                                                 start_time=start_time)
    for chat_thread_item_page in chat_threads.by_page():
        for chat_thread_item in chat_thread_item_page:
            print(chat_thread_item)