|  | @@ -0,0 +1,70 @@
 | 
	
		
			
				|  |  | +using System;
 | 
	
		
			
				|  |  | +using System.IO;
 | 
	
		
			
				|  |  | +using System.Linq;
 | 
	
		
			
				|  |  | +using System.Net.Http;
 | 
	
		
			
				|  |  | +using System.Threading;
 | 
	
		
			
				|  |  | +using System.Threading.Tasks;
 | 
	
		
			
				|  |  | +using AutoFixture;
 | 
	
		
			
				|  |  | +using AutoFixture.AutoMoq;
 | 
	
		
			
				|  |  | +using Emby.Server.Implementations.LiveTv.Listings;
 | 
	
		
			
				|  |  | +using MediaBrowser.Model.LiveTv;
 | 
	
		
			
				|  |  | +using Moq;
 | 
	
		
			
				|  |  | +using Moq.Protected;
 | 
	
		
			
				|  |  | +using Xunit;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +namespace Jellyfin.Server.Implementations.Tests.LiveTv.Listings;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +public class XmlTvListingsProviderTests
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +    private readonly Fixture _fixture;
 | 
	
		
			
				|  |  | +    private readonly XmlTvListingsProvider _xmlTvListingsProvider;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    public XmlTvListingsProviderTests()
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        var messageHandler = new Mock<HttpMessageHandler>();
 | 
	
		
			
				|  |  | +        messageHandler.Protected()
 | 
	
		
			
				|  |  | +            .Setup<Task<HttpResponseMessage>>("SendAsync", ItExpr.IsAny<HttpRequestMessage>(), ItExpr.IsAny<CancellationToken>())
 | 
	
		
			
				|  |  | +            .Returns<HttpRequestMessage, CancellationToken>(
 | 
	
		
			
				|  |  | +                (m, _) =>
 | 
	
		
			
				|  |  | +                {
 | 
	
		
			
				|  |  | +                    return Task.FromResult(new HttpResponseMessage()
 | 
	
		
			
				|  |  | +                    {
 | 
	
		
			
				|  |  | +                        Content = new StreamContent(File.OpenRead(Path.Combine("Test Data/LiveTv/Listings/XmlTv", m.RequestUri!.Segments[^1])))
 | 
	
		
			
				|  |  | +                    });
 | 
	
		
			
				|  |  | +                });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        var http = new Mock<IHttpClientFactory>();
 | 
	
		
			
				|  |  | +        http.Setup(x => x.CreateClient(It.IsAny<string>()))
 | 
	
		
			
				|  |  | +            .Returns(new HttpClient(messageHandler.Object));
 | 
	
		
			
				|  |  | +        _fixture = new Fixture();
 | 
	
		
			
				|  |  | +        _fixture.Customize(new AutoMoqCustomization
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            ConfigureMembers = true
 | 
	
		
			
				|  |  | +        }).Inject(http);
 | 
	
		
			
				|  |  | +        _xmlTvListingsProvider = _fixture.Create<XmlTvListingsProvider>();
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    [Theory]
 | 
	
		
			
				|  |  | +    [InlineData("Test Data/LiveTv/Listings/XmlTv/notitle.xml")]
 | 
	
		
			
				|  |  | +    [InlineData("https://example.com/notitle.xml")]
 | 
	
		
			
				|  |  | +    public async Task GetProgramsAsync_NoTitle_Success(string path)
 | 
	
		
			
				|  |  | +    {
 | 
	
		
			
				|  |  | +        var info = new ListingsProviderInfo()
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +            Path = path
 | 
	
		
			
				|  |  | +        };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        var startDate = new DateTime(2022, 11, 4);
 | 
	
		
			
				|  |  | +        var programs = await _xmlTvListingsProvider.GetProgramsAsync(info, "3297", startDate, startDate.AddDays(1), CancellationToken.None);
 | 
	
		
			
				|  |  | +        var programsList = programs.ToList();
 | 
	
		
			
				|  |  | +        Assert.Single(programsList);
 | 
	
		
			
				|  |  | +        var program = programsList[0];
 | 
	
		
			
				|  |  | +        Assert.Null(program.Name);
 | 
	
		
			
				|  |  | +        Assert.Null(program.SeriesId);
 | 
	
		
			
				|  |  | +        Assert.Null(program.EpisodeTitle);
 | 
	
		
			
				|  |  | +        Assert.True(program.IsSports);
 | 
	
		
			
				|  |  | +        Assert.True(program.HasImage);
 | 
	
		
			
				|  |  | +        Assert.Equal("https://domain.tld/image.png", program.ImageUrl);
 | 
	
		
			
				|  |  | +        Assert.Equal("3297", program.ChannelId);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +}
 |