Prevent orphaned user permissions and preferences (#17643)

Prevent orphaned user permissions and preferences
This commit is contained in:
m0g3r
2026-08-18 18:16:48 +02:00
committed by GitHub
parent 3fe35fcbc1
commit 46be43ad24
3 changed files with 26 additions and 0 deletions
@@ -1,5 +1,6 @@
using System;
using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Jellyfin.Database.Implementations;
@@ -91,6 +92,28 @@ namespace Jellyfin.Server.Implementations.Tests.Users
new NoLockBehavior(NullLogger<NoLockBehavior>.Instance));
}
[Fact]
public async Task UpdateUserAsync_DoesNotLeaveOrphanedPermissionsOrPreferences()
{
var user = await _userManager.CreateUserAsync("updateduser");
var permissionCount = user.Permissions.Count;
var preferenceCount = user.Preferences.Count;
user.LastActivityDate = DateTime.UtcNow;
await _userManager.UpdateUserAsync(user);
await _userManager.UpdateUserAsync(user);
await using var context = CreateDbContext();
Assert.Empty(await context.Permissions
.Where(permission => !permission.UserId.HasValue)
.ToListAsync(TestContext.Current.CancellationToken));
Assert.Empty(await context.Preferences
.Where(preference => !preference.UserId.HasValue)
.ToListAsync(TestContext.Current.CancellationToken));
Assert.Equal(permissionCount, await context.Permissions.CountAsync(TestContext.Current.CancellationToken));
Assert.Equal(preferenceCount, await context.Preferences.CountAsync(TestContext.Current.CancellationToken));
}
[Fact]
public async Task ClearProfileImageAsync_WhenInMemoryImageHasTemporaryKey_RemovesPersistedImage()
{