aboutsummaryrefslogtreecommitdiff
path: root/tests/Jellyfin.Server.Implementations.Tests/Library/UserDataManagerTests.cs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/Jellyfin.Server.Implementations.Tests/Library/UserDataManagerTests.cs')
-rw-r--r--tests/Jellyfin.Server.Implementations.Tests/Library/UserDataManagerTests.cs40
1 files changed, 40 insertions, 0 deletions
diff --git a/tests/Jellyfin.Server.Implementations.Tests/Library/UserDataManagerTests.cs b/tests/Jellyfin.Server.Implementations.Tests/Library/UserDataManagerTests.cs
index ba3127bc08..2ed16de15b 100644
--- a/tests/Jellyfin.Server.Implementations.Tests/Library/UserDataManagerTests.cs
+++ b/tests/Jellyfin.Server.Implementations.Tests/Library/UserDataManagerTests.cs
@@ -1,5 +1,7 @@
using System;
using System.Collections.Generic;
+using System.Linq;
+using System.Threading;
using Emby.Server.Implementations.Library;
using Jellyfin.Database.Implementations;
using Jellyfin.Database.Implementations.Entities;
@@ -8,6 +10,7 @@ using Jellyfin.Database.Providers.Sqlite;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Model.Configuration;
+using MediaBrowser.Model.Entities;
using Microsoft.Data.Sqlite;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging.Abstractions;
@@ -208,6 +211,43 @@ public sealed class UserDataManagerTests : IDisposable
}
[Fact]
+ public void SaveUserData_RowUnderRetiredKey_IsKeptInAgreement()
+ {
+ var item = CreateAudioBook();
+
+ using (var ctx = CreateDbContext())
+ {
+ ctx.Users.Add(_user);
+ ctx.BaseItems.Add(new BaseItemEntity { Id = item.Id, Type = typeof(AudioBook).FullName! });
+ ctx.UserData.Add(CreateUserDataRow(item, "Author-Old Album-0001Old File Name", 111));
+ ctx.SaveChanges();
+ }
+
+ _userDataManager.SaveUserData(
+ _user,
+ item,
+ new UserItemData { Key = item.GetUserDataKeys()[0], Played = true },
+ UserDataSaveReason.UpdateUserRating,
+ CancellationToken.None);
+
+ using (var ctx = CreateDbContext())
+ {
+ var rows = ctx.UserData.Where(e => e.ItemId.Equals(item.Id)).ToList();
+
+ // The retired-key row is what a re-added item reattaches by, so it survives, but it must
+ // not keep a playback position that holds the item in Continue Watching.
+ Assert.Equal(
+ item.GetUserDataKeys().Append("Author-Old Album-0001Old File Name").OrderBy(e => e, StringComparer.Ordinal),
+ rows.Select(e => e.CustomDataKey).OrderBy(e => e, StringComparer.Ordinal));
+ Assert.All(rows, row =>
+ {
+ Assert.True(row.Played);
+ Assert.Equal(0, row.PlaybackPositionTicks);
+ });
+ }
+ }
+
+ [Fact]
public void GetUserData_NullUser_ThrowsArgumentNullException()
{
var item = CreateAudioBook();