From 975ce2ccc8c8b69b513759d59106e0bad6a8e662 Mon Sep 17 00:00:00 2001 From: Rui Tome Date: Fri, 22 Sep 2023 16:04:30 +0100 Subject: [PATCH] [AC-1637] Added unit tests for HtmlEncodingStringConverter --- .../HtmlEncodingStringConverterTests.cs | 89 +++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 test/Core.Test/Utilities/HtmlEncodingStringConverterTests.cs diff --git a/test/Core.Test/Utilities/HtmlEncodingStringConverterTests.cs b/test/Core.Test/Utilities/HtmlEncodingStringConverterTests.cs new file mode 100644 index 0000000000..0d0cffb79d --- /dev/null +++ b/test/Core.Test/Utilities/HtmlEncodingStringConverterTests.cs @@ -0,0 +1,89 @@ +using System.Text.Json; +using System.Text.Json.Serialization; +using Bit.Core.Utilities; +using Xunit; + +namespace Bit.Core.Test.Utilities; + +public class HtmlEncodingStringConverterTests +{ + [Fact] + public void Serialize_WhenEncodedValueIsNotNull_SerializesHtmlEncodedString() + { + // Arrange + var obj = new HtmlEncodedString + { + EncodedValue = "This is <b>bold</b>", + NonEncodedValue = "This is bold" + }; + + // This is necessary to prevent the serializer from double encoding the string + var serializerOptions = new JsonSerializerOptions + { + Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping, + }; + + // Act + var jsonString = JsonSerializer.Serialize(obj, serializerOptions); + + // Assert + const string expected = "{\"EncodedValue\":\"This is bold\",\"NonEncodedValue\":\"This is bold\"}"; + Assert.Equal(expected, jsonString); + } + + [Fact] + public void Serialize_WhenEncodedValueIsNull_SerializesNull() + { + // Arrange + var obj = new HtmlEncodedString + { + EncodedValue = null, + NonEncodedValue = null + }; + + // Act + var jsonString = JsonSerializer.Serialize(obj); + + // Assert + const string expected = "{\"EncodedValue\":null,\"NonEncodedValue\":null}"; + Assert.Equal(expected, jsonString); + } + + [Fact] + public void Deserialize_WhenJsonContainsHtmlEncodedString_ReturnsDecodedString() + { + // Arrange + const string json = "{\"EncodedValue\":\"This is bold\",\"NonEncodedValue\":\"This is bold\"}"; + + // Act + var obj = JsonSerializer.Deserialize(json); + + // Assert + const string expectedEncodedValue = "This is <b>bold</b>"; + const string expectedNonEncodedValue = "This is bold"; + Assert.Equal(expectedEncodedValue, obj.EncodedValue); + Assert.Equal(expectedNonEncodedValue, obj.NonEncodedValue); + } + + [Fact] + public void Deserialize_WhenJsonContainsNull_ReturnsNull() + { + // Arrange + const string json = "{\"EncodedValue\":null,\"NonEncodedValue\":null}"; + + // Act + var obj = JsonSerializer.Deserialize(json); + + // Assert + Assert.Null(obj.EncodedValue); + Assert.Null(obj.NonEncodedValue); + } +} + +public class HtmlEncodedString +{ + [JsonConverter(typeof(HtmlEncodingStringConverter))] + public string EncodedValue { get; set; } + + public string NonEncodedValue { get; set; } +}