JsonLowerCaseConverterTests.cs 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. using System.Text.Json;
  2. using System.Text.Json.Serialization;
  3. using MediaBrowser.Model.Entities;
  4. using Xunit;
  5. namespace Jellyfin.Model.Tests.Entities
  6. {
  7. public class JsonLowerCaseConverterTests
  8. {
  9. private readonly JsonSerializerOptions _jsonOptions = new JsonSerializerOptions()
  10. {
  11. Converters =
  12. {
  13. new JsonStringEnumConverter()
  14. }
  15. };
  16. [Theory]
  17. [InlineData(null, "{\"CollectionType\":null}")]
  18. [InlineData(CollectionTypeOptions.Movies, "{\"CollectionType\":\"movies\"}")]
  19. [InlineData(CollectionTypeOptions.MusicVideos, "{\"CollectionType\":\"musicvideos\"}")]
  20. public void Serialize_CollectionTypeOptions_Correct(CollectionTypeOptions? collectionType, string expected)
  21. {
  22. Assert.Equal(expected, JsonSerializer.Serialize(new TestContainer(collectionType), _jsonOptions));
  23. }
  24. [Theory]
  25. [InlineData("{\"CollectionType\":null}", null)]
  26. [InlineData("{\"CollectionType\":\"movies\"}", CollectionTypeOptions.Movies)]
  27. [InlineData("{\"CollectionType\":\"musicvideos\"}", CollectionTypeOptions.MusicVideos)]
  28. public void Deserialize_CollectionTypeOptions_Correct(string json, CollectionTypeOptions? result)
  29. {
  30. var res = JsonSerializer.Deserialize<TestContainer>(json, _jsonOptions);
  31. Assert.NotNull(res);
  32. Assert.Equal(result, res!.CollectionType);
  33. }
  34. [Theory]
  35. [InlineData(null)]
  36. [InlineData(CollectionTypeOptions.Movies)]
  37. [InlineData(CollectionTypeOptions.MusicVideos)]
  38. public void RoundTrip_CollectionTypeOptions_Correct(CollectionTypeOptions? value)
  39. {
  40. var res = JsonSerializer.Deserialize<TestContainer>(JsonSerializer.Serialize(new TestContainer(value), _jsonOptions), _jsonOptions);
  41. Assert.NotNull(res);
  42. Assert.Equal(value, res!.CollectionType);
  43. }
  44. [Theory]
  45. [InlineData("{\"CollectionType\":null}")]
  46. [InlineData("{\"CollectionType\":\"movies\"}")]
  47. [InlineData("{\"CollectionType\":\"musicvideos\"}")]
  48. public void RoundTrip_String_Correct(string json)
  49. {
  50. var res = JsonSerializer.Serialize(JsonSerializer.Deserialize<TestContainer>(json, _jsonOptions), _jsonOptions);
  51. Assert.Equal(json, res);
  52. }
  53. private class TestContainer
  54. {
  55. public TestContainer(CollectionTypeOptions? collectionType)
  56. {
  57. CollectionType = collectionType;
  58. }
  59. [JsonConverter(typeof(JsonLowerCaseConverter<CollectionTypeOptions?>))]
  60. public CollectionTypeOptions? CollectionType { get; set; }
  61. }
  62. }
  63. }