Files
Umbraco-CMS/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Serialization/SystemTextJsonSerializerTests.cs
Andy Butland 44aa5dcf1c Provides an abstraction for creating the JavaScriptEncoder used in SystemTextConfigurationEditorJsonSerializer (#19849)
* Provides an abstraction for creating the JavaScriptEncoder used in SystemTextConfigurationEditorJsonSerializer.

* Generalised JSON serialization encoder factory to work for all System.Tex.Json serializers.
Added the serializer's name as a parameter to allow for different encodings per serializer if required.

* Fixed tests by removing use of obsolete constructors.

* Removed name parameter and used a generic type instead.
2025-08-07 09:08:09 +02:00

54 lines
1.8 KiB
C#

using System.Text.Json.Nodes;
using NUnit.Framework;
using Umbraco.Cms.Infrastructure.Serialization;
namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.Serialization;
[TestFixture]
public class SystemTextJsonSerializerTests
{
[Test]
public void TryDeserialize_Can_Handle_JsonObject()
{
var json = JsonNode.Parse("{\"myProperty\":\"value\"}");
var subject = new SystemTextJsonSerializer(new DefaultJsonSerializerEncoderFactory());
Assert.IsTrue(subject.TryDeserialize(json!, out MyItem myItem));
Assert.AreEqual("value", myItem.MyProperty);
}
[Test]
public void TryDeserialize_Can_Handle_JsonArray()
{
var json = JsonNode.Parse("[{\"myProperty\":\"value1\"},{\"myProperty\":\"value2\"}]");
var subject = new SystemTextJsonSerializer(new DefaultJsonSerializerEncoderFactory());
Assert.IsTrue(subject.TryDeserialize(json!, out MyItem[] myItems));
Assert.AreEqual(2, myItems.Length);
Assert.Multiple(() =>
{
Assert.AreEqual("value1", myItems[0].MyProperty);
Assert.AreEqual("value2", myItems[1].MyProperty);
});
}
[Test]
public void TryDeserialize_Can_Handle_JsonString()
{
var json = "{\"myProperty\":\"value\"}";
var subject = new SystemTextJsonSerializer(new DefaultJsonSerializerEncoderFactory());
Assert.IsTrue(subject.TryDeserialize(json, out MyItem myItem));
Assert.AreEqual("value", myItem.MyProperty);
}
[Test]
public void TryDeserialize_Cannot_Handle_RandomString()
{
var subject = new SystemTextJsonSerializer(new DefaultJsonSerializerEncoderFactory());
Assert.IsFalse(subject.TryDeserialize<MyItem>("something something", out _));
}
private class MyItem
{
public required string MyProperty { get; set; }
}
}