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/MessageActivityTests.cs

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