Duncan Tourolle 3604e8f7a0
Some checks failed
🏗️ Build Plugin / build (pull_request) Failing after 9s
🧪 Test Plugin / test (pull_request) Failing after 9s
Add unit.tests
2025-11-14 22:13:24 +01:00

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();
}
}