JsonLowerCaseConverterTests.cs 2.8 KB

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