public async Task <ActionResult> TryAddUserToThread(string threadId, ContosoMemberModel user) { var moderatorId = _store.Store[threadId]; AccessToken moderatorToken = await _userTokenManager.GenerateTokenAsync(_resourceConnectionString, moderatorId); ChatClient chatClient = new ChatClient( new Uri(_chatGatewayUrl), new CommunicationTokenCredential(moderatorToken.Token)); ChatThreadClient chatThreadClient = chatClient.GetChatThreadClient(threadId); var threadProperties = await chatThreadClient.GetPropertiesAsync(); var chatParticipant = new ChatParticipant(new CommunicationUserIdentifier(user.Id)); chatParticipant.DisplayName = user.DisplayName; chatParticipant.ShareHistoryTime = threadProperties.Value.CreatedOn; try { Response response = await chatThreadClient.AddParticipantAsync(chatParticipant); return(Ok()); } catch (Exception e) { Console.WriteLine($"Unexpected error occurred while adding user from thread: {e}"); } return(Ok()); }
public async Task GetThreadShouldSucceed() { //arrange var threadId = "19:[email protected]"; ChatThreadClient chatThreadClient = CreateMockChatThreadClient(200, GetThreadApiResponsePayload); //act ChatThreadProperties chatThread = await chatThreadClient.GetPropertiesAsync(); //assert Assert.AreEqual(threadId, chatThread.Id); Assert.AreEqual("Test Thread", chatThread.Topic); Assert.AreEqual("8:acs:1b5cc06b-f352-4571-b1e6-d9b259b7c776_00000007-8f5e-776d-ea7c-5a3a0d0027b7", CommunicationIdentifierSerializer.Serialize(chatThread.CreatedBy).CommunicationUser.Id); }
public async Task Thread_CGUD__Participant_AUR__Message_GSU__Notification_T() { //arr Console.WriteLine($"ThreadCGUD_ParticipantAUR_MessageGSU_NotificationT_Async Running on RecordedTestMode : {Mode}"); CommunicationIdentityClient communicationIdentityClient = CreateInstrumentedCommunicationIdentityClient(); (CommunicationUserIdentifier user1, string token1) = await CreateUserAndTokenAsync(communicationIdentityClient); (CommunicationUserIdentifier user2, _) = await CreateUserAndTokenAsync(communicationIdentityClient); (CommunicationUserIdentifier user3, string token3) = await CreateUserAndTokenAsync(communicationIdentityClient); (CommunicationUserIdentifier user4, _) = await CreateUserAndTokenAsync(communicationIdentityClient); (CommunicationUserIdentifier user5, _) = await CreateUserAndTokenAsync(communicationIdentityClient); string repeatabilityRequestId1 = "contoso-C0A747F1-6245-4307-8267-B974340677DC"; string repeatabilityRequestId2 = "contoso-D0A747F1-6245-4307-8267-B974340677DD"; var topic = "Thread async from C# sdk"; var displayNameMessage = "DisplayName sender message 1"; var participants = new List <ChatParticipant> { new ChatParticipant(user1) { DisplayName = "user1" }, new ChatParticipant(user2) { DisplayName = "user2" }, new ChatParticipant(user3) { DisplayName = "user3" } }; ChatClient chatClient = CreateInstrumentedChatClient(token1); ChatClient chatClient3 = CreateInstrumentedChatClient(token3); //act CreateChatThreadResult createChatThreadResult = await chatClient.CreateChatThreadAsync(topic, participants, repeatabilityRequestId1); ChatThreadClient chatThreadClient = GetInstrumentedChatThreadClient(chatClient, createChatThreadResult.ChatThread.Id); var threadId = chatThreadClient.Id; CreateChatThreadResult createChatThreadResult2 = await chatClient.CreateChatThreadAsync(topic, participants, repeatabilityRequestId2); ChatThreadClient chatThreadClient2 = GetInstrumentedChatThreadClient(chatClient, createChatThreadResult2.ChatThread.Id); ChatThreadClient chatThreadClient3 = GetInstrumentedChatThreadClient(chatClient3, threadId); AsyncPageable <ChatParticipant> chatParticipantsOnCreation = chatThreadClient.GetParticipantsAsync(); var chatParticipantsOnCreationCount = chatParticipantsOnCreation.ToEnumerableAsync().Result.Count; var updatedTopic = "Updated topic - C# sdk"; await chatThreadClient.UpdateTopicAsync(updatedTopic); ChatThreadProperties chatThread = await chatThreadClient.GetPropertiesAsync(); string messageContent = "Content for message 1"; SendChatMessageResult sendChatMessageResult = await chatThreadClient.SendMessageAsync(messageContent, ChatMessageType.Text, displayNameMessage); string messageId = sendChatMessageResult.Id; string messageContent2 = "Content for message 2"; SendChatMessageResult sendChatMessageResult2 = await chatThreadClient2.SendMessageAsync(messageContent2, ChatMessageType.Html, displayNameMessage); string messageId2 = sendChatMessageResult2.Id; string messageContent3 = "Content for message 3"; SendChatMessageResult sendChatMessageResult3 = await chatThreadClient3.SendMessageAsync(messageContent3, ChatMessageType.Text, displayNameMessage); string messageId3 = sendChatMessageResult3.Id; string messageContent4 = "Content for message 4"; SendChatMessageResult sendChatMessageResult4 = await chatThreadClient3.SendMessageAsync(messageContent4, ChatMessageType.Html, displayNameMessage); string messageId4 = sendChatMessageResult4.Id; string messageContent5 = "Content for message 5"; SendChatMessageResult sendChatMessageResult5 = await chatThreadClient3.SendMessageAsync(messageContent5, ChatMessageType.Text, displayNameMessage); string messageId5 = sendChatMessageResult5.Id; string messageContent6 = "Content for message 6"; SendChatMessageResult sendChatMessageResult6 = await chatThreadClient3.SendMessageAsync(messageContent6, ChatMessageType.Html, displayNameMessage); string messageId6 = sendChatMessageResult6.Id; SendChatMessageOptions sendChatMessageOptions7 = new() { Content = "Content for message 7", MessageType = ChatMessageType.Html, SenderDisplayName = "DisplayName sender message options message 7", Metadata = { { "tags", "tag value" }, { "deliveryMode", "deliveryMode value" },
public async Task CreateGetUpdateDeleteThreadAsync() { CommunicationIdentityClient communicationIdentityClient = new CommunicationIdentityClient(TestEnvironment.LiveTestDynamicConnectionString); Response <CommunicationUserIdentifier> threadCreatorIdentifier = await communicationIdentityClient.CreateUserAsync(); CommunicationUserIdentifier kimberly = await communicationIdentityClient.CreateUserAsync(); AccessToken communicationUserToken = await communicationIdentityClient.GetTokenAsync(threadCreatorIdentifier.Value, new[] { CommunicationTokenScope.Chat }); string userToken = communicationUserToken.Token; var endpoint = TestEnvironment.LiveTestDynamicEndpoint; #region Snippet:Azure_Communication_Chat_Tests_Samples_CreateChatClient ChatClient chatClient = new ChatClient( endpoint, new CommunicationTokenCredential(userToken)); #endregion Snippet:Azure_Communication_Chat_Tests_Samples_CreateChatClient #region Snippet:Azure_Communication_Chat_Tests_Samples_CreateThread var chatParticipant = new ChatParticipant(identifier: kimberly) { DisplayName = "Kim" }; CreateChatThreadResult createChatThreadResult = await chatClient.CreateChatThreadAsync(topic : "Hello world!", participants : new[] { chatParticipant }); string threadId = createChatThreadResult.ChatThread.Id; ChatThreadClient chatThreadClient = chatClient.GetChatThreadClient(threadId); #endregion Snippet:Azure_Communication_Chat_Tests_Samples_CreateThread #region Snippet:Azure_Communication_Chat_Tests_Samples_GetThread ChatThreadProperties chatThread = await chatThreadClient.GetPropertiesAsync(); #endregion Snippet:Azure_Communication_Chat_Tests_Samples_GetThread #region Snippet:Azure_Communication_Chat_Tests_Samples_GetThreads AsyncPageable <ChatThreadItem> chatThreadItems = chatClient.GetChatThreadsAsync(); await foreach (ChatThreadItem chatThreadItem in chatThreadItems) { Console.WriteLine($"{ chatThreadItem.Id}"); } #endregion Snippet:Azure_Communication_Chat_Tests_Samples_GetThreads #region Snippet:Azure_Communication_Chat_Tests_Samples_UpdateThread await chatThreadClient.UpdateTopicAsync(topic : "new topic !"); #endregion Snippet:Azure_Communication_Chat_Tests_Samples_UpdateThread #region Snippet:Azure_Communication_Chat_Tests_Samples_DeleteThread await chatClient.DeleteChatThreadAsync(threadId); #endregion Snippet:Azure_Communication_Chat_Tests_Samples_DeleteThread var josh = new ChatParticipant(new CommunicationUserIdentifier("invalid user")); #region Snippet:Azure_Communication_Chat_Tests_Samples_Troubleshooting try { CreateChatThreadResult createChatThreadErrorResult = await chatClient.CreateChatThreadAsync(topic : "Hello world!", participants : new[] { josh }); } catch (RequestFailedException ex) { Console.WriteLine(ex.Message); } #endregion Snippet:Azure_Communication_Chat_Tests_Samples_Troubleshooting catch (Exception ex) { Assert.Fail($"Unexpected error: {ex}"); } }
public async Task ThreadCGUD_ParticipantAUR_MessageGSU_NotificationT_Async() { //arr Console.WriteLine($"ThreadCGUD_ParticipantAUR_MessageGSU_NotificationT_Async Running on RecordedTestMode : {Mode}"); CommunicationIdentityClient communicationIdentityClient = CreateInstrumentedCommunicationIdentityClient(); (CommunicationUserIdentifier user1, string token1) = await CreateUserAndTokenAsync(communicationIdentityClient); (CommunicationUserIdentifier user2, _) = await CreateUserAndTokenAsync(communicationIdentityClient); (CommunicationUserIdentifier user3, string token3) = await CreateUserAndTokenAsync(communicationIdentityClient); (CommunicationUserIdentifier user4, _) = await CreateUserAndTokenAsync(communicationIdentityClient); (CommunicationUserIdentifier user5, _) = await CreateUserAndTokenAsync(communicationIdentityClient); string repeatabilityRequestId1 = "contoso-C0A747F1-6245-4307-8267-B974340677DC"; string repeatabilityRequestId2 = "contoso-D0A747F1-6245-4307-8267-B974340677DD"; var topic = "Thread async from C# sdk"; var displayNameMessage = "DisplayName sender message 1"; var participants = new List <ChatParticipant> { new ChatParticipant(user1) { DisplayName = "user1" }, new ChatParticipant(user2) { DisplayName = "user2" }, new ChatParticipant(user3) { DisplayName = "user3" } }; ChatClient chatClient = CreateInstrumentedChatClient(token1); ChatClient chatClient3 = CreateInstrumentedChatClient(token3); //act CreateChatThreadResult createChatThreadResult = await chatClient.CreateChatThreadAsync(topic, participants, repeatabilityRequestId1); ChatThreadClient chatThreadClient = GetInstrumentedChatThreadClient(chatClient, createChatThreadResult.ChatThread.Id); var threadId = chatThreadClient.Id; CreateChatThreadResult createChatThreadResult2 = await chatClient.CreateChatThreadAsync(topic, participants, repeatabilityRequestId2); ChatThreadClient chatThreadClient2 = GetInstrumentedChatThreadClient(chatClient, createChatThreadResult2.ChatThread.Id); ChatThreadClient chatThreadClient3 = GetInstrumentedChatThreadClient(chatClient3, threadId); AsyncPageable <ChatParticipant> chatParticipantsOnCreation = chatThreadClient.GetParticipantsAsync(); var chatParticipantsOnCreationCount = chatParticipantsOnCreation.ToEnumerableAsync().Result.Count; var updatedTopic = "Updated topic - C# sdk"; await chatThreadClient.UpdateTopicAsync(updatedTopic); ChatThreadProperties chatThread = await chatThreadClient.GetPropertiesAsync(); string messageContent = "Content for message 1"; SendChatMessageResult sendChatMessageResult = await chatThreadClient.SendMessageAsync(messageContent, ChatMessageType.Text, displayNameMessage); string messageId = sendChatMessageResult.Id; string messageContent2 = "Content for message 2"; SendChatMessageResult sendChatMessageResult2 = await chatThreadClient2.SendMessageAsync(messageContent2, ChatMessageType.Html, displayNameMessage); string messageId2 = sendChatMessageResult2.Id; string messageContent3 = "Content for message 3"; SendChatMessageResult sendChatMessageResult3 = await chatThreadClient3.SendMessageAsync(messageContent3, ChatMessageType.Text, displayNameMessage); string messageId3 = sendChatMessageResult3.Id;; string messageContent4 = "Content for message 4"; SendChatMessageResult sendChatMessageResult4 = await chatThreadClient3.SendMessageAsync(messageContent4, ChatMessageType.Html, displayNameMessage); string messageId4 = sendChatMessageResult4.Id; string messageContent5 = "Content for message 5"; SendChatMessageResult sendChatMessageResult5 = await chatThreadClient3.SendMessageAsync(messageContent5, ChatMessageType.Text, displayNameMessage); string messageId5 = sendChatMessageResult5.Id; string messageContent6 = "Content for message 6"; SendChatMessageResult sendChatMessageResult6 = await chatThreadClient3.SendMessageAsync(messageContent6, ChatMessageType.Html, displayNameMessage); string messageId6 = sendChatMessageResult6.Id; ChatMessage message = await chatThreadClient.GetMessageAsync(messageId); ChatMessage message2 = await chatThreadClient2.GetMessageAsync(messageId2); ChatMessage message3 = await chatThreadClient3.GetMessageAsync(messageId3); ChatMessage message4 = await chatThreadClient3.GetMessageAsync(messageId4); ChatMessage message5 = await chatThreadClient3.GetMessageAsync(messageId5); ChatMessage message6 = await chatThreadClient3.GetMessageAsync(messageId6); AsyncPageable <ChatMessage> messages = chatThreadClient.GetMessagesAsync(); AsyncPageable <ChatMessage> messages2 = chatThreadClient2.GetMessagesAsync(); var getMessagesCount = messages.ToEnumerableAsync().Result.Count; var getMessagesCount2 = messages2.ToEnumerableAsync().Result.Count; #region Messages Pagination assertions AsyncPageable <ChatMessage> messagesPaginationTest = chatThreadClient.GetMessagesAsync(); await PageableTester <ChatMessage> .AssertPaginationAsync(enumerableResource : messagesPaginationTest, expectedPageSize : 2, expectedTotalResources : 8); #endregion var updatedMessageContent = "This is message 1 content updated"; await chatThreadClient.UpdateMessageAsync(messageId, updatedMessageContent); Response <ChatMessage> actualUpdateMessage = await chatThreadClient.GetMessageAsync(messageId); await chatThreadClient.DeleteMessageAsync(messageId); List <ChatMessage> messagesAfterOneDeleted = chatThreadClient.GetMessagesAsync().ToEnumerableAsync().Result; ChatMessage deletedChatMessage = messagesAfterOneDeleted.First(x => x.Id == messageId); #region Participants Pagination assertions AsyncPageable <ChatParticipant> chatParticipants = chatThreadClient.GetParticipantsAsync(); var chatParticipantsCount = chatParticipants.ToEnumerableAsync().Result.Count; #endregion var newParticipant = new ChatParticipant(user4) { DisplayName = "user4" }; var newParticipant2 = new ChatParticipant(user5) { DisplayName = "user5" }; AddChatParticipantsResult addChatParticipantsResult = await chatThreadClient.AddParticipantsAsync(participants : new[] { newParticipant }); Response addChatParticipantResult = await chatThreadClient.AddParticipantAsync(newParticipant2); AsyncPageable <ChatParticipant> chatParticipantsAfterTwoOneAdded = chatThreadClient.GetParticipantsAsync(); await PageableTester <ChatParticipant> .AssertPaginationAsync(enumerableResource : chatParticipantsAfterTwoOneAdded, expectedPageSize : 2, expectedTotalResources : 5); var chatParticipantsAfterTwoOneAddedCount = chatParticipantsAfterTwoOneAdded.ToEnumerableAsync().Result.Count; List <ChatMessage> messagesAfterParticipantsAdded = chatThreadClient.GetMessagesAsync().ToEnumerableAsync().Result; ChatMessage participantAddedMessage = messagesAfterParticipantsAdded.First(x => x.Type == ChatMessageType.ParticipantAdded); CommunicationUserIdentifier participantToBeRemoved = user4; await chatThreadClient.RemoveParticipantAsync(identifier : participantToBeRemoved); AsyncPageable <ChatParticipant> chatParticipantAfterOneDeleted = chatThreadClient.GetParticipantsAsync(); var chatParticipantAfterOneDeletedCount = chatParticipantAfterOneDeleted.ToEnumerableAsync().Result.Count; List <ChatMessage> messagesAfterParticipantRemoved = chatThreadClient.GetMessagesAsync().ToEnumerableAsync().Result; ChatMessage participantRemovedMessage = messagesAfterParticipantRemoved.First(x => x.Type == ChatMessageType.ParticipantRemoved); ChatMessage participantRemovedMessage2 = await chatThreadClient.GetMessageAsync(participantRemovedMessage.Id); Response typingNotificationResponse = await chatThreadClient.SendTypingNotificationAsync(); await chatThreadClient.SendTypingNotificationAsync(); AsyncPageable <ChatThreadItem> threads = chatClient.GetChatThreadsAsync(); var threadsCount = threads.ToEnumerableAsync().Result.Count; await chatClient.DeleteChatThreadAsync(threadId); //assert Assert.AreEqual(updatedTopic, chatThread.Topic); Assert.AreEqual(3, chatParticipantsOnCreationCount); Assert.AreEqual(messageContent, message.Content.Message); Assert.AreEqual(displayNameMessage, message.SenderDisplayName); Assert.AreEqual(updatedMessageContent, actualUpdateMessage.Value.Content.Message); Assert.AreEqual(ChatMessageType.Text, message.Type); Assert.AreEqual(messageContent2, message2.Content.Message); Assert.AreEqual(messageContent3, message3.Content.Message); Assert.AreEqual(messageContent4, message4.Content.Message); Assert.AreEqual(messageContent5, message5.Content.Message); Assert.AreEqual(messageContent6, message6.Content.Message); Assert.AreEqual(2, threadsCount); Assert.AreEqual(8, getMessagesCount); //Including all types : 5 text message, 3 control messages Assert.AreEqual(3, getMessagesCount2); //Including all types : 1 text message, 2 control messages Assert.AreEqual(1, participantAddedMessage.Content.Participants.Count); Assert.AreEqual(user5.Id, CommunicationIdentifierSerializer.Serialize(participantAddedMessage.Content.Participants[0].User).CommunicationUser.Id); Assert.AreEqual("user5", participantAddedMessage.Content.Participants[0].DisplayName); Assert.AreEqual(1, participantRemovedMessage.Content.Participants.Count); Assert.AreEqual(user4.Id, CommunicationIdentifierSerializer.Serialize(participantRemovedMessage.Content.Participants[0].User).CommunicationUser.Id); Assert.AreEqual("user4", participantRemovedMessage.Content.Participants[0].DisplayName); Assert.IsTrue(deletedChatMessage.DeletedOn.HasValue); Assert.AreEqual(3, chatParticipantsCount); Assert.AreEqual(5, chatParticipantsAfterTwoOneAddedCount); Assert.AreEqual(4, chatParticipantAfterOneDeletedCount); Assert.AreEqual(0, addChatParticipantsResult.InvalidParticipants.Count); Assert.AreEqual((int)HttpStatusCode.Created, addChatParticipantResult.Status); Assert.AreEqual((int)HttpStatusCode.OK, typingNotificationResponse.Status); }