microsoft/teams.net

Public

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

CodeCommitsIssuesPull requestsActionsInsightsSecurity
cg/sovereign-cloud-nextcore

Branches

Tags

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

Clone

HTTPS

Download ZIP

core/test/Microsoft.Teams.Bot.Core.UnitTests/Schema/ActivityExtensibilityTests.cs

167lines · modecode

1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT License.
3
4using System.Text;
5using System.Text.Json.Serialization;
6
7using Microsoft.Teams.Bot.Core.Schema;
8
9namespace Microsoft.Teams.Bot.Core.UnitTests.Schema;
10
11public class ActivityExtensibilityTests
12{
13 [Fact]
14 public void CustomActivity_ExtendedProperties_SerializedAndDeserialized()
15 {
16 MyCustomActivity customActivity = new()
17 {
18 CustomField = "CustomValue"
19 };
20 string json = MyCustomActivity.ToJson<MyCustomActivity>(customActivity);
21 MyCustomActivity deserializedActivity = MyCustomActivity.FromActivity(CoreActivity.FromJsonString(json));
22 Assert.NotNull(deserializedActivity);
23 Assert.Equal("CustomValue", deserializedActivity.CustomField);
24 }
25
26 [Fact]
27 public async Task CustomActivity_ExtendedProperties_SerializedAndDeserialized_Async()
28 {
29 string json = """
30 {
31 "type": "message",
32 "customField": "CustomValue"
33 }
34 """;
35 using MemoryStream stream = new(Encoding.UTF8.GetBytes(json));
36 MyCustomActivity? deserializedActivity = await CoreActivity.FromJsonStreamAsync<MyCustomActivity>(stream);
37 Assert.NotNull(deserializedActivity);
38 Assert.Equal("CustomValue", deserializedActivity!.CustomField);
39 }
40
41
42 [Fact]
43 public void CustomChannelDataActivity_ExtendedProperties_SerializedAndDeserialized()
44 {
45 MyCustomChannelDataActivity customChannelDataActivity = new()
46 {
47 ChannelData = new MyChannelData
48 {
49 CustomField = "customFieldValue",
50 MyChannelId = "12345"
51 }
52 };
53 string json = CoreActivity.ToJson(customChannelDataActivity);
54 MyCustomChannelDataActivity deserializedActivity = MyCustomChannelDataActivity.FromActivity(CoreActivity.FromJsonString(json));
55 Assert.NotNull(deserializedActivity);
56 Assert.NotNull(deserializedActivity.ChannelData);
57 Assert.Equal(ActivityType.Message, deserializedActivity.Type);
58 Assert.Equal("customFieldValue", deserializedActivity.ChannelData.CustomField);
59 Assert.Equal("12345", deserializedActivity.ChannelData.MyChannelId);
60 }
61
62
63 [Fact]
64 public void Deserialize_CustomChannelDataActivity()
65 {
66 string json = """
67 {
68 "type": "message",
69 "channelData": {
70 "customField": "customFieldValue",
71 "myChannelId": "12345"
72 }
73 }
74 """;
75 MyCustomChannelDataActivity deserializedActivity = MyCustomChannelDataActivity.FromActivity(CoreActivity.FromJsonString(json));
76 Assert.NotNull(deserializedActivity);
77 Assert.NotNull(deserializedActivity.ChannelData);
78 Assert.Equal("customFieldValue", deserializedActivity.ChannelData.CustomField);
79 Assert.Equal("12345", deserializedActivity.ChannelData.MyChannelId);
80 }
81}
82
83public class MyCustomActivity : CoreActivity
84{
85 internal static MyCustomActivity FromActivity(CoreActivity activity)
86 {
87 return new MyCustomActivity
88 {
89 Type = activity.Type,
90 ChannelId = activity.ChannelId,
91 Id = activity.Id,
92 ServiceUrl = activity.ServiceUrl,
93 ChannelData = activity.ChannelData,
94 From = activity.From,
95 Recipient = activity.Recipient,
96 Conversation = activity.Conversation,
97 Entities = activity.Entities,
98 Attachments = activity.Attachments,
99 Value = activity.Value,
100 Properties = activity.Properties,
101 CustomField = activity.Properties.TryGetValue("customField", out object? customFieldObj)
102 && customFieldObj is JsonElement jeCustomField
103 && jeCustomField.ValueKind == JsonValueKind.String
104 ? jeCustomField.GetString()
105 : null
106 };
107 }
108 [JsonPropertyName("customField")]
109 public string? CustomField { get; set; }
110}
111
112
113public class MyChannelData : ChannelData
114{
115 public MyChannelData()
116 {
117 }
118 public MyChannelData(ChannelData cd)
119 {
120 if (cd is not null)
121 {
122 if (cd.Properties.TryGetValue("customField", out object? channelIdObj)
123 && channelIdObj is JsonElement jeChannelId
124 && jeChannelId.ValueKind == JsonValueKind.String)
125 {
126 CustomField = jeChannelId.GetString();
127 }
128
129 if (cd.Properties.TryGetValue("myChannelId", out object? mychannelIdObj)
130 && mychannelIdObj is JsonElement jemyChannelId
131 && jemyChannelId.ValueKind == JsonValueKind.String)
132 {
133 MyChannelId = jemyChannelId.GetString();
134 }
135 }
136 }
137
138 [JsonPropertyName("customField")]
139 public string? CustomField { get; set; }
140
141 [JsonPropertyName("myChannelId")]
142 public string? MyChannelId { get; set; }
143}
144
145public class MyCustomChannelDataActivity : CoreActivity
146{
147 [JsonPropertyName("channelData")]
148 public new MyChannelData? ChannelData { get; set; }
149
150 internal static MyCustomChannelDataActivity FromActivity(CoreActivity coreActivity)
151 {
152 return new MyCustomChannelDataActivity
153 {
154 Type = coreActivity.Type,
155 ChannelId = coreActivity.ChannelId,
156 Id = coreActivity.Id,
157 ServiceUrl = coreActivity.ServiceUrl,
158 ChannelData = new MyChannelData(coreActivity.ChannelData ?? new Core.Schema.ChannelData()),
159 Recipient = coreActivity.Recipient,
160 Conversation = coreActivity.Conversation,
161 Entities = coreActivity.Entities,
162 Attachments = coreActivity.Attachments,
163 Value = coreActivity.Value,
164 Properties = coreActivity.Properties
165 };
166 }
167}
168