aboutsummaryrefslogtreecommitdiff
path: root/tests/Jellyfin.Model.Tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests/Jellyfin.Model.Tests')
-rw-r--r--tests/Jellyfin.Model.Tests/Drawing/DrawingUtilsTests.cs28
-rw-r--r--tests/Jellyfin.Model.Tests/Entities/ProviderIdsExtensionsTests.cs103
2 files changed, 131 insertions, 0 deletions
diff --git a/tests/Jellyfin.Model.Tests/Drawing/DrawingUtilsTests.cs b/tests/Jellyfin.Model.Tests/Drawing/DrawingUtilsTests.cs
new file mode 100644
index 0000000000..473b07a8a1
--- /dev/null
+++ b/tests/Jellyfin.Model.Tests/Drawing/DrawingUtilsTests.cs
@@ -0,0 +1,28 @@
+using MediaBrowser.Model.Drawing;
+using Xunit;
+
+namespace Jellyfin.Model.Drawing;
+
+public static class DrawingUtilsTests
+{
+ [Theory]
+ // Already inside the box, returned untouched.
+ [InlineData(600, 336, 1920, 1080, 600, 336)]
+ [InlineData(1920, 1080, 1920, 1080, 1920, 1080)]
+ // Scaled down uniformly, requested aspect ratio preserved.
+ [InlineData(23100, 23100, 1920, 1080, 1080, 1080)]
+ [InlineData(3840, 2160, 1920, 1080, 1920, 1080)]
+ [InlineData(1200, 400, 600, 336, 600, 200)]
+ // Extreme ratios still produce at least one pixel per axis.
+ [InlineData(10000, 1, 100, 100, 100, 1)]
+ // Degenerate inputs are passed through rather than dividing by zero.
+ [InlineData(600, 336, 0, 0, 600, 336)]
+ [InlineData(0, 0, 1920, 1080, 0, 0)]
+ public static void ScaleDownToFit_Bounds_WithoutUpscaling(int width, int height, int boxWidth, int boxHeight, int expectedWidth, int expectedHeight)
+ {
+ var scaled = DrawingUtils.ScaleDownToFit(new ImageDimensions(width, height), new ImageDimensions(boxWidth, boxHeight));
+
+ Assert.Equal(expectedWidth, scaled.Width);
+ Assert.Equal(expectedHeight, scaled.Height);
+ }
+}
diff --git a/tests/Jellyfin.Model.Tests/Entities/ProviderIdsExtensionsTests.cs b/tests/Jellyfin.Model.Tests/Entities/ProviderIdsExtensionsTests.cs
index a6f4164144..2347c08961 100644
--- a/tests/Jellyfin.Model.Tests/Entities/ProviderIdsExtensionsTests.cs
+++ b/tests/Jellyfin.Model.Tests/Entities/ProviderIdsExtensionsTests.cs
@@ -186,6 +186,109 @@ namespace Jellyfin.Model.Tests.Entities
Assert.Null(nullProvider.ProviderIds);
}
+ [Theory]
+ [InlineData(nameof(MetadataProvider.Imdb), "tt0113375", true)]
+ [InlineData(nameof(MetadataProvider.Imdb), "nm0000123", true)]
+ [InlineData(nameof(MetadataProvider.Imdb), "0113375", true)]
+ [InlineData(nameof(MetadataProvider.Imdb), "https://www.imdb.com/title/tt0113375", false)]
+ [InlineData(nameof(MetadataProvider.Tmdb), "11", true)]
+ [InlineData(nameof(MetadataProvider.Tmdb), "nm0000123", false)]
+ [InlineData(nameof(MetadataProvider.Tmdb), "0", false)]
+ [InlineData(nameof(MetadataProvider.Tmdb), "-11", false)]
+ [InlineData(nameof(MetadataProvider.TmdbCollection), "nm0000123", false)]
+ [InlineData(nameof(MetadataProvider.AudioDbArtist), "111239", true)]
+ [InlineData(nameof(MetadataProvider.AudioDbArtist), "a3cb23fc-acd3-4ce0-8f36-1e5aa6a18432", false)]
+ [InlineData(nameof(MetadataProvider.MusicBrainzArtist), "a3cb23fc-acd3-4ce0-8f36-1e5aa6a18432", true)]
+ [InlineData(nameof(MetadataProvider.MusicBrainzArtist), "111239", false)]
+ [InlineData(nameof(MetadataProvider.MusicBrainzAlbum), "not-an-mbid", false)]
+ [InlineData(nameof(MetadataProvider.Tvdb), "anything-goes", true)]
+ [InlineData("SomePlugin", "anything-goes", true)]
+ [InlineData(nameof(MetadataProvider.Tmdb), null, false)]
+ [InlineData(null, "11", false)]
+ public void IsValidProviderId_ChecksKnownFormats(string? name, string? value, bool expected)
+ {
+ Assert.Equal(expected, ProviderIdsExtensions.IsValidProviderId(name, value));
+ }
+
+ [Fact]
+ public void TrySetProviderId_ForeignId_False()
+ {
+ var provider = new ProviderIdsExtensionsTestsObject();
+
+ Assert.False(provider.TrySetProviderId(MetadataProvider.Tmdb, "nm0000123"));
+ Assert.Empty(provider.ProviderIds);
+ }
+
+ [Fact]
+ public void TrySetProviderId_ForeignId_KeepsExisting()
+ {
+ var provider = new ProviderIdsExtensionsTestsObject();
+ provider.ProviderIds[MetadataProvider.Tmdb.ToString()] = "11";
+
+ Assert.False(provider.TrySetProviderId(MetadataProvider.Tmdb, "nm0000123"));
+ Assert.Equal("11", provider.GetProviderId(MetadataProvider.Tmdb));
+ }
+
+ [Theory]
+ [InlineData(nameof(MetadataProvider.Imdb), " tt0113375 ")]
+ [InlineData(" Imdb", ExampleImdbId)]
+ public void TrySetProviderId_SurroundingWhitespace_Trimmed(string name, string value)
+ {
+ var provider = new ProviderIdsExtensionsTestsObject();
+
+ Assert.True(provider.TrySetProviderId(name, value));
+ Assert.Equal(ExampleImdbId, provider.GetProviderId(MetadataProvider.Imdb));
+ }
+
+ [Fact]
+ public void SetProviderIds_ReplacesAll()
+ {
+ var provider = new ProviderIdsExtensionsTestsObject();
+ provider.ProviderIds[MetadataProvider.Tvdb.ToString()] = "12345";
+
+ provider.SetProviderIds(new Dictionary<string, string>
+ {
+ [MetadataProvider.Imdb.ToString()] = ExampleImdbId
+ });
+
+ Assert.Equal(ExampleImdbId, provider.GetProviderId(MetadataProvider.Imdb));
+ Assert.False(provider.HasProviderId(MetadataProvider.Tvdb));
+ }
+
+ [Fact]
+ public void SetProviderIds_ForeignId_Dropped()
+ {
+ var provider = new ProviderIdsExtensionsTestsObject();
+
+ provider.SetProviderIds(new Dictionary<string, string>
+ {
+ [MetadataProvider.Tmdb.ToString()] = "nm0000123",
+ [MetadataProvider.Imdb.ToString()] = ExampleImdbId,
+ [MetadataProvider.Tvdb.ToString()] = string.Empty
+ });
+
+ Assert.False(provider.HasProviderId(MetadataProvider.Tmdb));
+ Assert.False(provider.HasProviderId(MetadataProvider.Tvdb));
+ Assert.Equal(ExampleImdbId, provider.GetProviderId(MetadataProvider.Imdb));
+ }
+
+ [Fact]
+ public void SetProviderIds_Null_Clears()
+ {
+ var provider = new ProviderIdsExtensionsTestsObject();
+ provider.ProviderIds[MetadataProvider.Imdb.ToString()] = ExampleImdbId;
+
+ provider.SetProviderIds(null);
+
+ Assert.Empty(provider.ProviderIds);
+ }
+
+ [Fact]
+ public void SetProviderIds_NullInstance_ThrowsArgumentNullException()
+ {
+ Assert.Throws<ArgumentNullException>(() => ProviderIdsExtensions.SetProviderIds(null!, new Dictionary<string, string>()));
+ }
+
[Fact]
public void RemoveProviderId_Null_Remove()
{