diff --git a/SlackNet.Tests/MessageThreadTests.cs b/SlackNet.Tests/MessageThreadTests.cs new file mode 100644 index 0000000..57b76fb --- /dev/null +++ b/SlackNet.Tests/MessageThreadTests.cs @@ -0,0 +1,49 @@ +using EasyAssertions; +using Newtonsoft.Json; +using NUnit.Framework; +using SlackNet.Events; + +namespace SlackNet.Tests; + +public class MessageThreadTests +{ + private JsonSerializerSettings _sut; + + [SetUp] + public void SetUp() + { + _sut = Default.JsonSettings(Default.SlackTypeResolver(Default.AssembliesContainingSlackTypes)).SerializerSettings; + } + + [Test] + public void MessageEvent_ThreadReply_HasParentUserId() + { + var result = Deserialize(@"{ ""type"": ""message"", ""user"": ""U123ABC456"", ""text"": ""one island"", ""thread_ts"": ""1482960137.003543"", ""parent_user_id"": ""U061F7AUR"", ""ts"": ""1483037603.017503"" }"); + + var message = result.ShouldBeA().And; + message.ParentUserId.ShouldBe("U061F7AUR"); + message.ExtraProperties.ShouldBeEmpty(); + } + + [Test] + public void MessageEvent_ThreadParent_HasSubscribed() + { + var result = Deserialize(@"{ ""type"": ""message"", ""user"": ""U123ABC456"", ""text"": ""island"", ""thread_ts"": ""1482960137.003543"", ""reply_count"": 3, ""subscribed"": true, ""ts"": ""1482960137.003543"" }"); + + var message = result.ShouldBeA().And; + message.Subscribed.ShouldBe(true); + message.ExtraProperties.ShouldBeEmpty(); + } + + [Test] + public void MessageEvent_OutsideAThread_HasNoParentUserIdAndIsNotSubscribed() + { + var result = Deserialize(@"{ ""type"": ""message"", ""user"": ""U123ABC456"", ""text"": ""Hello"", ""ts"": ""1355517523.000005"" }"); + + var message = result.ShouldBeA().And; + message.ParentUserId.ShouldBeNull(); + message.Subscribed.ShouldBe(false); + } + + private T Deserialize(string json) => JsonConvert.DeserializeObject(json, _sut); +} diff --git a/SlackNet/Events/Messages/MessageEvent.cs b/SlackNet/Events/Messages/MessageEvent.cs index 2b91c26..9f43e83 100644 --- a/SlackNet/Events/Messages/MessageEvent.cs +++ b/SlackNet/Events/Messages/MessageEvent.cs @@ -17,6 +17,8 @@ public class MessageEvent : MessageEventBase public IList ReplyUsers { get; set; } = []; public int ReplyUsersCount { get; set; } public string LatestReply { get; set; } + public string ParentUserId { get; set; } + public bool Subscribed { get; set; } public bool IsStarred { get; set; } public IList Reactions { get; set; } = []; public IList PinnedTo { get; set; } = [];