From e5134497f18959e27f39957ac39aa47702bae75f Mon Sep 17 00:00:00 2001 From: JhontSouth Date: Fri, 17 Mar 2023 10:31:44 -0500 Subject: [PATCH 1/5] OnBehalfOf property added in TeamsChannelData --- .../Teams/TeamsActivityExtensions.cs | 11 +++++++++++ .../Microsoft.Bot.Schema/Teams/TeamsChannelData.cs | 7 +++++++ 2 files changed, 18 insertions(+) diff --git a/libraries/Microsoft.Bot.Builder/Teams/TeamsActivityExtensions.cs b/libraries/Microsoft.Bot.Builder/Teams/TeamsActivityExtensions.cs index 52113392a6..d4d1d7d9ff 100644 --- a/libraries/Microsoft.Bot.Builder/Teams/TeamsActivityExtensions.cs +++ b/libraries/Microsoft.Bot.Builder/Teams/TeamsActivityExtensions.cs @@ -88,5 +88,16 @@ public static void TeamsNotifyUser(this IActivity activity) { activity.TeamsNotifyUser(false); } + + /// + /// Gets the OnBehalfOf object from the current activity. + /// + /// The current activity. + /// The current activity's OnBehalfOf data, or empty string. + public static OnBehalfOf TeamsGetTeamOnBehalfOf(this IActivity activity) + { + var channelData = activity.GetChannelData(); + return channelData?.OnBehalfOf; + } } } diff --git a/libraries/Microsoft.Bot.Schema/Teams/TeamsChannelData.cs b/libraries/Microsoft.Bot.Schema/Teams/TeamsChannelData.cs index f9aa648e6f..82066029b8 100644 --- a/libraries/Microsoft.Bot.Schema/Teams/TeamsChannelData.cs +++ b/libraries/Microsoft.Bot.Schema/Teams/TeamsChannelData.cs @@ -91,6 +91,13 @@ public TeamsChannelData(ChannelInfo channel = default, string eventType = defaul [JsonProperty(PropertyName = "settings")] public TeamsChannelDataSettings Settings { get; set; } + /// + /// Gets or sets information about the delegation of meetings. + /// + /// The information about the attribution for notifications. + [JsonProperty(PropertyName = "onBehalfOf")] + public OnBehalfOf OnBehalfOf { get; set; } + /// /// Gets or sets properties that are not otherwise defined by the type but that /// might appear in the REST JSON object. From cc90c1652f20262ed823e8354a2677017086be85 Mon Sep 17 00:00:00 2001 From: CeciliaAvila Date: Wed, 22 Mar 2023 15:21:51 -0300 Subject: [PATCH 2/5] Fix implementation --- .../Teams/TeamsActivityExtensions.cs | 7 ++--- .../Teams/TeamsChannelData.cs | 10 ++++--- .../Teams/TeamsActivityExtensionsTests.cs | 26 ++++++++++++++++++- .../Teams/TeamsChannelDataTests.cs | 15 ++++++++++- 4 files changed, 49 insertions(+), 9 deletions(-) diff --git a/libraries/Microsoft.Bot.Builder/Teams/TeamsActivityExtensions.cs b/libraries/Microsoft.Bot.Builder/Teams/TeamsActivityExtensions.cs index d4d1d7d9ff..3d1452f6f0 100644 --- a/libraries/Microsoft.Bot.Builder/Teams/TeamsActivityExtensions.cs +++ b/libraries/Microsoft.Bot.Builder/Teams/TeamsActivityExtensions.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. +using System.Collections.Generic; using Microsoft.Bot.Schema; using Microsoft.Bot.Schema.Teams; @@ -90,11 +91,11 @@ public static void TeamsNotifyUser(this IActivity activity) } /// - /// Gets the OnBehalfOf object from the current activity. + /// Gets the Teams OnBehalfOf list from the current activity. /// /// The current activity. - /// The current activity's OnBehalfOf data, or empty string. - public static OnBehalfOf TeamsGetTeamOnBehalfOf(this IActivity activity) + /// The current activity's OnBehalfOf list, or null. + public static IList TeamsGetTeamOnBehalfOf(this IActivity activity) { var channelData = activity.GetChannelData(); return channelData?.OnBehalfOf; diff --git a/libraries/Microsoft.Bot.Schema/Teams/TeamsChannelData.cs b/libraries/Microsoft.Bot.Schema/Teams/TeamsChannelData.cs index 82066029b8..c7055885d6 100644 --- a/libraries/Microsoft.Bot.Schema/Teams/TeamsChannelData.cs +++ b/libraries/Microsoft.Bot.Schema/Teams/TeamsChannelData.cs @@ -28,13 +28,15 @@ public TeamsChannelData() /// Notification settings for the message. /// Information about the tenant in which the /// message was sent. - public TeamsChannelData(ChannelInfo channel = default, string eventType = default, TeamInfo team = default, NotificationInfo notification = default, TenantInfo tenant = default) + /// The OnBehalfOf information of the message. + public TeamsChannelData(ChannelInfo channel = default, string eventType = default, TeamInfo team = default, NotificationInfo notification = default, TenantInfo tenant = default, IList onBehalfOf = default) { Channel = channel; EventType = eventType; Team = team; Notification = notification; Tenant = tenant; + OnBehalfOf = onBehalfOf ?? new List(); CustomInit(); } @@ -92,11 +94,11 @@ public TeamsChannelData(ChannelInfo channel = default, string eventType = defaul public TeamsChannelDataSettings Settings { get; set; } /// - /// Gets or sets information about the delegation of meetings. + /// Gets the OnBehalfOf list for user attribution. /// - /// The information about the attribution for notifications. + /// The Teams activity OnBehalfOf list. [JsonProperty(PropertyName = "onBehalfOf")] - public OnBehalfOf OnBehalfOf { get; set; } + public IList OnBehalfOf { get; private set; } /// /// Gets or sets properties that are not otherwise defined by the type but that diff --git a/tests/Microsoft.Bot.Builder.Tests/Teams/TeamsActivityExtensionsTests.cs b/tests/Microsoft.Bot.Builder.Tests/Teams/TeamsActivityExtensionsTests.cs index 37f44e6f80..1575e62bca 100644 --- a/tests/Microsoft.Bot.Builder.Tests/Teams/TeamsActivityExtensionsTests.cs +++ b/tests/Microsoft.Bot.Builder.Tests/Teams/TeamsActivityExtensionsTests.cs @@ -1,6 +1,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. +using System; +using System.Collections.Generic; using Microsoft.Bot.Schema; using Microsoft.Bot.Schema.Teams; using Xunit; @@ -21,7 +23,7 @@ public void TeamsGetSelectedChannelId() // Assert Assert.Equal("channel123", channelId); } - + [Fact] public void TeamsGetSelectedChannelIdNullSettings() { @@ -130,5 +132,27 @@ public void TeamsNotifyUserExistingNotification() Assert.Equal(true, ((TeamsChannelData)activity.ChannelData).Notification.Alert); Assert.Equal("team123", ((TeamsChannelData)activity.ChannelData).Team.Id); } + + [Fact] + public void TeamsChannelDataExistingOnBehalfOf() + { + // Arrange + var onBehalfOf = new OnBehalfOf + { + DisplayName = "TestOnBehalfOf", + ItemId = new Random().Next(), + MentionType = Guid.NewGuid().ToString(), + Mri = Guid.NewGuid().ToString() + }; + + var activity = new Activity { ChannelData = new TeamsChannelData(onBehalfOf: new List { onBehalfOf }) }; + + // Act + var onBehalfOfList = activity.TeamsGetTeamOnBehalfOf(); + + // Assert + Assert.Equal(1, onBehalfOfList.Count); + Assert.Equal("TestOnBehalfOf", onBehalfOfList[0].DisplayName); + } } } diff --git a/tests/Microsoft.Bot.Schema.Tests/Teams/TeamsChannelDataTests.cs b/tests/Microsoft.Bot.Schema.Tests/Teams/TeamsChannelDataTests.cs index 719f301a20..57b00de4a0 100644 --- a/tests/Microsoft.Bot.Schema.Tests/Teams/TeamsChannelDataTests.cs +++ b/tests/Microsoft.Bot.Schema.Tests/Teams/TeamsChannelDataTests.cs @@ -1,6 +1,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. +using System; +using System.Collections.Generic; using Microsoft.Bot.Schema.Teams; using Newtonsoft.Json.Linq; using Xunit; @@ -19,7 +21,17 @@ public void TeamsChannelDataInits() var tenant = new TenantInfo("uniqueTenantId"); var meeting = new TeamsMeetingInfo("BFSE Stand Up"); var settings = new TeamsChannelDataSettings(channel); - var channelData = new TeamsChannelData(channel, eventType, team, notification, tenant) + var onBehalfOf = new List() + { + new () + { + DisplayName = "onBehalfOfTest", + ItemId = new Random().Next(), + MentionType = Guid.NewGuid().ToString(), + Mri = Guid.NewGuid().ToString() + } + }; + var channelData = new TeamsChannelData(channel, eventType, team, notification, tenant, onBehalfOf) { Meeting = meeting, Settings = settings @@ -34,6 +46,7 @@ public void TeamsChannelDataInits() Assert.Equal(tenant, channelData.Tenant); Assert.Equal(settings, channelData.Settings); Assert.Equal(channel, channelData.Settings.SelectedChannel); + Assert.Equal(onBehalfOf[0].DisplayName, channelData.OnBehalfOf[0].DisplayName); } [Fact] From 656e94df4dc4b92ceab2c2082299c6f451f7c518 Mon Sep 17 00:00:00 2001 From: JhontSouth Date: Thu, 23 Mar 2023 10:05:21 -0500 Subject: [PATCH 3/5] add unit test --- .../Teams/TeamsChannelDataTests.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/Microsoft.Bot.Schema.Tests/Teams/TeamsChannelDataTests.cs b/tests/Microsoft.Bot.Schema.Tests/Teams/TeamsChannelDataTests.cs index 57b00de4a0..9f49c4a200 100644 --- a/tests/Microsoft.Bot.Schema.Tests/Teams/TeamsChannelDataTests.cs +++ b/tests/Microsoft.Bot.Schema.Tests/Teams/TeamsChannelDataTests.cs @@ -23,11 +23,11 @@ public void TeamsChannelDataInits() var settings = new TeamsChannelDataSettings(channel); var onBehalfOf = new List() { - new () + new OnBehalfOf() { DisplayName = "onBehalfOfTest", - ItemId = new Random().Next(), - MentionType = Guid.NewGuid().ToString(), + ItemId = 0, + MentionType = "person", Mri = Guid.NewGuid().ToString() } }; @@ -46,7 +46,7 @@ public void TeamsChannelDataInits() Assert.Equal(tenant, channelData.Tenant); Assert.Equal(settings, channelData.Settings); Assert.Equal(channel, channelData.Settings.SelectedChannel); - Assert.Equal(onBehalfOf[0].DisplayName, channelData.OnBehalfOf[0].DisplayName); + Assert.Equal(onBehalfOf, channelData.OnBehalfOf); } [Fact] From f5ba9057448194b5ce21e105f516758ce93fe4ad Mon Sep 17 00:00:00 2001 From: JhontSouth Date: Thu, 23 Mar 2023 11:54:35 -0500 Subject: [PATCH 4/5] add overloaded constructor --- .../Teams/TeamsChannelData.cs | 19 +++++++++++++++++++ .../Teams/TeamsActivityExtensionsTests.cs | 4 ++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/libraries/Microsoft.Bot.Schema/Teams/TeamsChannelData.cs b/libraries/Microsoft.Bot.Schema/Teams/TeamsChannelData.cs index c7055885d6..3387a25caa 100644 --- a/libraries/Microsoft.Bot.Schema/Teams/TeamsChannelData.cs +++ b/libraries/Microsoft.Bot.Schema/Teams/TeamsChannelData.cs @@ -19,6 +19,25 @@ public TeamsChannelData() CustomInit(); } + /// + /// Initializes a new instance of the class. + /// + /// Information about the channel in which the message was sent. + /// Type of event. + /// Information about the team in which the message was sent. + /// Notification settings for the message. + /// Information about the tenant in which the + /// message was sent. + public TeamsChannelData(ChannelInfo channel = default, string eventType = default, TeamInfo team = default, NotificationInfo notification = default, TenantInfo tenant = default) + { + Channel = channel; + EventType = eventType; + Team = team; + Notification = notification; + Tenant = tenant; + CustomInit(); + } + /// /// Initializes a new instance of the class. /// diff --git a/tests/Microsoft.Bot.Builder.Tests/Teams/TeamsActivityExtensionsTests.cs b/tests/Microsoft.Bot.Builder.Tests/Teams/TeamsActivityExtensionsTests.cs index 1575e62bca..03b384b422 100644 --- a/tests/Microsoft.Bot.Builder.Tests/Teams/TeamsActivityExtensionsTests.cs +++ b/tests/Microsoft.Bot.Builder.Tests/Teams/TeamsActivityExtensionsTests.cs @@ -140,8 +140,8 @@ public void TeamsChannelDataExistingOnBehalfOf() var onBehalfOf = new OnBehalfOf { DisplayName = "TestOnBehalfOf", - ItemId = new Random().Next(), - MentionType = Guid.NewGuid().ToString(), + ItemId = 0, + MentionType = "person", Mri = Guid.NewGuid().ToString() }; From 7729de90e61824d2ee0475bb8d0db77c85d363b8 Mon Sep 17 00:00:00 2001 From: JhontSouth Date: Thu, 23 Mar 2023 13:00:54 -0500 Subject: [PATCH 5/5] modify old TeamsChannelData constructor --- libraries/Microsoft.Bot.Schema/Teams/TeamsChannelData.cs | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/libraries/Microsoft.Bot.Schema/Teams/TeamsChannelData.cs b/libraries/Microsoft.Bot.Schema/Teams/TeamsChannelData.cs index 3387a25caa..f8aef4a470 100644 --- a/libraries/Microsoft.Bot.Schema/Teams/TeamsChannelData.cs +++ b/libraries/Microsoft.Bot.Schema/Teams/TeamsChannelData.cs @@ -29,13 +29,8 @@ public TeamsChannelData() /// Information about the tenant in which the /// message was sent. public TeamsChannelData(ChannelInfo channel = default, string eventType = default, TeamInfo team = default, NotificationInfo notification = default, TenantInfo tenant = default) + : this(channel, eventType, team, notification, tenant, null) { - Channel = channel; - EventType = eventType; - Team = team; - Notification = notification; - Tenant = tenant; - CustomInit(); } ///