180 lines
4.2 KiB
C#
180 lines
4.2 KiB
C#
using FluentAssertions;
|
|
using Jellyfin.Plugin.SRFPlay.Api.Models;
|
|
using Jellyfin.Plugin.SRFPlay.Configuration;
|
|
using Jellyfin.Plugin.SRFPlay.Services;
|
|
using Microsoft.Extensions.Logging;
|
|
using Moq;
|
|
using Xunit;
|
|
|
|
namespace Jellyfin.Plugin.SRFPlay.Tests.UnitTests;
|
|
|
|
/// <summary>
|
|
/// Unit tests for StreamUrlResolver.
|
|
/// </summary>
|
|
public class StreamUrlResolverTests : IDisposable
|
|
{
|
|
private readonly Mock<ILogger<StreamUrlResolver>> _loggerMock;
|
|
private readonly StreamUrlResolver _resolver;
|
|
|
|
public StreamUrlResolverTests()
|
|
{
|
|
_loggerMock = new Mock<ILogger<StreamUrlResolver>>();
|
|
_resolver = new StreamUrlResolver(_loggerMock.Object);
|
|
}
|
|
|
|
[Fact]
|
|
public void GetStreamUrl_WithNullChapter_ReturnsNull()
|
|
{
|
|
// Act
|
|
var result = _resolver.GetStreamUrl(null!, QualityPreference.Auto);
|
|
|
|
// Assert
|
|
result.Should().BeNull();
|
|
}
|
|
|
|
[Fact]
|
|
public void GetStreamUrl_WithNoResources_ReturnsNull()
|
|
{
|
|
// Arrange
|
|
var chapter = new Chapter
|
|
{
|
|
Id = "test-id",
|
|
ResourceList = new List<Resource>()
|
|
};
|
|
|
|
// Act
|
|
var result = _resolver.GetStreamUrl(chapter, QualityPreference.Auto);
|
|
|
|
// Assert
|
|
result.Should().BeNull();
|
|
}
|
|
|
|
[Fact]
|
|
public void GetStreamUrl_WithDrmProtectedOnly_ReturnsNull()
|
|
{
|
|
// Arrange
|
|
var chapter = new Chapter
|
|
{
|
|
Id = "test-id",
|
|
ResourceList = new List<Resource>
|
|
{
|
|
new Resource
|
|
{
|
|
Url = "https://example.com/stream.m3u8",
|
|
Protocol = "HLS",
|
|
Quality = "HD",
|
|
DrmList = new System.Text.Json.JsonElement() // Non-empty DRM
|
|
}
|
|
}
|
|
};
|
|
|
|
// Act
|
|
var result = _resolver.GetStreamUrl(chapter, QualityPreference.Auto);
|
|
|
|
// Assert
|
|
result.Should().BeNull();
|
|
}
|
|
|
|
[Fact]
|
|
public void HasPlayableContent_WithNonDrmHlsStream_ReturnsTrue()
|
|
{
|
|
// Arrange
|
|
var chapter = new Chapter
|
|
{
|
|
ResourceList = new List<Resource>
|
|
{
|
|
new Resource
|
|
{
|
|
Url = "https://example.com/stream.m3u8",
|
|
Protocol = "HLS",
|
|
Quality = "HD",
|
|
DrmList = null
|
|
}
|
|
}
|
|
};
|
|
|
|
// Act
|
|
var result = _resolver.HasPlayableContent(chapter);
|
|
|
|
// Assert
|
|
result.Should().BeTrue();
|
|
}
|
|
|
|
[Fact]
|
|
public void HasPlayableContent_WithDrmOnly_ReturnsFalse()
|
|
{
|
|
// Arrange
|
|
var chapter = new Chapter
|
|
{
|
|
ResourceList = new List<Resource>
|
|
{
|
|
new Resource
|
|
{
|
|
Url = "https://example.com/stream.m3u8",
|
|
Protocol = "HLS",
|
|
DrmList = new System.Text.Json.JsonElement() // Non-empty DRM
|
|
}
|
|
}
|
|
};
|
|
|
|
// Act
|
|
var result = _resolver.HasPlayableContent(chapter);
|
|
|
|
// Assert
|
|
result.Should().BeFalse();
|
|
}
|
|
|
|
[Fact]
|
|
public void IsContentExpired_WithFutureValidTo_ReturnsFalse()
|
|
{
|
|
// Arrange
|
|
var chapter = new Chapter
|
|
{
|
|
ValidTo = DateTime.UtcNow.AddDays(7)
|
|
};
|
|
|
|
// Act
|
|
var result = _resolver.IsContentExpired(chapter);
|
|
|
|
// Assert
|
|
result.Should().BeFalse();
|
|
}
|
|
|
|
[Fact]
|
|
public void IsContentExpired_WithPastValidTo_ReturnsTrue()
|
|
{
|
|
// Arrange
|
|
var chapter = new Chapter
|
|
{
|
|
ValidTo = DateTime.UtcNow.AddDays(-1)
|
|
};
|
|
|
|
// Act
|
|
var result = _resolver.IsContentExpired(chapter);
|
|
|
|
// Assert
|
|
result.Should().BeTrue();
|
|
}
|
|
|
|
[Fact]
|
|
public void IsContentExpired_WithNullValidTo_ReturnsFalse()
|
|
{
|
|
// Arrange
|
|
var chapter = new Chapter
|
|
{
|
|
ValidTo = null
|
|
};
|
|
|
|
// Act
|
|
var result = _resolver.IsContentExpired(chapter);
|
|
|
|
// Assert
|
|
result.Should().BeFalse();
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
_resolver?.Dispose();
|
|
}
|
|
}
|