microsoft/teams.net

Public

mirrored from https://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.Apps.Tests/Activities/Invokes/SearchActivityTests.cs

288lines · modecode

1using Microsoft.Teams.Api.Activities;
2using Microsoft.Teams.Api.Activities.Invokes;
3using Microsoft.Teams.Api.Auth;
4using Microsoft.Teams.Api.Search;
5using Microsoft.Teams.Apps.Activities;
6using Microsoft.Teams.Apps.Activities.Invokes;
7using Microsoft.Teams.Apps.Annotations;
8using Microsoft.Teams.Apps.Testing.Plugins;
9
10namespace Microsoft.Teams.Apps.Tests.Activities;
11
12public class SearchActivityTests
13{
14 private readonly App _app = new();
15 private readonly IToken _token = Globals.Token;
16 private readonly Controller _controller = new();
17
18 public SearchActivityTests()
19 {
20 _app.AddPlugin(new TestPlugin());
21 _app.AddController(_controller);
22 }
23
24 [Fact]
25 public async Task Should_CallHandler()
26 {
27 var calls = 0;
28
29 _app.OnActivity(context =>
30 {
31 calls++;
32 Assert.True(context.Activity.Type.IsInvoke);
33 Assert.True(((Activity)context.Activity).ToInvoke().Name.IsSearch);
34 return context.Next();
35 });
36
37 _app.OnSearch(context =>
38 {
39 calls++;
40 Assert.True(context.Activity.Type.IsInvoke);
41 Assert.True(context.Activity.Name == Name.Search);
42 Assert.True(context.Activity.Value.Kind == SearchType.Search);
43 return Task.FromResult<object?>(null);
44 });
45
46 var res = await _app.Process<TestPlugin>(_token, new SearchActivity()
47 {
48 Value = new()
49 {
50 Kind = SearchType.Search,
51 QueryText = "test"
52 }
53 });
54
55 Assert.Equal(System.Net.HttpStatusCode.OK, res.Status);
56 Assert.Equal(2, calls);
57 Assert.Equal(1, _controller.Calls);
58 Assert.Equal(3, res.Meta.Routes);
59 }
60
61 [Fact]
62 public async Task Should_CallHandler_Answer()
63 {
64 var calls = 0;
65
66 _app.OnActivity(context =>
67 {
68 calls++;
69 Assert.True(context.Activity.Type.IsInvoke);
70 Assert.True(((Activity)context.Activity).ToInvoke().Name.IsSearch);
71 return context.Next();
72 });
73
74 _app.OnSearch(context =>
75 {
76 calls++;
77 Assert.True(context.Activity.Type.IsInvoke);
78 Assert.True(context.Activity.Name == Name.Search);
79 Assert.True(context.Activity.Value.Kind == SearchType.SearchAnswer);
80 return context.Next();
81 });
82
83 _app.OnAnswerSearch(context =>
84 {
85 calls++;
86 Assert.True(context.Activity.Type.IsInvoke);
87 Assert.True(context.Activity.Name == Name.Search);
88 Assert.True(context.Activity.Value.Kind == SearchType.SearchAnswer);
89 return Task.FromResult<object?>(null);
90 });
91
92 var res = await _app.Process<TestPlugin>(_token, new SearchActivity()
93 {
94 Value = new()
95 {
96 Kind = SearchType.SearchAnswer,
97 QueryText = "test"
98 }
99 });
100
101 Assert.Equal(System.Net.HttpStatusCode.OK, res.Status);
102 Assert.Equal(3, calls);
103 Assert.Equal(2, _controller.Calls);
104 Assert.Equal(5, res.Meta.Routes);
105 }
106
107 [Fact]
108 public async Task Should_CallHandler_Typeahead()
109 {
110 var calls = 0;
111
112 _app.OnActivity(context =>
113 {
114 calls++;
115 Assert.True(context.Activity.Type.IsInvoke);
116 Assert.True(((Activity)context.Activity).ToInvoke().Name.IsSearch);
117 return context.Next();
118 });
119
120 _app.OnSearch(context =>
121 {
122 calls++;
123 Assert.True(context.Activity.Type.IsInvoke);
124 Assert.True(context.Activity.Name == Name.Search);
125 Assert.True(context.Activity.Value.Kind == SearchType.Typeahead);
126 return context.Next();
127 });
128
129 _app.OnTypeaheadSearch(context =>
130 {
131 calls++;
132 Assert.True(context.Activity.Type.IsInvoke);
133 Assert.True(context.Activity.Name == Name.Search);
134 Assert.True(context.Activity.Value.Kind == SearchType.Typeahead);
135 return Task.FromResult<object?>(null);
136 });
137
138 var res = await _app.Process<TestPlugin>(_token, new SearchActivity()
139 {
140 Value = new()
141 {
142 Kind = SearchType.Typeahead,
143 QueryText = "test"
144 }
145 });
146
147 Assert.Equal(System.Net.HttpStatusCode.OK, res.Status);
148 Assert.Equal(3, calls);
149 Assert.Equal(2, _controller.Calls);
150 Assert.Equal(5, res.Meta.Routes);
151 }
152
153 [Fact]
154 public async Task Should_Not_CallHandler()
155 {
156 var calls = 0;
157
158 _app.OnSearch(context =>
159 {
160 calls++;
161 Assert.True(context.Activity.Type.IsInvoke);
162 Assert.True(context.Activity.Name.IsSearch);
163 return Task.FromResult<object?>(null);
164 });
165
166 var res = await _app.Process<TestPlugin>(_token, new TypingActivity());
167
168 Assert.Equal(System.Net.HttpStatusCode.OK, res.Status);
169 Assert.Equal(0, calls);
170 Assert.Equal(0, _controller.Calls);
171 Assert.Equal(0, res.Meta.Routes);
172 }
173
174 [Fact]
175 public async Task Should_Not_CallHandler_Answer()
176 {
177 var calls = 0;
178
179 _app.OnSearch(context =>
180 {
181 calls++;
182 Assert.True(context.Activity.Type.IsInvoke);
183 Assert.True(context.Activity.Name.IsSearch);
184 return context.Next();
185 });
186
187 _app.OnTypeaheadSearch(context =>
188 {
189 calls++;
190 Assert.True(context.Activity.Type.IsInvoke);
191 Assert.True(context.Activity.Name.IsSearch);
192 return context.Next();
193 });
194
195 _app.OnAnswerSearch(context =>
196 {
197 calls++;
198 Assert.True(context.Activity.Type.IsInvoke);
199 Assert.True(context.Activity.Name.IsSearch);
200 return context.Next();
201 });
202
203 var res = await _app.Process<TestPlugin>(_token, new SearchActivity()
204 {
205 Value = new()
206 {
207 Kind = SearchType.Typeahead,
208 QueryText = "test"
209 }
210 });
211
212 Assert.Equal(System.Net.HttpStatusCode.OK, res.Status);
213 Assert.Equal(2, calls);
214 Assert.Equal(2, _controller.Calls);
215 Assert.Equal(4, res.Meta.Routes);
216 }
217
218 [Fact]
219 public async Task Should_Not_CallHandler_Typeahead()
220 {
221 var calls = 0;
222
223 _app.OnSearch(async context =>
224 {
225 calls++;
226 Assert.True(context.Activity.Type.IsInvoke);
227 Assert.True(context.Activity.Name.IsSearch);
228 await context.Next();
229 });
230
231 _app.OnTypeaheadSearch(context =>
232 {
233 calls++;
234 Assert.True(context.Activity.Type.IsInvoke);
235 Assert.True(context.Activity.Name.IsSearch);
236 return context.Next();
237 });
238
239 _app.OnAnswerSearch(context =>
240 {
241 calls++;
242 Assert.True(context.Activity.Type.IsInvoke);
243 Assert.True(context.Activity.Name.IsSearch);
244 return context.Next();
245 });
246
247 var res = await _app.Process<TestPlugin>(_token, new SearchActivity()
248 {
249 Value = new()
250 {
251 Kind = SearchType.SearchAnswer,
252 QueryText = "test"
253 }
254 });
255
256 Assert.Equal(System.Net.HttpStatusCode.OK, res.Status);
257 Assert.Equal(2, calls);
258 Assert.Equal(2, _controller.Calls);
259 Assert.Equal(4, res.Meta.Routes);
260 }
261
262 [TeamsController]
263 public class Controller
264 {
265 public int Calls { get; private set; } = 0;
266
267 [Search]
268 public void OnSearch([Context] IContext.Next next)
269 {
270 Calls++;
271 next();
272 }
273
274 [Search.Answer]
275 public void OnAnswerSearch([Context] IContext.Next next)
276 {
277 Calls++;
278 next();
279 }
280
281 [Search.Typeahead]
282 public void OnTypeaheadSearch([Context] IContext.Next next)
283 {
284 Calls++;
285 next();
286 }
287 }
288}