microsoft/teams.net

Public

mirrored from https://github.com/microsoft/teams.netAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
docs/update-release-process

Branches

Tags

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

Clone

HTTPS

Download ZIP

Tests/Microsoft.Teams.Api.Tests/Entities/QuotedReplyEntityTests.cs

253lines · modecode

1using System.Text.Json;
2
3using Microsoft.Teams.Api.Activities;
4using Microsoft.Teams.Api.Entities;
5
6namespace Microsoft.Teams.Api.Tests.Entities;
7
8public class QuotedReplyEntityTests
9{
10 private static readonly JsonSerializerOptions JsonOptions = new()
11 {
12 WriteIndented = true,
13 IndentSize = 2,
14 DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull
15 };
16
17 [Fact]
18 public void QuotedReplyEntity_JsonSerialize()
19 {
20 var entity = new QuotedReplyEntity()
21 {
22 QuotedReply = new QuotedReplyData()
23 {
24 MessageId = "1234567890",
25 SenderId = "user-1",
26 SenderName = "Test User",
27 Preview = "Hello, world!",
28 Time = "1772050244572",
29 IsReplyDeleted = false,
30 ValidatedMessageReference = true
31 }
32 };
33
34 var json = JsonSerializer.Serialize(entity, JsonOptions);
35
36 Assert.Equal(File.ReadAllText(
37 @"../../../Json/Entities/QuotedReplyEntity.json"
38 ), json);
39 }
40
41 [Fact]
42 public void QuotedReplyEntity_JsonSerialize_Derived()
43 {
44 Entity entity = new QuotedReplyEntity()
45 {
46 QuotedReply = new QuotedReplyData()
47 {
48 MessageId = "1234567890",
49 SenderId = "user-1",
50 SenderName = "Test User",
51 Preview = "Hello, world!",
52 Time = "1772050244572",
53 IsReplyDeleted = false,
54 ValidatedMessageReference = true
55 }
56 };
57
58 var json = JsonSerializer.Serialize(entity, JsonOptions);
59
60 Assert.Equal(File.ReadAllText(
61 @"../../../Json/Entities/QuotedReplyEntity.json"
62 ), json);
63 }
64
65 [Fact]
66 public void QuotedReplyEntity_JsonDeserialize()
67 {
68 var json = File.ReadAllText(@"../../../Json/Entities/QuotedReplyEntity.json");
69 var entity = JsonSerializer.Deserialize<QuotedReplyEntity>(json);
70
71 Assert.NotNull(entity);
72 Assert.Equal("quotedReply", entity.Type);
73 Assert.NotNull(entity.QuotedReply);
74 Assert.Equal("1234567890", entity.QuotedReply.MessageId);
75 Assert.Equal("user-1", entity.QuotedReply.SenderId);
76 Assert.Equal("Test User", entity.QuotedReply.SenderName);
77 Assert.Equal("Hello, world!", entity.QuotedReply.Preview);
78 Assert.Equal("1772050244572", entity.QuotedReply.Time);
79 Assert.Equal(false, entity.QuotedReply.IsReplyDeleted);
80 Assert.Equal(true, entity.QuotedReply.ValidatedMessageReference);
81 }
82
83 [Fact]
84 public void QuotedReplyEntity_JsonDeserialize_Derived()
85 {
86 var json = File.ReadAllText(@"../../../Json/Entities/QuotedReplyEntity.json");
87 var entity = JsonSerializer.Deserialize<Entity>(json);
88
89 Assert.NotNull(entity);
90 Assert.IsType<QuotedReplyEntity>(entity);
91 var quotedReply = (QuotedReplyEntity)entity;
92 Assert.Equal("quotedReply", quotedReply.Type);
93 Assert.NotNull(quotedReply.QuotedReply);
94 Assert.Equal("1234567890", quotedReply.QuotedReply.MessageId);
95 }
96
97 [Fact]
98 public void QuotedReplyEntity_RoundTrip()
99 {
100 var json = File.ReadAllText(@"../../../Json/Entities/QuotedReplyEntity.json");
101 var entity = JsonSerializer.Deserialize<QuotedReplyEntity>(json);
102 var reserialized = JsonSerializer.Serialize(entity, JsonOptions);
103
104 Assert.Equal(json, reserialized);
105 }
106
107 [Fact]
108 public void QuotedReplyEntity_MinimalData()
109 {
110 var entity = new QuotedReplyEntity()
111 {
112 QuotedReply = new QuotedReplyData()
113 {
114 MessageId = "msg-1"
115 }
116 };
117
118 var json = JsonSerializer.Serialize(entity, JsonOptions);
119 var deserialized = JsonSerializer.Deserialize<QuotedReplyEntity>(json);
120
121 Assert.NotNull(deserialized);
122 Assert.Equal("quotedReply", deserialized.Type);
123 Assert.NotNull(deserialized.QuotedReply);
124 Assert.Equal("msg-1", deserialized.QuotedReply.MessageId);
125 Assert.Null(deserialized.QuotedReply.SenderId);
126 Assert.Null(deserialized.QuotedReply.SenderName);
127 Assert.Null(deserialized.QuotedReply.Preview);
128 Assert.Null(deserialized.QuotedReply.Time);
129 Assert.Null(deserialized.QuotedReply.IsReplyDeleted);
130 Assert.Null(deserialized.QuotedReply.ValidatedMessageReference);
131 }
132
133 [Fact]
134 public void GetQuotedMessages_Getter_FiltersCorrectly()
135 {
136 var message = new MessageActivity("test");
137 message.Entities = new List<IEntity>
138 {
139 new ClientInfoEntity() { Locale = "en-us" },
140 new QuotedReplyEntity()
141 {
142 QuotedReply = new QuotedReplyData() { MessageId = "msg-1" }
143 },
144 new MentionEntity()
145 {
146 Mentioned = new Account() { Id = "user-1", Name = "User" },
147 Text = "<at>User</at>"
148 },
149 new QuotedReplyEntity()
150 {
151 QuotedReply = new QuotedReplyData() { MessageId = "msg-2" }
152 }
153 };
154
155 var quotedReplies = message.GetQuotedMessages();
156
157 Assert.Equal(2, quotedReplies.Count);
158 Assert.Equal("msg-1", quotedReplies[0].QuotedReply?.MessageId);
159 Assert.Equal("msg-2", quotedReplies[1].QuotedReply?.MessageId);
160 }
161
162 [Fact]
163 public void GetQuotedMessages_Getter_EmptyWhenNoEntities()
164 {
165 var message = new MessageActivity("test");
166 message.Entities = null;
167
168 var quotedReplies = message.GetQuotedMessages();
169
170 Assert.Empty(quotedReplies);
171 }
172
173 [Fact]
174 public void GetQuotedMessages_Getter_EmptyWhenNoQuotedReplyEntities()
175 {
176 var message = new MessageActivity("test");
177 message.Entities = new List<IEntity>
178 {
179 new ClientInfoEntity() { Locale = "en-us" }
180 };
181
182 var quotedReplies = message.GetQuotedMessages();
183
184 Assert.Empty(quotedReplies);
185 }
186
187 [Fact]
188 public void AddQuote_AddsEntityAndPlaceholder()
189 {
190 var message = new MessageActivity().AddQuote("msg-1");
191
192 Assert.Single(message.Entities!);
193 Assert.Equal("quotedReply", message.Entities![0].Type);
194 Assert.Contains("<quoted messageId=\"msg-1\"/>", message.Text);
195 }
196
197 [Fact]
198 public void AddQuote_WithResponse_AppendsResponseText()
199 {
200 var message = new MessageActivity().AddQuote("msg-1", "my response");
201
202 Assert.Equal("<quoted messageId=\"msg-1\"/> my response", message.Text);
203 }
204
205 [Fact]
206 public void AddQuote_MultiQuoteInterleaved()
207 {
208 var message = new MessageActivity()
209 .AddQuote("msg-1", "response to first")
210 .AddQuote("msg-2", "response to second");
211
212 Assert.Equal(
213 "<quoted messageId=\"msg-1\"/> response to first<quoted messageId=\"msg-2\"/> response to second",
214 message.Text);
215 Assert.Equal(2, message.Entities!.Count);
216 }
217
218 [Fact]
219 public void AddQuote_GroupedQuotes()
220 {
221 var message = new MessageActivity()
222 .AddQuote("msg-1")
223 .AddQuote("msg-2", "response to both");
224
225 Assert.Equal(
226 "<quoted messageId=\"msg-1\"/><quoted messageId=\"msg-2\"/> response to both",
227 message.Text);
228 }
229
230 [Fact]
231#pragma warning disable CS0618 // Obsolete
232 public void ToQuoteReply_ReturnsModernPlaceholder()
233 {
234 var message = new MessageActivity("test") { Id = "activity-123" };
235
236 var result = message.ToQuoteReply();
237
238 Assert.Equal("<quoted messageId=\"activity-123\"/>", result);
239 }
240#pragma warning restore CS0618
241
242 [Fact]
243#pragma warning disable CS0618 // Obsolete
244 public void ToQuoteReply_ReturnsEmptyWhenNoId()
245 {
246 var message = new MessageActivity("test");
247
248 var result = message.ToQuoteReply();
249
250 Assert.Equal(string.Empty, result);
251 }
252#pragma warning restore CS0618
253}