Fix casing CollectionType
This commit is contained in:
parent
ed7154db68
commit
2e62c09f2e
29
MediaBrowser.Model/Entities/JsonLowerCaseConverter.cs
Normal file
29
MediaBrowser.Model/Entities/JsonLowerCaseConverter.cs
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
#nullable disable
|
||||||
|
// THIS IS A HACK
|
||||||
|
// TODO: @bond Move to separate project
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Text.Json;
|
||||||
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
|
namespace MediaBrowser.Model.Entities
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Converts an object to a lowercase string.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T">The object type.</typeparam>
|
||||||
|
public class JsonLowerCaseConverter<T> : JsonConverter<T>
|
||||||
|
{
|
||||||
|
/// <inheritdoc />
|
||||||
|
public override T Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
||||||
|
{
|
||||||
|
return JsonSerializer.Deserialize<T>(ref reader, options);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
public override void Write(Utf8JsonWriter writer, T value, JsonSerializerOptions options)
|
||||||
|
{
|
||||||
|
writer.WriteStringValue(value?.ToString().ToLowerInvariant());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,6 +2,7 @@
|
||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
|
using System.Text.Json.Serialization;
|
||||||
using MediaBrowser.Model.Configuration;
|
using MediaBrowser.Model.Configuration;
|
||||||
|
|
||||||
namespace MediaBrowser.Model.Entities
|
namespace MediaBrowser.Model.Entities
|
||||||
|
@ -35,6 +36,7 @@ namespace MediaBrowser.Model.Entities
|
||||||
/// Gets or sets the type of the collection.
|
/// Gets or sets the type of the collection.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>The type of the collection.</value>
|
/// <value>The type of the collection.</value>
|
||||||
|
[JsonConverter(typeof(JsonLowerCaseConverter<CollectionTypeOptions?>))]
|
||||||
public CollectionTypeOptions? CollectionType { get; set; }
|
public CollectionTypeOptions? CollectionType { get; set; }
|
||||||
|
|
||||||
public LibraryOptions LibraryOptions { get; set; }
|
public LibraryOptions LibraryOptions { get; set; }
|
||||||
|
|
|
@ -0,0 +1,70 @@
|
||||||
|
using System.Text.Json;
|
||||||
|
using System.Text.Json.Serialization;
|
||||||
|
using MediaBrowser.Model.Entities;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
namespace Jellyfin.Model.Tests.Entities
|
||||||
|
{
|
||||||
|
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<TestContainer>(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<TestContainer>(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<TestContainer>(json, _jsonOptions), _jsonOptions);
|
||||||
|
Assert.Equal(json, res);
|
||||||
|
}
|
||||||
|
|
||||||
|
private class TestContainer
|
||||||
|
{
|
||||||
|
public TestContainer(CollectionTypeOptions? collectionType)
|
||||||
|
{
|
||||||
|
CollectionType = collectionType;
|
||||||
|
}
|
||||||
|
|
||||||
|
[JsonConverter(typeof(JsonLowerCaseConverter<CollectionTypeOptions?>))]
|
||||||
|
public CollectionTypeOptions? CollectionType { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user