microsoft/teams.net

Public

mirrored from https://github.com/microsoft/teams.netAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
copilot/move-activity-implementations

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

core/test/Microsoft.Bot.Core.UnitTests/ConversationClientTests.cs

177lines · modecode

1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT License.
3
4using System.Net;
5using Microsoft.Bot.Core.Schema;
6using Moq;
7using Moq.Protected;
8
9namespace Microsoft.Bot.Core.UnitTests;
10
11public class ConversationClientTests
12{
13 [Fact]
14 public async Task SendActivityAsync_WithValidActivity_SendsSuccessfully()
15 {
16 Mock<HttpMessageHandler> mockHttpMessageHandler = new();
17 mockHttpMessageHandler
18 .Protected()
19 .Setup<Task<HttpResponseMessage>>(
20 "SendAsync",
21 ItExpr.IsAny<HttpRequestMessage>(),
22 ItExpr.IsAny<CancellationToken>())
23 .ReturnsAsync(new HttpResponseMessage
24 {
25 StatusCode = HttpStatusCode.OK,
26 Content = new StringContent("{\"id\":\"activity123\"}")
27 });
28
29 HttpClient httpClient = new(mockHttpMessageHandler.Object);
30 ConversationClient conversationClient = new(httpClient);
31
32 CoreActivity activity = new()
33 {
34 Type = ActivityTypes.Message,
35 Text = "Test message",
36 Conversation = new Conversation { Id = "conv123" },
37 ServiceUrl = new Uri("https://test.service.url/")
38 };
39
40 var result = await conversationClient.SendActivityAsync(activity);
41
42 Assert.NotNull(result);
43 Assert.Contains("activity123", result.Id);
44 }
45
46 [Fact]
47 public async Task SendActivityAsync_WithNullActivity_ThrowsArgumentNullException()
48 {
49 HttpClient httpClient = new();
50 ConversationClient conversationClient = new(httpClient);
51
52 await Assert.ThrowsAsync<ArgumentNullException>(() =>
53 conversationClient.SendActivityAsync(null!));
54 }
55
56 [Fact]
57 public async Task SendActivityAsync_WithNullConversation_ThrowsArgumentNullException()
58 {
59 HttpClient httpClient = new();
60 ConversationClient conversationClient = new(httpClient);
61
62 CoreActivity activity = new()
63 {
64 Type = ActivityTypes.Message,
65 Text = "Test message",
66 ServiceUrl = new Uri("https://test.service.url/")
67 };
68
69 await Assert.ThrowsAsync<ArgumentException>(() =>
70 conversationClient.SendActivityAsync(activity));
71 }
72
73 [Fact]
74 public async Task SendActivityAsync_WithNullConversationId_ThrowsArgumentNullException()
75 {
76 HttpClient httpClient = new();
77 ConversationClient conversationClient = new(httpClient);
78
79 CoreActivity activity = new()
80 {
81 Type = ActivityTypes.Message,
82 Text = "Test message",
83 Conversation = new Conversation() { Id = null! },
84 ServiceUrl = new Uri("https://test.service.url/")
85 }; ;
86
87 await Assert.ThrowsAsync<ArgumentNullException>(() =>
88 conversationClient.SendActivityAsync(activity));
89 }
90
91 [Fact]
92 public async Task SendActivityAsync_WithNullServiceUrl_ThrowsArgumentNullException()
93 {
94 HttpClient httpClient = new();
95 ConversationClient conversationClient = new(httpClient);
96
97 CoreActivity activity = new()
98 {
99 Type = ActivityTypes.Message,
100 Text = "Test message",
101 Conversation = new Conversation { Id = "conv123" }
102 };
103
104 await Assert.ThrowsAsync<ArgumentNullException>(() =>
105 conversationClient.SendActivityAsync(activity));
106 }
107
108 [Fact]
109 public async Task SendActivityAsync_WithHttpError_ThrowsHttpRequestException()
110 {
111 Mock<HttpMessageHandler> mockHttpMessageHandler = new();
112 mockHttpMessageHandler
113 .Protected()
114 .Setup<Task<HttpResponseMessage>>(
115 "SendAsync",
116 ItExpr.IsAny<HttpRequestMessage>(),
117 ItExpr.IsAny<CancellationToken>())
118 .ReturnsAsync(new HttpResponseMessage
119 {
120 StatusCode = HttpStatusCode.BadRequest,
121 Content = new StringContent("Bad request error")
122 });
123
124 HttpClient httpClient = new(mockHttpMessageHandler.Object);
125 ConversationClient conversationClient = new(httpClient);
126
127 CoreActivity activity = new()
128 {
129 Type = ActivityTypes.Message,
130 Text = "Test message",
131 Conversation = new Conversation { Id = "conv123" },
132 ServiceUrl = new Uri("https://test.service.url/")
133 };
134
135 HttpRequestException exception = await Assert.ThrowsAsync<HttpRequestException>(() =>
136 conversationClient.SendActivityAsync(activity));
137
138 Assert.Contains("Error sending activity", exception.Message);
139 Assert.Contains("BadRequest", exception.Message);
140 }
141
142 [Fact]
143 public async Task SendActivityAsync_ConstructsCorrectUrl()
144 {
145 HttpRequestMessage? capturedRequest = null;
146 Mock<HttpMessageHandler> mockHttpMessageHandler = new();
147 mockHttpMessageHandler
148 .Protected()
149 .Setup<Task<HttpResponseMessage>>(
150 "SendAsync",
151 ItExpr.IsAny<HttpRequestMessage>(),
152 ItExpr.IsAny<CancellationToken>())
153 .Callback<HttpRequestMessage, CancellationToken>((req, ct) => capturedRequest = req)
154 .ReturnsAsync(new HttpResponseMessage
155 {
156 StatusCode = HttpStatusCode.OK,
157 Content = new StringContent("{\"id\":\"activity123\"}")
158 });
159
160 HttpClient httpClient = new(mockHttpMessageHandler.Object);
161 ConversationClient conversationClient = new(httpClient);
162
163 CoreActivity activity = new()
164 {
165 Type = ActivityTypes.Message,
166 Text = "Test message",
167 Conversation = new Conversation { Id = "conv123" },
168 ServiceUrl = new Uri("https://test.service.url/")
169 };
170
171 await conversationClient.SendActivityAsync(activity);
172
173 Assert.NotNull(capturedRequest);
174 Assert.Equal("https://test.service.url/v3/conversations/conv123/activities/", capturedRequest.RequestUri?.ToString());
175 Assert.Equal(HttpMethod.Post, capturedRequest.Method);
176 }
177}
178