microsoft/teams.net

Public

mirrored fromhttps://github.com/microsoft/teams.netAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
copilot/close-pull-request

Branches

Tags

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

Clone

HTTPS

Download ZIP

Tests/Microsoft.Teams.Api.Tests/Clients/UserTokenClientTests.cs

258lines · modecode

1using System.Net;
2
3using Microsoft.Teams.Api.Clients;
4using Microsoft.Teams.Common.Http;
5
6using Moq;
7
8using static Microsoft.Teams.Api.Clients.UserTokenClient;
9
10namespace Microsoft.Teams.Api.Tests.Clients;
11
12public class UserTokenClientTests
13{
14 [Fact]
15 public async Task UserTokenClient_GetAsync()
16 {
17 var tokenRequest = new GetTokenRequest
18 {
19 UserId = "userId-aad",
20 ConnectionName = "connectionName",
21 ChannelId = new ChannelId("webchat"),
22 Code = "200",
23 };
24
25 var responseMessage = new HttpResponseMessage
26 {
27 Headers = { { "Custom-Header", "HeaderValue" } }
28 };
29
30 var mockHandler = new Mock<IHttpClient>();
31 mockHandler
32 .Setup(handler => handler.SendAsync<Token.Response>(It.IsAny<IHttpRequest>(), It.IsAny<CancellationToken>()))
33 .ReturnsAsync(new HttpResponse<Token.Response>
34 {
35 Headers = responseMessage.Headers,
36 StatusCode = HttpStatusCode.OK,
37 Body = new Token.Response
38 {
39 ConnectionName = "connectionName",
40 Token = "validToken"
41 }
42 });
43
44 var UserTokenClient = new UserTokenClient(mockHandler.Object);
45
46 var reqBody = await UserTokenClient.GetAsync(tokenRequest);
47
48 Assert.Equal("validToken", reqBody.Token);
49
50 string expecteUrl = "https://token.botframework.com/api/usertoken/GetToken?userId=userId-aad&connectionName=connectionName&channelId=webchat&code=200";
51 mockHandler.Verify(x => x.SendAsync<Token.Response>(It.Is<IHttpRequest>(arg => arg.Url == expecteUrl), It.IsAny<CancellationToken>()), Times.Once);
52 }
53
54 [Fact]
55 public async Task UserTokenClient_GetAadAsync()
56 {
57 var aadTokenRequest = new GetAadTokenRequest
58 {
59 UserId = "userId-aad",
60 ConnectionName = "connectionName",
61 ChannelId = new ChannelId("webchat"),
62 ResourceUrls = ["value1", "value2"],
63 };
64
65 var responseMessage = new HttpResponseMessage
66 {
67 Headers = { { "Custom-Header", "HeaderValue" } }
68 };
69
70 IDictionary<string, Token.Response> addTokenResponses = new Dictionary<string, Token.Response>
71 {
72 {
73 "first",
74 new Token.Response
75 {
76 ConnectionName = "connectionName",
77 Token = "validToken"
78 }
79 },
80 {
81 "second",
82 new Token.Response
83 {
84 ConnectionName = "connectionName",
85 Token = "validToken"
86 }
87 }
88 };
89
90 var mockHandler = new Mock<IHttpClient>();
91 mockHandler
92 .Setup(handler => handler.SendAsync<IDictionary<string, Token.Response>>(It.IsAny<IHttpRequest>(), It.IsAny<CancellationToken>()))
93 .ReturnsAsync(new HttpResponse<IDictionary<string, Token.Response>>
94 {
95 Headers = responseMessage.Headers,
96 StatusCode = HttpStatusCode.OK,
97 Body = addTokenResponses
98 });
99
100 var UserTokenClient = new UserTokenClient(mockHandler.Object);
101
102 var reqBody = await UserTokenClient.GetAadAsync(aadTokenRequest);
103
104 Assert.Equal(2, reqBody.Count);
105
106 string expecteUrl = "https://token.botframework.com/api/usertoken/GetAadTokens?userId=userId-aad&connectionName=connectionName&channelId=webchat&resourceUrls%5b0%5d=value1&resourceUrls%5b1%5d=value2";
107 mockHandler.Verify(x => x.SendAsync<IDictionary<string, Token.Response>>(It.Is<IHttpRequest>(arg => arg.Url == expecteUrl), It.IsAny<CancellationToken>()), Times.Once);
108 }
109
110 [Fact]
111 public async Task UserTokenClient_GetStatusAsync()
112 {
113 var tokenStatusRequest = new GetTokenStatusRequest
114 {
115 UserId = "userId-aad",
116 ChannelId = new ChannelId("webchat"),
117 IncludeFilter = "validEntry",
118 };
119
120 var responseMessage = new HttpResponseMessage
121 {
122 Headers = { { "Custom-Header", "HeaderValue" } }
123 };
124
125 IList<Token.Status> tokenStatusList = new List<Token.Status>
126 {
127 new Token.Status
128 {
129 ChannelId = new ChannelId("webchat"),
130 ConnectionName = "connectionName",
131 HasToken = true,
132 ServiceProviderDisplayName = "validEntry"
133 },
134 new Token.Status
135 {
136 ChannelId = new ChannelId("webchat"),
137 ConnectionName = "connectionName",
138 HasToken = true,
139 ServiceProviderDisplayName = "validEntry"
140 }
141 };
142
143 var mockHandler = new Mock<IHttpClient>();
144 mockHandler
145 .Setup(handler => handler.SendAsync<IList<Token.Status>>(It.IsAny<IHttpRequest>(), It.IsAny<CancellationToken>()))
146 .ReturnsAsync(new HttpResponse<IList<Token.Status>>
147 {
148 Headers = responseMessage.Headers,
149 StatusCode = HttpStatusCode.OK,
150 Body = tokenStatusList
151 });
152
153 var UserTokenClient = new UserTokenClient(mockHandler.Object);
154
155 var reqBody = await UserTokenClient.GetStatusAsync(tokenStatusRequest);
156
157 Assert.Equal(2, reqBody.Count);
158
159 string expecteUrl = "https://token.botframework.com/api/usertoken/GetTokenStatus?userId=userId-aad&channelId=webchat&includeFilter=validEntry";
160 mockHandler.Verify(x => x.SendAsync<IList<Token.Status>>(It.Is<IHttpRequest>(arg => arg.Url == expecteUrl), It.IsAny<CancellationToken>()), Times.Once);
161 }
162
163
164 [Fact]
165 public async Task UserTokenClient_SignOutAsync()
166 {
167 var signOutRequest = new SignOutRequest
168 {
169 UserId = "userId-aad",
170 ChannelId = new ChannelId("msteams"),
171 ConnectionName = "connectionName",
172 };
173
174
175 var responseMessage = new HttpResponseMessage
176 {
177 Headers = { { "Custom-Header", "HeaderValue" } }
178 };
179
180 IList<Token.Status> tokenStatusList = new List<Token.Status>
181 {
182 new Token.Status
183 {
184 ChannelId = new ChannelId("webchat"),
185 ConnectionName = "connectionName",
186 HasToken = true,
187 ServiceProviderDisplayName = "validEntry"
188 },
189 new Token.Status
190 {
191 ChannelId = new ChannelId("webchat"),
192 ConnectionName = "connectionName",
193 HasToken = true,
194 ServiceProviderDisplayName = "validEntry"
195 }
196 };
197
198 var mockHandler = new Mock<IHttpClient>();
199 mockHandler
200 .Setup(handler => handler.SendAsync(It.IsAny<IHttpRequest>(), It.IsAny<CancellationToken>()))
201 .ReturnsAsync(new HttpResponse<string>()
202 {
203 Body = "valid signin data",
204 Headers = responseMessage.Headers,
205 StatusCode = HttpStatusCode.OK
206 });
207
208
209 var UserTokenClient = new UserTokenClient(mockHandler.Object);
210
211 await UserTokenClient.SignOutAsync(signOutRequest);
212
213 string expecteUrl = "https://token.botframework.com/api/usertoken/SignOut?userId=userId-aad&connectionName=connectionName&channelId=msteams";
214 mockHandler.Verify(x => x.SendAsync(It.Is<IHttpRequest>(arg => arg.Url == expecteUrl), It.IsAny<CancellationToken>()), Times.Once);
215 }
216
217 [Fact]
218 public async Task UserTokenClient_ExchangeAsync()
219 {
220 var tokenRequest = new ExchangeTokenRequest()
221 {
222 ChannelId = new ChannelId("msteams"),
223 UserId = "userId-aad",
224 ConnectionName = "connectionName",
225 ExchangeRequest = new TokenExchange.Request()
226 };
227
228
229 var responseMessage = new HttpResponseMessage
230 {
231 Headers = { { "Custom-Header", "HeaderValue" } }
232 };
233
234 var mockHandler = new Mock<IHttpClient>();
235 mockHandler
236 .Setup(handler => handler.SendAsync<Token.Response>(It.IsAny<IHttpRequest>(), It.IsAny<CancellationToken>()))
237 .ReturnsAsync(new HttpResponse<Token.Response>
238 {
239 Headers = responseMessage.Headers,
240 StatusCode = HttpStatusCode.OK,
241 Body = new Token.Response
242 {
243 ConnectionName = "connectionName",
244 Token = "validToken"
245 }
246 });
247
248 var UserTokenClient = new UserTokenClient(mockHandler.Object);
249
250 var reqBody = await UserTokenClient.ExchangeAsync(tokenRequest);
251
252 Assert.Equal("validToken", reqBody.Token);
253 HttpMethod expectedMethod = HttpMethod.Post;
254 string expecteUrl = "https://token.botframework.com/api/usertoken/exchange?userId=userId-aad&connectionName=connectionName&channelId=msteams";
255 mockHandler.Verify(x => x.SendAsync<Token.Response>(It.Is<IHttpRequest>(arg => arg.Url == expecteUrl && arg.Method == expectedMethod), It.IsAny<CancellationToken>()), Times.Once);
256 }
257
258}