microsoft/teams.net

Public

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

CodeCommitsIssuesPull requestsActionsInsightsSecurity
fix/msal-agentic-cache

Branches

Tags

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

Clone

HTTPS

Download ZIP

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

132lines · 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.Core.Schema;
8
9namespace Microsoft.Teams.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 Properties = activity.Properties,
94 CustomField = activity.Properties.TryGetValue("customField", out object? customFieldObj)
95 && customFieldObj is JsonElement jeCustomField
96 && jeCustomField.ValueKind == JsonValueKind.String
97 ? jeCustomField.GetString()
98 : null
99 };
100 }
101 [JsonPropertyName("customField")]
102 public string? CustomField { get; set; }
103}
104
105
106public class MyChannelData : ChannelData
107{
108 [JsonPropertyName("customField")]
109 public string? CustomField { get; set; }
110
111 [JsonPropertyName("myChannelId")]
112 public string? MyChannelId { get; set; }
113}
114
115public class MyCustomChannelDataActivity : CoreActivity
116{
117 [JsonPropertyName("channelData")]
118 public MyChannelData? ChannelData { get; set; }
119
120 internal static MyCustomChannelDataActivity FromActivity(CoreActivity coreActivity)
121 {
122 return new MyCustomChannelDataActivity
123 {
124 Type = coreActivity.Type,
125 ChannelId = coreActivity.ChannelId,
126 Id = coreActivity.Id,
127 ServiceUrl = coreActivity.ServiceUrl,
128 ChannelData = coreActivity.Properties.Extract<MyChannelData>("channelData"),
129 Properties = coreActivity.Properties
130 };
131 }
132}
133