diff --git a/Libraries/Microsoft.Teams.Api/Activities/Invokes/AdaptiveCards/ActionActivity.cs b/Libraries/Microsoft.Teams.Api/Activities/Invokes/AdaptiveCards/ActionActivity.cs index 2f63cc68..8cf47db6 100644 --- a/Libraries/Microsoft.Teams.Api/Activities/Invokes/AdaptiveCards/ActionActivity.cs +++ b/Libraries/Microsoft.Teams.Api/Activities/Invokes/AdaptiveCards/ActionActivity.cs @@ -25,6 +25,10 @@ public class ActionActivity() : AdaptiveCardActivity(Name.AdaptiveCards.Action) /// [JsonPropertyName("value")] [JsonPropertyOrder(32)] - public new required Api.AdaptiveCards.InvokeValue Value { get; set; } + public new required Api.AdaptiveCards.InvokeValue Value + { + get => (Api.AdaptiveCards.InvokeValue)base.Value!; + set => base.Value = value; + } } } \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Api/Activities/Invokes/HandoffActivity.cs b/Libraries/Microsoft.Teams.Api/Activities/Invokes/HandoffActivity.cs index 64f03df2..e7141ef1 100644 --- a/Libraries/Microsoft.Teams.Api/Activities/Invokes/HandoffActivity.cs +++ b/Libraries/Microsoft.Teams.Api/Activities/Invokes/HandoffActivity.cs @@ -20,7 +20,11 @@ public class HandoffActivity() : InvokeActivity(Name.Handoff) /// [JsonPropertyName("value")] [JsonPropertyOrder(32)] - public new required HandoffActivityValue Value { get; set; } + public new required HandoffActivityValue Value + { + get => (HandoffActivityValue)base.Value!; + set => base.Value = value; + } } public class HandoffActivityValue diff --git a/Libraries/Microsoft.Teams.Api/Activities/Invokes/MessageExtensions/AnonQueryLinkActivity.cs b/Libraries/Microsoft.Teams.Api/Activities/Invokes/MessageExtensions/AnonQueryLinkActivity.cs index b365beda..00b16434 100644 --- a/Libraries/Microsoft.Teams.Api/Activities/Invokes/MessageExtensions/AnonQueryLinkActivity.cs +++ b/Libraries/Microsoft.Teams.Api/Activities/Invokes/MessageExtensions/AnonQueryLinkActivity.cs @@ -25,6 +25,10 @@ public class AnonQueryLinkActivity() : MessageExtensionActivity(Name.MessageExte /// [JsonPropertyName("value")] [JsonPropertyOrder(32)] - public new required AppBasedQueryLink Value { get; set; } + public new required AppBasedQueryLink Value + { + get => (AppBasedQueryLink)base.Value!; + set => base.Value = value; + } } } \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Api/Activities/Invokes/MessageExtensions/FetchTaskActivity.cs b/Libraries/Microsoft.Teams.Api/Activities/Invokes/MessageExtensions/FetchTaskActivity.cs index e52b4306..66845a7d 100644 --- a/Libraries/Microsoft.Teams.Api/Activities/Invokes/MessageExtensions/FetchTaskActivity.cs +++ b/Libraries/Microsoft.Teams.Api/Activities/Invokes/MessageExtensions/FetchTaskActivity.cs @@ -25,6 +25,10 @@ public class FetchTaskActivity() : MessageExtensionActivity(Name.MessageExtensio /// [JsonPropertyName("value")] [JsonPropertyOrder(32)] - public new required Api.MessageExtensions.Action Value { get; set; } + public new required Api.MessageExtensions.Action Value + { + get => (Api.MessageExtensions.Action)base.Value!; + set => base.Value = value; + } } } \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Api/Activities/Invokes/MessageExtensions/QueryActivity.cs b/Libraries/Microsoft.Teams.Api/Activities/Invokes/MessageExtensions/QueryActivity.cs index 1555850b..f80ec669 100644 --- a/Libraries/Microsoft.Teams.Api/Activities/Invokes/MessageExtensions/QueryActivity.cs +++ b/Libraries/Microsoft.Teams.Api/Activities/Invokes/MessageExtensions/QueryActivity.cs @@ -25,6 +25,10 @@ public class QueryActivity() : MessageExtensionActivity(Name.MessageExtensions.Q /// [JsonPropertyName("value")] [JsonPropertyOrder(32)] - public new required Api.MessageExtensions.Query Value { get; set; } + public new required Api.MessageExtensions.Query Value + { + get => (Api.MessageExtensions.Query)base.Value!; + set => base.Value = value; + } } } \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Api/Activities/Invokes/MessageExtensions/QueryLinkActivity.cs b/Libraries/Microsoft.Teams.Api/Activities/Invokes/MessageExtensions/QueryLinkActivity.cs index ae59a2da..3eb7f5fa 100644 --- a/Libraries/Microsoft.Teams.Api/Activities/Invokes/MessageExtensions/QueryLinkActivity.cs +++ b/Libraries/Microsoft.Teams.Api/Activities/Invokes/MessageExtensions/QueryLinkActivity.cs @@ -25,6 +25,10 @@ public class QueryLinkActivity() : MessageExtensionActivity(Name.MessageExtensio /// [JsonPropertyName("value")] [JsonPropertyOrder(32)] - public new required AppBasedQueryLink Value { get; set; } + public new required AppBasedQueryLink Value + { + get => (AppBasedQueryLink)base.Value!; + set => base.Value = value; + } } } \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Api/Activities/Invokes/MessageExtensions/QuerySettingUrlActivity.cs b/Libraries/Microsoft.Teams.Api/Activities/Invokes/MessageExtensions/QuerySettingUrlActivity.cs index e378e2bf..b94f3b52 100644 --- a/Libraries/Microsoft.Teams.Api/Activities/Invokes/MessageExtensions/QuerySettingUrlActivity.cs +++ b/Libraries/Microsoft.Teams.Api/Activities/Invokes/MessageExtensions/QuerySettingUrlActivity.cs @@ -25,6 +25,10 @@ public class QuerySettingUrlActivity() : MessageExtensionActivity(Name.MessageEx /// [JsonPropertyName("value")] [JsonPropertyOrder(32)] - public new required Api.MessageExtensions.Query Value { get; set; } + public new required Api.MessageExtensions.Query Value + { + get => (Api.MessageExtensions.Query)base.Value!; + set => base.Value = value; + } } } \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Api/Activities/Invokes/MessageExtensions/SettingActivity.cs b/Libraries/Microsoft.Teams.Api/Activities/Invokes/MessageExtensions/SettingActivity.cs index 44f8b18d..1c919e81 100644 --- a/Libraries/Microsoft.Teams.Api/Activities/Invokes/MessageExtensions/SettingActivity.cs +++ b/Libraries/Microsoft.Teams.Api/Activities/Invokes/MessageExtensions/SettingActivity.cs @@ -25,6 +25,10 @@ public class SettingActivity() : MessageExtensionActivity(Name.MessageExtensions /// [JsonPropertyName("value")] [JsonPropertyOrder(32)] - public new required Api.MessageExtensions.Query Value { get; set; } + public new required Api.MessageExtensions.Query Value + { + get => (Api.MessageExtensions.Query)base.Value!; + set => base.Value = value; + } } } \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Api/Activities/Invokes/MessageExtensions/SubmitActionActivity.cs b/Libraries/Microsoft.Teams.Api/Activities/Invokes/MessageExtensions/SubmitActionActivity.cs index ed33f7cd..e74a6c68 100644 --- a/Libraries/Microsoft.Teams.Api/Activities/Invokes/MessageExtensions/SubmitActionActivity.cs +++ b/Libraries/Microsoft.Teams.Api/Activities/Invokes/MessageExtensions/SubmitActionActivity.cs @@ -25,6 +25,10 @@ public class SubmitActionActivity() : MessageExtensionActivity(Name.MessageExten /// [JsonPropertyName("value")] [JsonPropertyOrder(32)] - public new required Api.MessageExtensions.Action Value { get; set; } + public new required Api.MessageExtensions.Action Value + { + get => (Api.MessageExtensions.Action)base.Value!; + set => base.Value = value; + } } } \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Api/Activities/Invokes/Messages/SubmitActionActivity.cs b/Libraries/Microsoft.Teams.Api/Activities/Invokes/Messages/SubmitActionActivity.cs index e8497b46..e77ee69f 100644 --- a/Libraries/Microsoft.Teams.Api/Activities/Invokes/Messages/SubmitActionActivity.cs +++ b/Libraries/Microsoft.Teams.Api/Activities/Invokes/Messages/SubmitActionActivity.cs @@ -25,7 +25,11 @@ public class SubmitActionActivity() : MessageActivity(Name.Messages.SubmitAction /// [JsonPropertyName("value")] [JsonPropertyOrder(32)] - public new required SubmitActionValue Value { get; set; } + public new required SubmitActionValue Value + { + get => (SubmitActionValue)base.Value!; + set => base.Value = value; + } /// /// The Submit Action diff --git a/Libraries/Microsoft.Teams.Api/Activities/Invokes/SearchActivity.cs b/Libraries/Microsoft.Teams.Api/Activities/Invokes/SearchActivity.cs index a573f749..83761a34 100644 --- a/Libraries/Microsoft.Teams.Api/Activities/Invokes/SearchActivity.cs +++ b/Libraries/Microsoft.Teams.Api/Activities/Invokes/SearchActivity.cs @@ -18,5 +18,9 @@ public class SearchActivity() : InvokeActivity(Name.Search) /// [JsonPropertyName("value")] [JsonPropertyOrder(32)] - public new required SearchValue Value { get; set; } + public new required SearchValue Value + { + get => (SearchValue)base.Value!; + set => base.Value = value; + } } \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Api/Activities/Invokes/SignIn/TokenExchangeActivity.cs b/Libraries/Microsoft.Teams.Api/Activities/Invokes/SignIn/TokenExchangeActivity.cs index e8377417..555e23bd 100644 --- a/Libraries/Microsoft.Teams.Api/Activities/Invokes/SignIn/TokenExchangeActivity.cs +++ b/Libraries/Microsoft.Teams.Api/Activities/Invokes/SignIn/TokenExchangeActivity.cs @@ -25,6 +25,10 @@ public class TokenExchangeActivity() : SignInActivity(Name.SignIn.TokenExchange) /// [JsonPropertyName("value")] [JsonPropertyOrder(32)] - public new required Api.SignIn.ExchangeToken Value { get; set; } + public new required Api.SignIn.ExchangeToken Value + { + get => (Api.SignIn.ExchangeToken)base.Value!; + set => base.Value = value; + } } } \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Api/Activities/Invokes/SignIn/VerifyStateActivity.cs b/Libraries/Microsoft.Teams.Api/Activities/Invokes/SignIn/VerifyStateActivity.cs index 8e40dd4b..f6c96785 100644 --- a/Libraries/Microsoft.Teams.Api/Activities/Invokes/SignIn/VerifyStateActivity.cs +++ b/Libraries/Microsoft.Teams.Api/Activities/Invokes/SignIn/VerifyStateActivity.cs @@ -25,6 +25,10 @@ public class VerifyStateActivity() : SignInActivity(Name.SignIn.VerifyState) /// [JsonPropertyName("value")] [JsonPropertyOrder(32)] - public new required Api.SignIn.StateVerifyQuery Value { get; set; } + public new required Api.SignIn.StateVerifyQuery Value + { + get => (Api.SignIn.StateVerifyQuery)base.Value!; + set => base.Value = value; + } } } \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Api/Activities/Invokes/Tabs/FetchActivity.cs b/Libraries/Microsoft.Teams.Api/Activities/Invokes/Tabs/FetchActivity.cs index dd673b1f..8e33b367 100644 --- a/Libraries/Microsoft.Teams.Api/Activities/Invokes/Tabs/FetchActivity.cs +++ b/Libraries/Microsoft.Teams.Api/Activities/Invokes/Tabs/FetchActivity.cs @@ -25,6 +25,10 @@ public class FetchActivity() : TabActivity(Name.Tabs.Fetch) /// [JsonPropertyName("value")] [JsonPropertyOrder(32)] - public new required Api.Tabs.Request Value { get; set; } + public new required Api.Tabs.Request Value + { + get => (Api.Tabs.Request)base.Value!; + set => base.Value = value; + } } } \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Api/Activities/Invokes/Tabs/SubmitActivity.cs b/Libraries/Microsoft.Teams.Api/Activities/Invokes/Tabs/SubmitActivity.cs index 2a8622bd..351f1afc 100644 --- a/Libraries/Microsoft.Teams.Api/Activities/Invokes/Tabs/SubmitActivity.cs +++ b/Libraries/Microsoft.Teams.Api/Activities/Invokes/Tabs/SubmitActivity.cs @@ -25,6 +25,10 @@ public class SubmitActivity() : TabActivity(Name.Tabs.Submit) /// [JsonPropertyName("value")] [JsonPropertyOrder(32)] - public new required Api.Tabs.Request Value { get; set; } + public new required Api.Tabs.Request Value + { + get => (Api.Tabs.Request)base.Value!; + set => base.Value = value; + } } } \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Api/Activities/Invokes/Tasks/FetchActivity.cs b/Libraries/Microsoft.Teams.Api/Activities/Invokes/Tasks/FetchActivity.cs index 38147547..c49e570e 100644 --- a/Libraries/Microsoft.Teams.Api/Activities/Invokes/Tasks/FetchActivity.cs +++ b/Libraries/Microsoft.Teams.Api/Activities/Invokes/Tasks/FetchActivity.cs @@ -25,6 +25,10 @@ public class FetchActivity() : TaskActivity(Name.Tasks.Fetch) /// [JsonPropertyName("value")] [JsonPropertyOrder(32)] - public new required TaskModules.Request Value { get; set; } + public new required TaskModules.Request Value + { + get => (TaskModules.Request)base.Value!; + set => base.Value = value; + } } } \ No newline at end of file diff --git a/Libraries/Microsoft.Teams.Api/Activities/Invokes/Tasks/SubmitActivity.cs b/Libraries/Microsoft.Teams.Api/Activities/Invokes/Tasks/SubmitActivity.cs index a8af59e1..a5cb3ec9 100644 --- a/Libraries/Microsoft.Teams.Api/Activities/Invokes/Tasks/SubmitActivity.cs +++ b/Libraries/Microsoft.Teams.Api/Activities/Invokes/Tasks/SubmitActivity.cs @@ -25,6 +25,10 @@ public class SubmitActivity() : TaskActivity(Name.Tasks.Submit) /// [JsonPropertyName("value")] [JsonPropertyOrder(32)] - public new required TaskModules.Request Value { get; set; } + public new required TaskModules.Request Value + { + get => (TaskModules.Request)base.Value!; + set => base.Value = value; + } } } \ No newline at end of file diff --git a/Tests/Microsoft.Teams.Api.Tests/Activities/Invokes/AdaptiveCards/AdaptiveCardsTests.cs b/Tests/Microsoft.Teams.Api.Tests/Activities/Invokes/AdaptiveCards/AdaptiveCardsTests.cs index 32d1b74a..db7f93c8 100644 --- a/Tests/Microsoft.Teams.Api.Tests/Activities/Invokes/AdaptiveCards/AdaptiveCardsTests.cs +++ b/Tests/Microsoft.Teams.Api.Tests/Activities/Invokes/AdaptiveCards/AdaptiveCardsTests.cs @@ -1,7 +1,10 @@ using System.Text.Json; +using Microsoft.Teams.Api.Activities; using Microsoft.Teams.Api.Activities.Invokes; +using static Microsoft.Teams.Api.Activities.Invokes.AdaptiveCards; + namespace Microsoft.Teams.Api.Tests.Activities.Invokes.AdaptiveCards; public class AdaptiveCardsTests @@ -31,4 +34,23 @@ public void AdaptiveCard_UnknownName_Throws() var ex = Assert.Throws(() => Deserialize(json)); Assert.Contains("doesn't match any known types", ex.Message); } + + [Fact] + public void AdaptiveCard_Action_Value_AccessibleFromDerivedType() + { + var json = "{\"type\":\"invoke\",\"name\":\"adaptiveCard/action\",\"value\":{\"action\":{\"type\":\"Action.Submit\"}}}"; + var activity = Deserialize(json); + var action = Assert.IsType(activity); + Assert.NotNull(action.Value); + Assert.NotNull(action.Value.Action); + } + + [Fact] + public void AdaptiveCard_Action_Value_AccessibleFromBaseType() + { + var json = "{\"type\":\"invoke\",\"name\":\"adaptiveCard/action\",\"value\":{\"action\":{\"type\":\"Action.Submit\"}}}"; + var activity = Deserialize(json); + var invoke = Assert.IsAssignableFrom(activity); + Assert.NotNull(invoke.Value); + } } \ No newline at end of file diff --git a/Tests/Microsoft.Teams.Api.Tests/Activities/Invokes/MessageExtensions/MessageExtensionsTests.cs b/Tests/Microsoft.Teams.Api.Tests/Activities/Invokes/MessageExtensions/MessageExtensionsTests.cs index edd5796c..15c9eacb 100644 --- a/Tests/Microsoft.Teams.Api.Tests/Activities/Invokes/MessageExtensions/MessageExtensionsTests.cs +++ b/Tests/Microsoft.Teams.Api.Tests/Activities/Invokes/MessageExtensions/MessageExtensionsTests.cs @@ -1,7 +1,10 @@ using System.Text.Json; +using Microsoft.Teams.Api.Activities; using Microsoft.Teams.Api.Activities.Invokes; +using static Microsoft.Teams.Api.Activities.Invokes.MessageExtensions; + namespace Microsoft.Teams.Api.Tests.Activities.Invokes.MessageExtensions; public class MessageExtensionsTests @@ -31,4 +34,23 @@ public void MessageExtension_UnknownName_Throws() var ex = Assert.Throws(() => Deserialize(json)); Assert.Contains("doesn't match any known types", ex.Message); } + + [Fact] + public void MessageExtension_Query_Value_AccessibleFromDerivedType() + { + var json = "{\"type\":\"invoke\",\"name\":\"composeExtension/query\",\"value\":{\"commandId\":\"searchCmd\"}}"; + MessageExtensionActivity? activity = Deserialize(json); + var query = Assert.IsType(activity); + Assert.NotNull(query.Value); + Assert.Equal("searchCmd", query.Value.CommandId); + } + + [Fact] + public void MessageExtension_Query_Value_AccessibleFromBaseType() + { + var json = "{\"type\":\"invoke\",\"name\":\"composeExtension/query\",\"value\":{\"commandId\":\"searchCmd\"}}"; + var activity = Deserialize(json); + var invoke = Assert.IsAssignableFrom(activity); + Assert.NotNull(invoke.Value); + } } \ No newline at end of file diff --git a/Tests/Microsoft.Teams.Api.Tests/Activities/Invokes/Tasks/TasksTests.cs b/Tests/Microsoft.Teams.Api.Tests/Activities/Invokes/Tasks/TasksTests.cs index 04c3693d..1d269b3f 100644 --- a/Tests/Microsoft.Teams.Api.Tests/Activities/Invokes/Tasks/TasksTests.cs +++ b/Tests/Microsoft.Teams.Api.Tests/Activities/Invokes/Tasks/TasksTests.cs @@ -1,7 +1,10 @@ using System.Text.Json; +using Microsoft.Teams.Api.Activities; using Microsoft.Teams.Api.Activities.Invokes; +using static Microsoft.Teams.Api.Activities.Invokes.Tasks; + namespace Microsoft.Teams.Api.Tests.Activities.Invokes.Tasks; public class TasksTests @@ -31,4 +34,22 @@ public void Task_UnknownName_Throws() var ex = Assert.Throws(() => Deserialize(json)); Assert.Contains("doesn't match any known types", ex.Message); } + + [Fact] + public void Task_Fetch_Value_AccessibleFromDerivedType() + { + var json = "{\"type\":\"invoke\",\"name\":\"task/fetch\",\"value\":{\"context\":{\"theme\":\"default\"}}}"; + var activity = Deserialize(json); + var fetch = Assert.IsType(activity); + Assert.NotNull(fetch.Value); + } + + [Fact] + public void Task_Fetch_Value_AccessibleFromBaseType() + { + var json = "{\"type\":\"invoke\",\"name\":\"task/fetch\",\"value\":{\"context\":{\"theme\":\"default\"}}}"; + var activity = Deserialize(json); + var invoke = Assert.IsAssignableFrom(activity); + Assert.NotNull(invoke.Value); + } } \ No newline at end of file