microsoft/teams.net

Public

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

CodeCommitsIssuesPull requestsActionsInsightsSecurity
samples/migration-bot

Branches

Tags

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

Clone

HTTPS

Download ZIP

core/test/Microsoft.Teams.Bot.Apps.UnitTests/SuggestedActionsTests.cs

252lines · modecode

1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT License.
3
4using Microsoft.Teams.Bot.Apps.Schema;
5using Microsoft.Teams.Bot.Core.Schema;
6
7namespace Microsoft.Teams.Bot.Apps.UnitTests;
8
9public class SuggestedActionsTests
10{
11 [Fact]
12 public void ActionTypes_Constants_HaveExpectedValues()
13 {
14 Assert.Equal("openUrl", ActionType.OpenUrl);
15 Assert.Equal("imBack", ActionType.IMBack);
16 Assert.Equal("postBack", ActionType.PostBack);
17 Assert.Equal("playAudio", ActionType.PlayAudio);
18 Assert.Equal("playVideo", ActionType.PlayVideo);
19 Assert.Equal("showImage", ActionType.ShowImage);
20 Assert.Equal("downloadFile", ActionType.DownloadFile);
21 Assert.Equal("signin", ActionType.SignIn);
22 Assert.Equal("call", ActionType.Call);
23 }
24
25 [Fact]
26 public void SuggestedAction_DefaultConstructor_AllPropertiesNull()
27 {
28 var action = new SuggestedAction();
29
30 Assert.Null(action.Type);
31 Assert.Null(action.Title);
32 Assert.Null(action.Image);
33 Assert.Null(action.Text);
34 Assert.Null(action.DisplayText);
35 Assert.Null(action.Value);
36 Assert.Null(action.ChannelData);
37 Assert.Null(action.ImageAltText);
38 }
39
40 [Fact]
41 public void SuggestedAction_ConvenienceConstructor_SetsTypeAndTitle()
42 {
43 var action = new SuggestedAction(ActionType.IMBack, "Say Hello");
44
45 Assert.Equal(ActionType.IMBack, action.Type);
46 Assert.Equal("Say Hello", action.Title);
47 }
48
49 [Fact]
50 public void SuggestedActions_DefaultConstructor_EmptyCollections()
51 {
52 var suggestedActions = new SuggestedActions();
53
54 Assert.NotNull(suggestedActions.To);
55 Assert.Empty(suggestedActions.To);
56 Assert.NotNull(suggestedActions.Actions);
57 Assert.Empty(suggestedActions.Actions);
58 }
59
60 [Fact]
61 public void SuggestedActions_AddRecipients_AddsToList()
62 {
63 var suggestedActions = new SuggestedActions();
64
65 suggestedActions.AddRecipients("user1", "user2");
66
67 Assert.Equal(2, suggestedActions.To.Count);
68 Assert.Contains("user1", suggestedActions.To);
69 Assert.Contains("user2", suggestedActions.To);
70 }
71
72 [Fact]
73 public void SuggestedActions_AddAction_AddsToList()
74 {
75 var suggestedActions = new SuggestedActions();
76 var action = new SuggestedAction(ActionType.IMBack, "Click me");
77
78 suggestedActions.AddAction(action);
79
80 Assert.Single(suggestedActions.Actions);
81 Assert.Equal("Click me", suggestedActions.Actions[0].Title);
82 }
83
84 [Fact]
85 public void SuggestedActions_AddActions_AddsMultiple()
86 {
87 var suggestedActions = new SuggestedActions();
88
89 suggestedActions.AddActions(
90 new SuggestedAction(ActionType.IMBack, "Option 1"),
91 new SuggestedAction(ActionType.IMBack, "Option 2"),
92 new SuggestedAction(ActionType.PostBack, "Option 3")
93 );
94
95 Assert.Equal(3, suggestedActions.Actions.Count);
96 }
97
98 [Fact]
99 public void SuggestedActions_FluentChaining_ReturnsSameInstance()
100 {
101 var suggestedActions = new SuggestedActions();
102 var action = new SuggestedAction(ActionType.IMBack, "Test");
103
104 var result1 = suggestedActions.AddRecipients("user1");
105 var result2 = suggestedActions.AddAction(action);
106 var result3 = suggestedActions.AddActions(action);
107
108 Assert.Same(suggestedActions, result1);
109 Assert.Same(suggestedActions, result2);
110 Assert.Same(suggestedActions, result3);
111 }
112
113 [Fact]
114 public void MessageActivity_SuggestedActions_Serialize()
115 {
116 var activity = new MessageActivity("Choose an option")
117 {
118 SuggestedActions = new SuggestedActions()
119 };
120 activity.SuggestedActions.AddRecipients("user1");
121 activity.SuggestedActions.AddAction(new SuggestedAction(ActionType.IMBack, "Option 1") { Value = "opt1" });
122
123 string json = activity.ToJson();
124
125 Assert.Contains("\"suggestedActions\"", json);
126 Assert.Contains("\"to\"", json);
127 Assert.Contains("\"actions\"", json);
128 Assert.Contains("\"imBack\"", json);
129 Assert.Contains("\"Option 1\"", json);
130 Assert.Contains("\"opt1\"", json);
131 Assert.Contains("user1", json);
132 }
133
134 [Fact]
135 public void MessageActivity_FromCoreActivity_DeserializesSuggestedActions()
136 {
137 string json = """
138 {
139 "type": "message",
140 "text": "Choose an option",
141 "suggestedActions": {
142 "to": ["user1", "user2"],
143 "actions": [
144 {
145 "type": "imBack",
146 "title": "Option 1",
147 "value": "option1"
148 },
149 {
150 "type": "postBack",
151 "title": "Option 2",
152 "value": "option2"
153 }
154 ]
155 }
156 }
157 """;
158
159 CoreActivity coreActivity = CoreActivity.FromJsonString(json);
160 MessageActivity activity = MessageActivity.FromActivity(coreActivity);
161
162 Assert.NotNull(activity.SuggestedActions);
163 Assert.Equal(2, activity.SuggestedActions.To.Count);
164 Assert.Contains("user1", activity.SuggestedActions.To);
165 Assert.Contains("user2", activity.SuggestedActions.To);
166 Assert.Equal(2, activity.SuggestedActions.Actions.Count);
167 Assert.Equal("imBack", activity.SuggestedActions.Actions[0].Type);
168 Assert.Equal("Option 1", activity.SuggestedActions.Actions[0].Title);
169 Assert.Equal("postBack", activity.SuggestedActions.Actions[1].Type);
170 Assert.Equal("Option 2", activity.SuggestedActions.Actions[1].Title);
171 }
172
173 [Fact]
174 public void MessageActivity_WithoutSuggestedActions_PropertyIsNull()
175 {
176 string json = """
177 {
178 "type": "message",
179 "text": "No suggestions here"
180 }
181 """;
182
183 CoreActivity coreActivity = CoreActivity.FromJsonString(json);
184 MessageActivity activity = MessageActivity.FromActivity(coreActivity);
185
186 Assert.Null(activity.SuggestedActions);
187 }
188
189 [Fact]
190 public void MessageActivity_WithSuggestedActions_SetsProperty()
191 {
192 var suggestedActions = new SuggestedActions();
193
194 var activity = TeamsActivity.CreateBuilder()
195 .WithType(TeamsActivityType.Message)
196 .WithText("Choose an option")
197 .WithSuggestedActions(suggestedActions)
198 .Build();
199
200 Assert.NotNull(activity.SuggestedActions);
201 Assert.Same(suggestedActions, activity.SuggestedActions);
202 Assert.Empty(activity.SuggestedActions.Actions);
203 }
204
205
206
207 [Fact]
208 public void MessageActivity_WithSuggestedActions()
209 {
210 var suggestedActions = new SuggestedActions()
211 .AddAction(new SuggestedAction(ActionType.IMBack, "Option 1") { Value = "opt1" });
212
213 var activity = TeamsActivity.CreateBuilder()
214 .WithType(TeamsActivityType.Message)
215 .WithText("Choose an option")
216 .WithSuggestedActions(suggestedActions)
217 .Build();
218
219 Assert.NotNull(activity.SuggestedActions);
220 Assert.Same(suggestedActions, activity.SuggestedActions);
221 Assert.Single(activity.SuggestedActions.Actions);
222
223 Assert.NotNull(activity.SuggestedActions);
224 Assert.Empty(activity.SuggestedActions.To);
225 }
226
227 [Fact]
228 public void MessageActivity_SuggestedActions_RoundTrip()
229 {
230 var activity = new MessageActivity("Choose");
231 activity.SuggestedActions = new SuggestedActions();
232 activity.SuggestedActions.AddRecipients("user1");
233 activity.SuggestedActions.AddActions(
234 new SuggestedAction(ActionType.OpenUrl, "Open") { Value = "https://example.com" },
235 new SuggestedAction(ActionType.IMBack, "Say Hi") { Value = "hi" }
236 );
237
238 string json = activity.ToJson();
239
240 CoreActivity coreActivity = CoreActivity.FromJsonString(json);
241 MessageActivity roundTripped = MessageActivity.FromActivity(coreActivity);
242
243 Assert.NotNull(roundTripped.SuggestedActions);
244 Assert.Single(roundTripped.SuggestedActions.To);
245 Assert.Equal("user1", roundTripped.SuggestedActions.To[0]);
246 Assert.Equal(2, roundTripped.SuggestedActions.Actions.Count);
247 Assert.Equal("openUrl", roundTripped.SuggestedActions.Actions[0].Type);
248 Assert.Equal("Open", roundTripped.SuggestedActions.Actions[0].Title);
249 Assert.Equal("imBack", roundTripped.SuggestedActions.Actions[1].Type);
250 Assert.Equal("Say Hi", roundTripped.SuggestedActions.Actions[1].Title);
251 }
252}
253