JsonOmdbConverterTests.cs 5.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. using System.Text.Json;
  2. using System.Text.Json.Serialization;
  3. using MediaBrowser.Common.Json.Converters;
  4. using MediaBrowser.Providers.Plugins.Omdb;
  5. using Xunit;
  6. namespace Jellyfin.Common.Tests.Json
  7. {
  8. public class JsonOmdbConverterTests
  9. {
  10. private readonly JsonSerializerOptions _options;
  11. public JsonOmdbConverterTests()
  12. {
  13. _options = new JsonSerializerOptions();
  14. _options.Converters.Add(new JsonOmdbNotAvailableStringConverter());
  15. _options.Converters.Add(new JsonOmdbNotAvailableInt32Converter());
  16. _options.NumberHandling = JsonNumberHandling.AllowReadingFromString;
  17. }
  18. [Fact]
  19. public void Deserialize_Omdb_Response_Not_Available_Success()
  20. {
  21. const string Input = "{\"Title\":\"Chapter 1\",\"Year\":\"2013\",\"Rated\":\"TV-MA\",\"Released\":\"01 Feb 2013\",\"Season\":\"N/A\",\"Episode\":\"N/A\",\"Runtime\":\"55 min\",\"Genre\":\"Drama\",\"Director\":\"David Fincher\",\"Writer\":\"Michael Dobbs (based on the novels by), Andrew Davies (based on the mini-series by), Beau Willimon (created for television by), Beau Willimon, Sam Forman (staff writer)\",\"Actors\":\"Kevin Spacey, Robin Wright, Kate Mara, Corey Stoll\",\"Plot\":\"Congressman Francis Underwood has been declined the chair for Secretary of State. He's now gathering his own team to plot his revenge. Zoe Barnes, a reporter for the Washington Herald, will do anything to get her big break.\",\"Language\":\"English\",\"Country\":\"USA\",\"Awards\":\"N/A\",\"Poster\":\"https://m.media-amazon.com/images/M/MV5BMTY5MTU4NDQzNV5BMl5BanBnXkFtZTgwMzk2ODcxMzE@._V1_SX300.jpg\",\"Ratings\":[{\"Source\":\"Internet Movie Database\",\"Value\":\"8.7/10\"}],\"Metascore\":\"N/A\",\"imdbRating\":\"8.7\",\"imdbVotes\":\"6736\",\"imdbID\":\"tt2161930\",\"seriesID\":\"N/A\",\"Type\":\"episode\",\"Response\":\"True\"}";
  22. var seasonRootObject = JsonSerializer.Deserialize<OmdbProvider.RootObject>(Input, _options);
  23. Assert.NotNull(seasonRootObject);
  24. Assert.Null(seasonRootObject?.Awards);
  25. Assert.Null(seasonRootObject?.Episode);
  26. Assert.Null(seasonRootObject?.Metascore);
  27. }
  28. [Theory]
  29. [InlineData("\"N/A\"")]
  30. [InlineData("null")]
  31. public void Deserialization_To_Nullable_Int_Shoud_Be_Null(string input)
  32. {
  33. var result = JsonSerializer.Deserialize<int?>(input, _options);
  34. Assert.Null(result);
  35. }
  36. [Theory]
  37. [InlineData("\"N/A\"")]
  38. [InlineData("null")]
  39. public void Deserialization_To_Nullable_String_Shoud_Be_Null(string input)
  40. {
  41. var result = JsonSerializer.Deserialize<string?>(input, _options);
  42. Assert.Null(result);
  43. }
  44. [Theory]
  45. [InlineData("\"8\"", 8)]
  46. [InlineData("8", 8)]
  47. public void Deserialize_Int_Success(string input, int expected)
  48. {
  49. var result = JsonSerializer.Deserialize<int>(input, _options);
  50. Assert.Equal(result, expected);
  51. }
  52. [Fact]
  53. public void Deserialize_Normal_String_Success()
  54. {
  55. const string Input = "\"Jellyfin\"";
  56. const string Expected = "Jellyfin";
  57. var result = JsonSerializer.Deserialize<string>(Input, _options);
  58. Assert.Equal(Expected, result);
  59. }
  60. [Fact]
  61. public void Roundtrip_Valid_Success()
  62. {
  63. const string Input = "{\"Title\":\"Chapter 1\",\"Year\":\"2013\",\"Rated\":\"TV-MA\",\"Released\":\"01 Feb 2013\",\"Season\":\"N/A\",\"Episode\":\"N/A\",\"Runtime\":\"55 min\",\"Genre\":\"Drama\",\"Director\":\"David Fincher\",\"Writer\":\"Michael Dobbs (based on the novels by), Andrew Davies (based on the mini-series by), Beau Willimon (created for television by), Beau Willimon, Sam Forman (staff writer)\",\"Actors\":\"Kevin Spacey, Robin Wright, Kate Mara, Corey Stoll\",\"Plot\":\"Congressman Francis Underwood has been declined the chair for Secretary of State. He's now gathering his own team to plot his revenge. Zoe Barnes, a reporter for the Washington Herald, will do anything to get her big break.\",\"Language\":\"English\",\"Country\":\"USA\",\"Awards\":\"N/A\",\"Poster\":\"https://m.media-amazon.com/images/M/MV5BMTY5MTU4NDQzNV5BMl5BanBnXkFtZTgwMzk2ODcxMzE@._V1_SX300.jpg\",\"Ratings\":[{\"Source\":\"Internet Movie Database\",\"Value\":\"8.7/10\"}],\"Metascore\":\"N/A\",\"imdbRating\":\"8.7\",\"imdbVotes\":\"6736\",\"imdbID\":\"tt2161930\",\"seriesID\":\"N/A\",\"Type\":\"episode\",\"Response\":\"True\"}";
  64. var trip1 = JsonSerializer.Deserialize<OmdbProvider.RootObject>(Input, _options);
  65. Assert.NotNull(trip1);
  66. Assert.NotNull(trip1?.Title);
  67. Assert.Null(trip1?.Awards);
  68. Assert.Null(trip1?.Episode);
  69. Assert.Null(trip1?.Metascore);
  70. var serializedTrip1 = JsonSerializer.Serialize(trip1!, _options);
  71. var trip2 = JsonSerializer.Deserialize<OmdbProvider.RootObject>(serializedTrip1, _options);
  72. Assert.NotNull(trip2);
  73. Assert.NotNull(trip2?.Title);
  74. Assert.Null(trip2?.Awards);
  75. Assert.Null(trip2?.Episode);
  76. Assert.Null(trip2?.Metascore);
  77. }
  78. }
  79. }