SchedulesDirectDeserializeTests.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Text.Json;
  5. using Emby.Server.Implementations.LiveTv.Listings.SchedulesDirectDtos;
  6. using Jellyfin.Extensions.Json;
  7. using Xunit;
  8. namespace Jellyfin.Server.Implementations.Tests.LiveTv.SchedulesDirect
  9. {
  10. public class SchedulesDirectDeserializeTests
  11. {
  12. private readonly JsonSerializerOptions _jsonOptions;
  13. public SchedulesDirectDeserializeTests()
  14. {
  15. _jsonOptions = JsonDefaults.Options;
  16. }
  17. /// <summary>
  18. /// /token reponse.
  19. /// </summary>
  20. [Fact]
  21. public void Deserialize_Token_Response_Live_Success()
  22. {
  23. var bytes = File.ReadAllBytes("LiveTv/SchedulesDirect/TestData/token_live_response.json");
  24. var tokenDto = JsonSerializer.Deserialize<TokenDto>(bytes);
  25. Assert.NotNull(tokenDto);
  26. Assert.Equal(0, tokenDto!.Code);
  27. Assert.Equal("OK", tokenDto.Message);
  28. Assert.Equal("AWS-SD-web.1", tokenDto.ServerId);
  29. Assert.Equal(new DateTime(2016, 08, 23, 13, 55, 25, DateTimeKind.Utc), tokenDto.DateTime);
  30. Assert.Equal("f3fca79989cafe7dead71beefedc812b", tokenDto.Token);
  31. }
  32. /// <summary>
  33. /// /token response.
  34. /// </summary>
  35. [Fact]
  36. public void Deserialize_Token_Response_Offline_Success()
  37. {
  38. var bytes = File.ReadAllBytes("LiveTv/SchedulesDirect/TestData/token_offline_response.json");
  39. var tokenDto = JsonSerializer.Deserialize<TokenDto>(bytes);
  40. Assert.NotNull(tokenDto);
  41. Assert.Equal(3_000, tokenDto!.Code);
  42. Assert.Equal("Server offline for maintenance.", tokenDto.Message);
  43. Assert.Equal("20141201.web.1", tokenDto.ServerId);
  44. Assert.Equal(new DateTime(2015, 04, 23, 00, 03, 32, DateTimeKind.Utc), tokenDto.DateTime);
  45. Assert.Equal("CAFEDEADBEEFCAFEDEADBEEFCAFEDEADBEEFCAFE", tokenDto.Token);
  46. Assert.Equal("SERVICE_OFFLINE", tokenDto.Response);
  47. }
  48. /// <summary>
  49. /// /schedules request.
  50. /// </summary>
  51. [Fact]
  52. public void Serialize_Schedule_Request_Success()
  53. {
  54. var expectedString = File.ReadAllText("LiveTv/SchedulesDirect/TestData/schedules_request.json").Trim();
  55. var requestObject = new RequestScheduleForChannelDto[]
  56. {
  57. new RequestScheduleForChannelDto
  58. {
  59. StationId = "20454",
  60. Date = new[]
  61. {
  62. "2015-03-13",
  63. "2015-03-17"
  64. }
  65. },
  66. new RequestScheduleForChannelDto
  67. {
  68. StationId = "10021",
  69. Date = new[]
  70. {
  71. "2015-03-12",
  72. "2015-03-13"
  73. }
  74. }
  75. };
  76. var jsonOptions = new JsonSerializerOptions(_jsonOptions)
  77. {
  78. WriteIndented = true
  79. };
  80. var requestString = JsonSerializer.Serialize(requestObject, jsonOptions);
  81. Assert.Equal(expectedString, requestString);
  82. }
  83. /// <summary>
  84. /// /schedules response.
  85. /// </summary>
  86. [Fact]
  87. public void Deserialize_Schedule_Response_Success()
  88. {
  89. var bytes = File.ReadAllBytes("LiveTv/SchedulesDirect/TestData/schedules_response.json");
  90. var days = JsonSerializer.Deserialize<IReadOnlyList<DayDto>>(bytes);
  91. Assert.NotNull(days);
  92. Assert.Equal(1, days!.Count);
  93. var dayDto = days[0];
  94. Assert.Equal("20454", dayDto.StationId);
  95. Assert.Equal(2, dayDto.Programs.Count);
  96. Assert.Equal("SH005371070000", dayDto.Programs[0].ProgramId);
  97. Assert.Equal(new DateTime(2015, 03, 03, 00, 00, 00, DateTimeKind.Utc), dayDto.Programs[0].AirDateTime);
  98. Assert.Equal(1_800, dayDto.Programs[0].Duration);
  99. Assert.Equal("Sy8HEMBPcuiAx3FBukUhKQ", dayDto.Programs[0].Md5);
  100. Assert.True(dayDto.Programs[0].New);
  101. Assert.Equal(2, dayDto.Programs[0].AudioProperties.Count);
  102. Assert.Equal("stereo", dayDto.Programs[0].AudioProperties[0]);
  103. Assert.Equal("cc", dayDto.Programs[0].AudioProperties[1]);
  104. Assert.Equal(1, dayDto.Programs[0].VideoProperties.Count);
  105. Assert.Equal("hdtv", dayDto.Programs[0].VideoProperties[0]);
  106. }
  107. /// <summary>
  108. /// /programs response.
  109. /// </summary>
  110. [Fact]
  111. public void Deserialize_Program_Response_Success()
  112. {
  113. var bytes = File.ReadAllBytes("LiveTv/SchedulesDirect/TestData/programs_response.json");
  114. var programDtos = JsonSerializer.Deserialize<IReadOnlyList<ProgramDetailsDto>>(bytes);
  115. Assert.NotNull(programDtos);
  116. Assert.Equal(2, programDtos!.Count);
  117. Assert.Equal("EP000000060003", programDtos[0].ProgramId);
  118. Assert.Equal(1, programDtos[0].Titles.Count);
  119. Assert.Equal("'Allo 'Allo!", programDtos[0].Titles[0].Title120);
  120. Assert.Equal("Series", programDtos[0].EventDetails?.SubType);
  121. Assert.Equal("en", programDtos[0].Descriptions?.Description1000[0].DescriptionLanguage);
  122. Assert.Equal("A disguised British Intelligence officer is sent to help the airmen.", programDtos[0].Descriptions?.Description1000[0].Description);
  123. Assert.Equal(new DateTime(1985, 11, 04), programDtos[0].OriginalAirDate);
  124. Assert.Equal(1, programDtos[0].Genres.Count);
  125. Assert.Equal("Sitcom", programDtos[0].Genres[0]);
  126. Assert.Equal("The Poloceman Cometh", programDtos[0].EpisodeTitle150);
  127. Assert.Equal(2, programDtos[0].Metadata[0].Gracenote?.Season);
  128. Assert.Equal(3, programDtos[0].Metadata[0].Gracenote?.Episode);
  129. Assert.Equal(13, programDtos[0].Cast.Count);
  130. Assert.Equal("383774", programDtos[0].Cast[0].PersonId);
  131. Assert.Equal("392649", programDtos[0].Cast[0].NameId);
  132. Assert.Equal("Gorden Kaye", programDtos[0].Cast[0].Name);
  133. Assert.Equal("Actor", programDtos[0].Cast[0].Role);
  134. Assert.Equal("01", programDtos[0].Cast[0].BillingOrder);
  135. Assert.Equal(3, programDtos[0].Crew.Count);
  136. Assert.Equal("354407", programDtos[0].Crew[0].PersonId);
  137. Assert.Equal("363281", programDtos[0].Crew[0].NameId);
  138. Assert.Equal("David Croft", programDtos[0].Crew[0].Name);
  139. Assert.Equal("Director", programDtos[0].Crew[0].Role);
  140. Assert.Equal("01", programDtos[0].Crew[0].BillingOrder);
  141. }
  142. /// <summary>
  143. /// /metadata/programs response.
  144. /// </summary>
  145. [Fact]
  146. public void Deserialize_Metadata_Programs_Response_Success()
  147. {
  148. var bytes = File.ReadAllBytes("LiveTv/SchedulesDirect/TestData/metadata_programs_response.json");
  149. var showImagesDtos = JsonSerializer.Deserialize<IReadOnlyList<ShowImagesDto>>(bytes);
  150. Assert.NotNull(showImagesDtos);
  151. Assert.Equal(1, showImagesDtos!.Count);
  152. Assert.Equal("SH00712240", showImagesDtos[0].ProgramId);
  153. Assert.Equal(4, showImagesDtos[0].Data.Count);
  154. Assert.Equal("135", showImagesDtos[0].Data[0].Width);
  155. Assert.Equal("180", showImagesDtos[0].Data[0].Height);
  156. Assert.Equal("assets/p282288_b_v2_aa.jpg", showImagesDtos[0].Data[0].Uri);
  157. Assert.Equal("Sm", showImagesDtos[0].Data[0].Size);
  158. Assert.Equal("3x4", showImagesDtos[0].Data[0].Aspect);
  159. Assert.Equal("Banner-L3", showImagesDtos[0].Data[0].Category);
  160. Assert.Equal("yes", showImagesDtos[0].Data[0].Text);
  161. Assert.Equal("true", showImagesDtos[0].Data[0].Primary);
  162. Assert.Equal("Series", showImagesDtos[0].Data[0].Tier);
  163. }
  164. /// <summary>
  165. /// /headends response.
  166. /// </summary>
  167. [Fact]
  168. public void Deserialize_Headends_Response_Success()
  169. {
  170. var bytes = File.ReadAllBytes("LiveTv/SchedulesDirect/TestData/headends_response.json");
  171. var headendsDtos = JsonSerializer.Deserialize<IReadOnlyList<HeadendsDto>>(bytes);
  172. Assert.NotNull(headendsDtos);
  173. Assert.Equal(8, headendsDtos!.Count);
  174. Assert.Equal("CA00053", headendsDtos[0].Headend);
  175. Assert.Equal("Cable", headendsDtos[0].Transport);
  176. Assert.Equal("Beverly Hills", headendsDtos[0].Location);
  177. Assert.Equal(2, headendsDtos[0].Lineups.Count);
  178. Assert.Equal("Time Warner Cable - Cable", headendsDtos[0].Lineups[0].Name);
  179. Assert.Equal("USA-CA00053-DEFAULT", headendsDtos[0].Lineups[0].Lineup);
  180. Assert.Equal("/20141201/lineups/USA-CA00053-DEFAULT", headendsDtos[0].Lineups[0].Uri);
  181. }
  182. /// <summary>
  183. /// /lineups response.
  184. /// </summary>
  185. [Fact]
  186. public void Deserialize_Lineups_Response_Success()
  187. {
  188. var bytes = File.ReadAllBytes("LiveTv/SchedulesDirect/TestData/lineups_response.json");
  189. var lineupsDto = JsonSerializer.Deserialize<LineupsDto>(bytes);
  190. Assert.NotNull(lineupsDto);
  191. Assert.Equal(0, lineupsDto!.Code);
  192. Assert.Equal("20141201.web.1", lineupsDto.ServerId);
  193. Assert.Equal(new DateTime(2015, 04, 17, 14, 22, 17, DateTimeKind.Utc), lineupsDto.Datetime);
  194. Assert.Equal(5, lineupsDto.Lineups.Count);
  195. Assert.Equal("GBR-0001317-DEFAULT", lineupsDto.Lineups[0].Lineup);
  196. Assert.Equal("Freeview - Carlton - LWT (Southeast)", lineupsDto.Lineups[0].Name);
  197. Assert.Equal("DVB-T", lineupsDto.Lineups[0].Transport);
  198. Assert.Equal("London", lineupsDto.Lineups[0].Location);
  199. Assert.Equal("/20141201/lineups/GBR-0001317-DEFAULT", lineupsDto.Lineups[0].Uri);
  200. Assert.Equal("DELETED LINEUP", lineupsDto.Lineups[4].Name);
  201. Assert.True(lineupsDto.Lineups[4].IsDeleted);
  202. }
  203. /// <summary>
  204. /// /lineup/:id response.
  205. /// </summary>
  206. [Fact]
  207. public void Deserialize_Lineup_Response_Success()
  208. {
  209. var bytes = File.ReadAllBytes("LiveTv/SchedulesDirect/TestData/lineup_response.json");
  210. var channelDto = JsonSerializer.Deserialize<ChannelDto>(bytes);
  211. Assert.NotNull(channelDto);
  212. Assert.Equal(2, channelDto!.Map.Count);
  213. Assert.Equal("24326", channelDto.Map[0].StationId);
  214. Assert.Equal("001", channelDto.Map[0].Channel);
  215. Assert.Equal("BBC ONE South", channelDto.Map[0].ProvderCallsign);
  216. Assert.Equal("1", channelDto.Map[0].LogicalChannelNumber);
  217. Assert.Equal("providerCallsign", channelDto.Map[0].MatchType);
  218. }
  219. }
  220. }