aboutsummaryrefslogtreecommitdiff
path: root/tests/Jellyfin.Server.Integration.Tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests/Jellyfin.Server.Integration.Tests')
-rw-r--r--tests/Jellyfin.Server.Integration.Tests/Controllers/UserControllerTests.cs29
-rw-r--r--tests/Jellyfin.Server.Integration.Tests/ImageProcessorTests.cs131
2 files changed, 159 insertions, 1 deletions
diff --git a/tests/Jellyfin.Server.Integration.Tests/Controllers/UserControllerTests.cs b/tests/Jellyfin.Server.Integration.Tests/Controllers/UserControllerTests.cs
index 7ea56be731..4e01282dcf 100644
--- a/tests/Jellyfin.Server.Integration.Tests/Controllers/UserControllerTests.cs
+++ b/tests/Jellyfin.Server.Integration.Tests/Controllers/UserControllerTests.cs
@@ -1,6 +1,5 @@
using System;
using System.Globalization;
-using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Http.Json;
@@ -164,5 +163,33 @@ namespace Jellyfin.Server.Integration.Tests.Controllers
using var response = await UpdateUserPassword(client, _testUserId, createRequest);
Assert.Equal(HttpStatusCode.NoContent, response.StatusCode);
}
+
+ [Fact]
+ [Priority(2)]
+ public async Task UpdateUser_UsernameCaseDifference_Success()
+ {
+ var client = _factory.CreateClient();
+
+ client.DefaultRequestHeaders.AddAuthHeader(_accessToken!);
+
+ using var response = await client.GetAsync("Users/" + _testUserId, TestContext.Current.CancellationToken);
+ Assert.Equal(HttpStatusCode.OK, response.StatusCode);
+ var userDto = await response.Content.ReadFromJsonAsync<UserDto>(JsonDefaults.Options, TestContext.Current.CancellationToken);
+ Assert.NotNull(userDto);
+
+ userDto.Name = userDto.Name.ToLowerInvariant();
+
+ using var response2 = await client.PostAsJsonAsync($"Users?userId={_testUserId}", userDto, _jsonOptions, TestContext.Current.CancellationToken);
+ Assert.Equal(HttpStatusCode.NoContent, response2.StatusCode);
+
+ using var response3 = await client.GetAsync("Users/" + _testUserId, TestContext.Current.CancellationToken);
+ Assert.Equal(HttpStatusCode.OK, response.StatusCode);
+ var newUserDto = await response3.Content.ReadFromJsonAsync<UserDto>(JsonDefaults.Options, TestContext.Current.CancellationToken);
+ Assert.NotNull(newUserDto);
+ Assert.Equal(userDto.Name, newUserDto.Name);
+
+ // Sanity check, make sure we're testing something
+ Assert.NotEqual(TestUsername, userDto.Name);
+ }
}
}
diff --git a/tests/Jellyfin.Server.Integration.Tests/ImageProcessorTests.cs b/tests/Jellyfin.Server.Integration.Tests/ImageProcessorTests.cs
new file mode 100644
index 0000000000..a1149ac9be
--- /dev/null
+++ b/tests/Jellyfin.Server.Integration.Tests/ImageProcessorTests.cs
@@ -0,0 +1,131 @@
+using System;
+using System.Globalization;
+using System.IO;
+using Jellyfin.Drawing;
+using MediaBrowser.Controller;
+using MediaBrowser.Controller.Configuration;
+using MediaBrowser.Controller.Drawing;
+using MediaBrowser.Model.Configuration;
+using MediaBrowser.Model.Drawing;
+using MediaBrowser.Model.IO;
+using Microsoft.Extensions.Logging.Abstractions;
+using Moq;
+using Xunit;
+
+namespace Jellyfin.Server.Integration.Tests;
+
+public sealed class ImageProcessorTests : IDisposable
+{
+ private const string CacheRoot = "image-cache";
+ private const string OriginalPath = "/media/poster.jpg";
+ private const string NoOverlayCacheKey = "/media/poster.jpg,quality=90,datemodified=638800000000000000,f=Jpg,width=200,height=300,maxwidth=400,maxheight=500,fillwidth=600,fillheight=700,blur=2,b=000000,fl=layer,v=4";
+ private static readonly DateTime _dateModified = new(638800000000000000, DateTimeKind.Utc);
+ private readonly ImageProcessor _imageProcessor;
+
+ public ImageProcessorTests()
+ {
+ var applicationPaths = new Mock<IServerApplicationPaths>();
+ applicationPaths.SetupGet(paths => paths.ImageCachePath).Returns(CacheRoot);
+
+ var configurationManager = new Mock<IServerConfigurationManager>();
+ configurationManager
+ .SetupGet(manager => manager.Configuration)
+ .Returns(new ServerConfiguration { ParallelImageEncodingLimit = 1 });
+
+ _imageProcessor = new ImageProcessor(
+ NullLogger<ImageProcessor>.Instance,
+ applicationPaths.Object,
+ Mock.Of<IFileSystem>(),
+ Mock.Of<IImageEncoder>(),
+ configurationManager.Object);
+ }
+
+ [Fact]
+ public void GetCacheFilePath_DifferentOverlayTypes_ReturnDifferentPaths()
+ {
+ var percentPlayedPath = GetCacheFilePath(percentPlayed: 1);
+ var unwatchedCountPath = GetCacheFilePath(unwatchedCount: 1);
+
+ Assert.NotEqual(percentPlayedPath, unwatchedCountPath);
+ }
+
+ [Fact]
+ public void GetCacheFilePath_DifferentPercentPlayedValues_ReturnDifferentPaths()
+ {
+ var firstPath = GetCacheFilePath(percentPlayed: 12.5);
+ var secondPath = GetCacheFilePath(percentPlayed: 75.5);
+
+ Assert.NotEqual(firstPath, secondPath);
+ }
+
+ [Fact]
+ public void GetCacheFilePath_DifferentUnwatchedCountValues_ReturnDifferentPaths()
+ {
+ var firstPath = GetCacheFilePath(unwatchedCount: 1);
+ var secondPath = GetCacheFilePath(unwatchedCount: 2);
+
+ Assert.NotEqual(firstPath, secondPath);
+ }
+
+ [Fact]
+ public void GetCacheFilePath_DifferentCultures_ReturnSamePath()
+ {
+ var originalCulture = CultureInfo.CurrentCulture;
+
+ try
+ {
+ CultureInfo.CurrentCulture = CultureInfo.GetCultureInfo("en-US");
+ var expectedPath = GetCacheFilePath(percentPlayed: 12.5);
+
+ CultureInfo.CurrentCulture = CultureInfo.GetCultureInfo("fr-FR");
+ var actualPath = GetCacheFilePath(percentPlayed: 12.5);
+
+ Assert.Equal(expectedPath, actualPath);
+ }
+ finally
+ {
+ CultureInfo.CurrentCulture = originalCulture;
+ }
+ }
+
+ [Fact]
+ public void GetCacheFilePath_NoOverlay_UsesVersionFourWithExistingSerialization()
+ {
+ var expectedPath = _imageProcessor.GetCachePath(
+ Path.Combine(CacheRoot, "resized-images"),
+ NoOverlayCacheKey,
+ ".jpg");
+
+ Assert.Equal(expectedPath, GetCacheFilePath());
+ }
+
+ public void Dispose()
+ {
+ _imageProcessor.Dispose();
+ }
+
+ private string GetCacheFilePath(double percentPlayed = 0, int? unwatchedCount = null)
+ {
+ var options = new ImageProcessingOptions
+ {
+ Width = 200,
+ Height = 300,
+ MaxWidth = 400,
+ MaxHeight = 500,
+ FillWidth = 600,
+ FillHeight = 700,
+ Quality = 90,
+ PercentPlayed = percentPlayed,
+ UnplayedCount = unwatchedCount,
+ Blur = 2,
+ BackgroundColor = "000000",
+ ForegroundLayer = "layer"
+ };
+
+ return _imageProcessor.GetCacheFilePath(
+ OriginalPath,
+ _dateModified,
+ ImageFormat.Jpg,
+ options);
+ }
+}