microsoft/teams.net

Public

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

CodeCommitsIssuesPull requestsActionsInsightsSecurity
copilot/sub-pr-338

Branches

Tags

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

Clone

HTTPS

Download ZIP

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

172lines · modecode

1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT License.
3
4using Microsoft.Teams.Bot.Core.Schema;
5using Microsoft.Teams.Bot.Apps.Schema;
6using Microsoft.Teams.Bot.Apps.Schema.MessageActivities;
7
8namespace Microsoft.Teams.Bot.Apps.UnitTests;
9
10public class MessageActivityTests
11{
12 [Fact]
13 public void Constructor_Default_SetsMessageType()
14 {
15 MessageActivity activity = new();
16 Assert.Equal(TeamsActivityType.Message, activity.Type);
17 }
18
19 [Fact]
20 public void Constructor_WithText_SetsTextAndMessageType()
21 {
22 MessageActivity activity = new("Hello World");
23 Assert.Equal(TeamsActivityType.Message, activity.Type);
24 Assert.Equal("Hello World", activity.Text);
25 }
26
27 [Fact]
28 public void MessageActivity_FromCoreActivity_MapsAllProperties()
29 {
30 CoreActivity coreActivity = CoreActivity.FromJsonString(jsonMessageWithAllProps);
31 MessageActivity messageActivity = MessageActivity.FromActivity(coreActivity);
32
33 Assert.Equal("Hello World", messageActivity.Text);
34 //Assert.Equal("This is a summary", messageActivity.Summary);
35 Assert.Equal("plain", messageActivity.TextFormat);
36 //Assert.Equal(InputHints.AcceptingInput, messageActivity.InputHint);
37 //Assert.Equal(ImportanceLevels.High, messageActivity.Importance);
38 //Assert.Equal(DeliveryModes.Normal, messageActivity.DeliveryMode);
39 Assert.Equal("carousel", messageActivity.AttachmentLayout);
40 //Assert.NotNull(messageActivity.Expiration);
41 }
42
43 [Fact]
44 public void MessageActivity_Serialize_ToJson()
45 {
46 MessageActivity activity = new("Hello World")
47 {
48 // Summary = "Test summary",
49 TextFormat = TextFormats.Markdown,
50 //InputHint = InputHints.ExpectingInput,
51 //Importance = ImportanceLevels.Urgent,
52 //DeliveryMode = DeliveryModes.Notification
53 };
54
55 string json = activity.ToJson();
56
57 Assert.Contains("Hello World", json);
58 //Assert.Contains("Test summary", json);
59 Assert.Contains("markdown", json);
60 //Assert.Contains("expectingInput", json);
61 //Assert.Contains("urgent", json);
62 //Assert.Contains("notification", json);
63 }
64
65 /*
66 [Fact]
67 public void MessageActivity_WithSpeak_Serialize()
68 {
69 MessageActivity activity = new("Hello")
70 {
71 Speak = "<speak>Hello World</speak>"
72 };
73
74 string json = activity.ToJson();
75 Assert.Contains("\"speak\":", json);
76 Assert.Contains("Hello World", json);
77 }
78
79 [Fact]
80 public void MessageActivity_WithExpiration_Serialize()
81 {
82 string expirationDate = "2026-12-31T23:59:59Z";
83 MessageActivity activity = new("Expiring message")
84 {
85 Expiration = expirationDate
86 };
87
88 string json = activity.ToJson();
89 Assert.Contains("2026-12-31T23:59:59Z", json);
90 }
91 */
92
93
94 [Fact]
95 public void MessageActivity_Constants_TextFormats()
96 {
97 MessageActivity activity = new("Test")
98 {
99 TextFormat = TextFormats.Plain
100 };
101 Assert.Equal("plain", activity.TextFormat);
102
103 activity.TextFormat = TextFormats.Markdown;
104 Assert.Equal("markdown", activity.TextFormat);
105
106 activity.TextFormat = TextFormats.Xml;
107 Assert.Equal("xml", activity.TextFormat);
108 }
109
110 [Fact]
111 public void MessageActivity_FromCoreActivity_WithMissingProperties_HandlesGracefully()
112 {
113 CoreActivity coreActivity = new(ActivityType.Message);
114 MessageActivity messageActivity = MessageActivity.FromActivity(coreActivity);
115
116 Assert.Null(messageActivity.Text);
117 //Assert.Null(messageActivity.Speak);
118 //Assert.Null(messageActivity.InputHint);
119 //Assert.Null(messageActivity.Summary);
120 Assert.Null(messageActivity.TextFormat);
121 Assert.Null(messageActivity.AttachmentLayout);
122 //Assert.Null(messageActivity.Importance);
123 //Assert.Null(messageActivity.DeliveryMode);
124 //Assert.Null(messageActivity.Expiration);
125 }
126
127 [Fact]
128 public void MessageActivity_SerializedAsCoreActivity_IncludesText()
129 {
130 MessageActivity messageActivity = new("Hello World")
131 {
132 Type = ActivityType.Message,
133 ServiceUrl = new Uri("https://test.service.url/")
134 };
135
136 CoreActivity coreActivity = messageActivity;
137 string json = coreActivity.ToJson();
138
139 Assert.Contains("Hello World", json);
140 Assert.Contains("\"text\"", json);
141 }
142
143 private const string jsonMessageWithAllProps = """
144 {
145 "type": "message",
146 "channelId": "msteams",
147 "text": "Hello World",
148 "speak": "<speak>Hello World</speak>",
149 "inputHint": "acceptingInput",
150 "summary": "This is a summary",
151 "textFormat": "plain",
152 "attachmentLayout": "carousel",
153 "importance": "high",
154 "deliveryMode": "normal",
155 "expiration": "2026-12-31T23:59:59Z",
156 "id": "1234567890",
157 "timestamp": "2026-01-21T12:00:00Z",
158 "serviceUrl": "https://smba.trafficmanager.net/amer/",
159 "from": {
160 "id": "user-123",
161 "name": "Test User"
162 },
163 "conversation": {
164 "id": "conversation-123"
165 },
166 "recipient": {
167 "id": "bot-123",
168 "name": "Test Bot"
169 }
170 }
171 """;
172}
173