diff --git a/CHANGELOG.md b/CHANGELOG.md index f272309..2a2af72 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,13 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [2.10.0] - 2024-12-30 +### Added +- Polymorphic type discriminators on IRichMessage for deserialization + +### Changed +- Updated `System.Text.Json` to 8.0.5 fixing a [high impact security vulnerability](https://github.com/advisories/GHSA-hh2w-p6rv-4g7w) + ## [2.9.0] - 2024-06-20 ### Changed - New global messaging endpoint diff --git a/CM.Text.Tests/DeserializationTests.cs b/CM.Text.Tests/DeserializationTests.cs new file mode 100644 index 0000000..ba5e6f7 --- /dev/null +++ b/CM.Text.Tests/DeserializationTests.cs @@ -0,0 +1,23 @@ +using System.Text.Json; +using CM.Text.BusinessMessaging.Model.MultiChannel; +using FluentAssertions; + +namespace CM.Text.Tests +{ + [TestClass] + public class DeserializationTests + { + [TestMethod] + public void DeserializeTextTest() + { + var textMessage = "{\"$type\":\"TextMessage\",\"text\":\"testing correct deserialization\",\"tag\":null,\"suggestions\":null}"; + var deserialized = JsonSerializer.Deserialize(textMessage); + + deserialized.Should().BeOfType(); + var deserializedTextMessage = deserialized as TextMessage; + deserializedTextMessage!.Text.Should().Be("testing correct deserialization"); + } + } +} + + diff --git a/CM.Text.Tests/SerializationTests.cs b/CM.Text.Tests/SerializationTests.cs new file mode 100644 index 0000000..8b35aa0 --- /dev/null +++ b/CM.Text.Tests/SerializationTests.cs @@ -0,0 +1,20 @@ +using System.Text.Json; +using CM.Text.BusinessMessaging.Model.MultiChannel; +using FluentAssertions; + +namespace CM.Text.Tests +{ + [TestClass] + public class SerializationTests + { + [TestMethod] + public void SerializeTextTest() + { + var textMessage = new TextMessage("testing correct serialization"); + var serialized= JsonSerializer.Serialize(textMessage); + + serialized.Should().NotBeNullOrWhiteSpace(); + serialized.Should().Contain("\"$type\":\"TextMessage\""); + } + } +} diff --git a/CM.Text/BusinessMessaging/Model/MultiChannel/IRichMessage.cs b/CM.Text/BusinessMessaging/Model/MultiChannel/IRichMessage.cs index b773e05..cc1b6be 100644 --- a/CM.Text/BusinessMessaging/Model/MultiChannel/IRichMessage.cs +++ b/CM.Text/BusinessMessaging/Model/MultiChannel/IRichMessage.cs @@ -8,14 +8,14 @@ namespace CM.Text.BusinessMessaging.Model.MultiChannel /// Requires a json derived type for serialization to work /// [PublicAPI] - [JsonDerivedType(typeof(MediaMessage))] - [JsonDerivedType(typeof(ApplePayRequest))] - [JsonDerivedType(typeof(CarouselMessage))] - [JsonDerivedType(typeof(ContactMessage))] - [JsonDerivedType(typeof(LocationPushMessage))] - [JsonDerivedType(typeof(TemplateMessage))] - [JsonDerivedType(typeof(TextMessage))] - [JsonDerivedType(typeof(WhatsAppInteractiveMessage))] + [JsonDerivedType(typeof(MediaMessage), nameof(MediaMessage))] + [JsonDerivedType(typeof(ApplePayRequest), nameof(ApplePayRequest))] + [JsonDerivedType(typeof(CarouselMessage), nameof(CarouselMessage))] + [JsonDerivedType(typeof(ContactMessage), nameof(ContactMessage))] + [JsonDerivedType(typeof(LocationPushMessage), nameof(LocationPushMessage))] + [JsonDerivedType(typeof(TemplateMessage), nameof(TemplateMessage))] + [JsonDerivedType(typeof(TextMessage), nameof(TextMessage))] + [JsonDerivedType(typeof(WhatsAppInteractiveMessage), nameof(WhatsAppInteractiveMessage))] public interface IRichMessage { } diff --git a/CM.Text/CM.Text.csproj b/CM.Text/CM.Text.csproj index 059764a..a9ff480 100644 --- a/CM.Text/CM.Text.csproj +++ b/CM.Text/CM.Text.csproj @@ -13,12 +13,12 @@ LICENSE icon.png $([System.IO.File]::ReadAllText("$(MSBuildProjectDirectory)/../CHANGELOG.md")) - 2.9.0 + 2.10.0 https://github.com/cmdotcom/text-sdk-dotnet en true - 2.9.0 - 2.9.0 + 2.10.0 + 2.10.0 True @@ -63,7 +63,7 @@ - +