XmlTvListingsProviderTests.cs 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. using System;
  2. using System.IO;
  3. using System.Linq;
  4. using System.Net.Http;
  5. using System.Threading;
  6. using System.Threading.Tasks;
  7. using AutoFixture;
  8. using AutoFixture.AutoMoq;
  9. using Jellyfin.LiveTv.Listings;
  10. using MediaBrowser.Model.LiveTv;
  11. using Moq;
  12. using Moq.Protected;
  13. using Xunit;
  14. namespace Jellyfin.LiveTv.Tests.Listings;
  15. public class XmlTvListingsProviderTests
  16. {
  17. private readonly Fixture _fixture;
  18. private readonly XmlTvListingsProvider _xmlTvListingsProvider;
  19. public XmlTvListingsProviderTests()
  20. {
  21. var messageHandler = new Mock<HttpMessageHandler>();
  22. messageHandler.Protected()
  23. .Setup<Task<HttpResponseMessage>>("SendAsync", ItExpr.IsAny<HttpRequestMessage>(), ItExpr.IsAny<CancellationToken>())
  24. .Returns<HttpRequestMessage, CancellationToken>(
  25. (m, _) =>
  26. {
  27. return Task.FromResult(new HttpResponseMessage()
  28. {
  29. Content = new StreamContent(File.OpenRead(Path.Combine("Test Data/LiveTv/Listings/XmlTv", m.RequestUri!.Segments[^1])))
  30. });
  31. });
  32. var http = new Mock<IHttpClientFactory>();
  33. http.Setup(x => x.CreateClient(It.IsAny<string>()))
  34. .Returns(new HttpClient(messageHandler.Object));
  35. _fixture = new Fixture();
  36. _fixture.Customize(new AutoMoqCustomization
  37. {
  38. ConfigureMembers = true
  39. }).Inject(http);
  40. _xmlTvListingsProvider = _fixture.Create<XmlTvListingsProvider>();
  41. }
  42. [Theory]
  43. [InlineData("Test Data/LiveTv/Listings/XmlTv/notitle.xml")]
  44. [InlineData("https://example.com/notitle.xml")]
  45. public async Task GetProgramsAsync_NoTitle_Success(string path)
  46. {
  47. var info = new ListingsProviderInfo()
  48. {
  49. Path = path
  50. };
  51. var startDate = new DateTime(2022, 11, 4, 0, 0, 0, DateTimeKind.Utc);
  52. var programs = await _xmlTvListingsProvider.GetProgramsAsync(info, "3297", startDate, startDate.AddDays(1), CancellationToken.None);
  53. var programsList = programs.ToList();
  54. Assert.Single(programsList);
  55. var program = programsList[0];
  56. Assert.Null(program.Name);
  57. Assert.Null(program.SeriesId);
  58. Assert.Null(program.EpisodeTitle);
  59. Assert.True(program.IsSports);
  60. Assert.True(program.HasImage);
  61. Assert.Equal("https://domain.tld/image.png", program.ImageUrl);
  62. Assert.Equal("3297", program.ChannelId);
  63. }
  64. [Theory]
  65. [InlineData("Test Data/LiveTv/Listings/XmlTv/emptycategory.xml")]
  66. [InlineData("https://example.com/emptycategory.xml")]
  67. public async Task GetProgramsAsync_EmptyCategories_Success(string path)
  68. {
  69. var info = new ListingsProviderInfo()
  70. {
  71. Path = path
  72. };
  73. var startDate = new DateTime(2022, 11, 4, 0, 0, 0, DateTimeKind.Utc);
  74. var programs = await _xmlTvListingsProvider.GetProgramsAsync(info, "3297", startDate, startDate.AddDays(1), CancellationToken.None);
  75. var programsList = programs.ToList();
  76. Assert.Single(programsList);
  77. var program = programsList[0];
  78. Assert.DoesNotContain(program.Genres, g => string.IsNullOrEmpty(g));
  79. Assert.Equal("3297", program.ChannelId);
  80. }
  81. }