JsonOmdbConverterTests.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. using System.Text.Json;
  2. using System.Text.Json.Serialization;
  3. using MediaBrowser.Common.Json;
  4. using MediaBrowser.Common.Json.Converters;
  5. using MediaBrowser.Providers.Plugins.Omdb;
  6. using Xunit;
  7. namespace Jellyfin.Common.Tests.Json
  8. {
  9. public class JsonOmdbConverterTests
  10. {
  11. private readonly JsonSerializerOptions _options;
  12. public JsonOmdbConverterTests()
  13. {
  14. _options = new JsonSerializerOptions();
  15. _options.Converters.Add(new JsonOmdbNotAvailableStringConverter());
  16. _options.Converters.Add(new JsonOmdbNotAvailableStructConverter<int>());
  17. _options.NumberHandling = JsonNumberHandling.AllowReadingFromString;
  18. }
  19. [Fact]
  20. public void Deserialize_Omdb_Response_Not_Available_Success()
  21. {
  22. 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\"}";
  23. var seasonRootObject = JsonSerializer.Deserialize<OmdbProvider.RootObject>(Input, JsonDefaults.GetOptions());
  24. Assert.NotNull(seasonRootObject);
  25. Assert.Null(seasonRootObject?.Awards);
  26. Assert.Null(seasonRootObject?.Episode);
  27. Assert.Null(seasonRootObject?.Metascore);
  28. }
  29. [Fact]
  30. public void Deserialize_Not_Available_Int_Success()
  31. {
  32. const string Input = "\"N/A\"";
  33. var result = JsonSerializer.Deserialize<int?>(Input, _options);
  34. Assert.Null(result);
  35. }
  36. [Fact]
  37. public void Deserialize_Not_Available_String_Success()
  38. {
  39. const string Input = "\"N/A\"";
  40. var result = JsonSerializer.Deserialize<string>(Input, _options);
  41. Assert.Null(result);
  42. }
  43. [Fact]
  44. public void Deserialize_Normal_String_Success()
  45. {
  46. const string Expected = "Jellyfin";
  47. const string Input = "\"Jellyfin\"";
  48. var result = JsonSerializer.Deserialize<string>(Input, _options);
  49. Assert.Equal(Expected, result);
  50. }
  51. [Fact]
  52. public void Deserialize_Null_Success()
  53. {
  54. const string Input = "null";
  55. var result = JsonSerializer.Deserialize<string>(Input, _options);
  56. Assert.Null(result);
  57. }
  58. [Fact]
  59. public void Deserialize_Number_Success()
  60. {
  61. const int Number = 8;
  62. const string Input = "8";
  63. var result = JsonSerializer.Deserialize<int>(Input, _options);
  64. Assert.Equal(Number, result);
  65. }
  66. [Fact]
  67. public void Deserialize_Quoted_Number_Success()
  68. {
  69. const int Number = 8;
  70. const string Input = "\"8\"";
  71. var result = JsonSerializer.Deserialize<int>(Input, _options);
  72. Assert.Equal(Number, result);
  73. }
  74. [Fact]
  75. public void Deserialize_NA_Number_Success()
  76. {
  77. const string Input = "\"N/A\"";
  78. var result = JsonSerializer.Deserialize<int?>(Input, _options);
  79. Assert.Null(result);
  80. }
  81. }
  82. }