using System.Text.Json; using System.Text.Json.Serialization; using Jellyfin.Extensions.Json.Converters; using MediaBrowser.Model.Entities; using Xunit; namespace Jellyfin.Extensions.Tests.Json.Converters { public class JsonLowerCaseConverterTests { private readonly JsonSerializerOptions _jsonOptions = new JsonSerializerOptions() { Converters = { new JsonStringEnumConverter() } }; [Theory] [InlineData(null, "{\"CollectionType\":null}")] [InlineData(CollectionTypeOptions.Movies, "{\"CollectionType\":\"movies\"}")] [InlineData(CollectionTypeOptions.MusicVideos, "{\"CollectionType\":\"musicvideos\"}")] public void Serialize_CollectionTypeOptions_Correct(CollectionTypeOptions? collectionType, string expected) { Assert.Equal(expected, JsonSerializer.Serialize(new TestContainer(collectionType), _jsonOptions)); } [Theory] [InlineData("{\"CollectionType\":null}", null)] [InlineData("{\"CollectionType\":\"movies\"}", CollectionTypeOptions.Movies)] [InlineData("{\"CollectionType\":\"musicvideos\"}", CollectionTypeOptions.MusicVideos)] public void Deserialize_CollectionTypeOptions_Correct(string json, CollectionTypeOptions? result) { var res = JsonSerializer.Deserialize(json, _jsonOptions); Assert.NotNull(res); Assert.Equal(result, res!.CollectionType); } [Theory] [InlineData(null)] [InlineData(CollectionTypeOptions.Movies)] [InlineData(CollectionTypeOptions.MusicVideos)] public void RoundTrip_CollectionTypeOptions_Correct(CollectionTypeOptions? value) { var res = JsonSerializer.Deserialize(JsonSerializer.Serialize(new TestContainer(value), _jsonOptions), _jsonOptions); Assert.NotNull(res); Assert.Equal(value, res!.CollectionType); } [Theory] [InlineData("{\"CollectionType\":null}")] [InlineData("{\"CollectionType\":\"movies\"}")] [InlineData("{\"CollectionType\":\"musicvideos\"}")] public void RoundTrip_String_Correct(string json) { var res = JsonSerializer.Serialize(JsonSerializer.Deserialize(json, _jsonOptions), _jsonOptions); Assert.Equal(json, res); } private sealed class TestContainer { public TestContainer(CollectionTypeOptions? collectionType) { CollectionType = collectionType; } [JsonConverter(typeof(JsonLowerCaseConverter))] public CollectionTypeOptions? CollectionType { get; set; } } } }