浏览代码

Fixed tests

JPVenson 8 月之前
父节点
当前提交
7f03f39bcc

+ 49 - 40
Jellyfin.Server.Implementations/Item/BaseItemRepository.cs

@@ -930,19 +930,19 @@ public sealed class BaseItemRepository(IDbContextFactory<JellyfinDbContext> dbPr
         if (filter.HasDeadParentId.HasValue && filter.HasDeadParentId.Value)
         {
             baseQuery = baseQuery
-                .Where(e => e.ParentId.HasValue && context.BaseItems.Any(f => f.Id == e.ParentId.Value));
+                .Where(e => e.ParentId.HasValue && !context.BaseItems.Any(f => f.Id == e.ParentId.Value));
         }
 
         if (filter.IsDeadArtist.HasValue && filter.IsDeadArtist.Value)
         {
             baseQuery = baseQuery
-                .Where(e => e.ItemValues!.Any(f => (f.Type == 0 || f.Type == ItemValueType.AlbumArtist) && f.CleanValue == e.CleanName));
+                .Where(e => !e.ItemValues!.Any(f => (f.Type == ItemValueType.Artist || f.Type == ItemValueType.AlbumArtist) && f.CleanValue == e.CleanName));
         }
 
         if (filter.IsDeadStudio.HasValue && filter.IsDeadStudio.Value)
         {
             baseQuery = baseQuery
-                .Where(e => e.ItemValues!.Any(f => f.Type == ItemValueType.Studios && f.CleanValue == e.CleanName));
+                .Where(e => !e.ItemValues!.Any(f => f.Type == ItemValueType.Studios && f.CleanValue == e.CleanName));
         }
 
         if (filter.IsDeadPerson.HasValue && filter.IsDeadPerson.Value)
@@ -1252,53 +1252,61 @@ public sealed class BaseItemRepository(IDbContextFactory<JellyfinDbContext> dbPr
             tuples[i] = (item, ancestorIds, topParent, userdataKey, inheritedTags);
         }
 
-        using var context = dbProvider.CreateDbContext();
-        using var transaction = context.Database.BeginTransaction();
-        foreach (var item in tuples)
+        try
         {
-            var entity = Map(item.Item);
-            if (!context.BaseItems.Any(e => e.Id == entity.Id))
+            using var context = dbProvider.CreateDbContext();
+            using var transaction = context.Database.BeginTransaction();
+            foreach (var item in tuples)
             {
-                context.BaseItems.Add(entity);
-            }
-            else
-            {
-                context.BaseItems.Attach(entity).State = EntityState.Modified;
-            }
+                var entity = Map(item.Item);
+                if (!context.BaseItems.Any(e => e.Id == entity.Id))
+                {
+                    context.BaseItems.Add(entity);
+                }
+                else
+                {
+                    context.BaseItems.Attach(entity).State = EntityState.Modified;
+                }
 
-            context.AncestorIds.Where(e => e.ItemId == entity.Id).ExecuteDelete();
-            if (item.Item.SupportsAncestors && item.AncestorIds != null)
-            {
-                entity.AncestorIds = new List<AncestorId>();
-                foreach (var ancestorId in item.AncestorIds)
+                context.AncestorIds.Where(e => e.ItemId == entity.Id).ExecuteDelete();
+                if (item.Item.SupportsAncestors && item.AncestorIds != null)
                 {
-                    entity.AncestorIds.Add(new AncestorId()
+                    entity.AncestorIds = new List<AncestorId>();
+                    foreach (var ancestorId in item.AncestorIds)
                     {
-                        ParentItemId = ancestorId,
-                        ItemId = entity.Id
-                    });
+                        entity.AncestorIds.Add(new AncestorId()
+                        {
+                            ParentItemId = ancestorId,
+                            ItemId = entity.Id
+                        });
+                    }
                 }
-            }
 
-            var itemValues = GetItemValuesToSave(item.Item, item.InheritedTags);
-            context.ItemValues.Where(e => e.ItemId == entity.Id).ExecuteDelete();
-            entity.ItemValues = new List<ItemValue>();
+                var itemValues = GetItemValuesToSave(item.Item, item.InheritedTags);
+                context.ItemValues.Where(e => e.ItemId == entity.Id).ExecuteDelete();
+                entity.ItemValues = new List<ItemValue>();
 
-            foreach (var itemValue in itemValues)
-            {
-                entity.ItemValues.Add(new()
+                foreach (var itemValue in itemValues)
                 {
-                    Item = entity,
-                    Type = (ItemValueType)itemValue.MagicNumber,
-                    Value = itemValue.Value,
-                    CleanValue = GetCleanValue(itemValue.Value),
-                    ItemId = entity.Id
-                });
+                    entity.ItemValues.Add(new()
+                    {
+                        Item = entity,
+                        Type = (ItemValueType)itemValue.MagicNumber,
+                        Value = itemValue.Value,
+                        CleanValue = GetCleanValue(itemValue.Value),
+                        ItemId = entity.Id
+                    });
+                }
             }
-        }
 
-        context.SaveChanges();
-        transaction.Commit();
+            context.SaveChanges();
+            transaction.Commit();
+        }
+        catch (System.Exception)
+        {
+            System.Console.WriteLine();
+            throw;
+        }
     }
 
     /// <inheritdoc cref="IItemRepository" />
@@ -1484,7 +1492,8 @@ public sealed class BaseItemRepository(IDbContextFactory<JellyfinDbContext> dbPr
             Type = dto.GetType().ToString(),
             Id = dto.Id
         };
-        entity.ParentId = dto.ParentId;
+
+        entity.ParentId = !dto.ParentId.IsEmpty() ? dto.ParentId : null;
         entity.Path = GetPathToSave(dto.Path);
         entity.EndDate = dto.EndDate.GetValueOrDefault();
         entity.CommunityRating = dto.CommunityRating;

+ 7 - 7
tests/Jellyfin.Server.Integration.Tests/Controllers/LibraryStructureControllerTests.cs

@@ -13,7 +13,7 @@ using Xunit.Priority;
 
 namespace Jellyfin.Server.Integration.Tests.Controllers;
 
-// [TestCaseOrderer(PriorityOrderer.Name, PriorityOrderer.Assembly)]
+[TestCaseOrderer(PriorityOrderer.Name, PriorityOrderer.Assembly)]
 public sealed class LibraryStructureControllerTests : IClassFixture<JellyfinApplicationFactory>
 {
     private readonly JellyfinApplicationFactory _factory;
@@ -62,13 +62,13 @@ public sealed class LibraryStructureControllerTests : IClassFixture<JellyfinAppl
     }
 
     [Fact]
-    [Priority(-2)]
+    [Priority(0)]
     public async Task UpdateLibraryOptions_Valid_Success()
     {
         var client = _factory.CreateClient();
         client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client));
 
-        var createBody = new AddVirtualFolderDto()
+        var createbody = new AddVirtualFolderDto()
         {
             LibraryOptions = new LibraryOptions()
             {
@@ -76,8 +76,8 @@ public sealed class LibraryStructureControllerTests : IClassFixture<JellyfinAppl
             }
         };
 
-        using var createResponse = await client.PostAsJsonAsync("Library/VirtualFolders?name=test&refreshLibrary=true", createBody, _jsonOptions);
-        Assert.Equal(HttpStatusCode.NoContent, createResponse.StatusCode);
+        using var createresponse = await client.PostAsJsonAsync("Library/VirtualFolders?name=test&refreshLibrary=true", createbody, _jsonOptions);
+        Assert.Equal(HttpStatusCode.NoContent, createresponse.StatusCode);
 
         using var response = await client.GetAsync("Library/VirtualFolders");
         Assert.Equal(HttpStatusCode.OK, response.StatusCode);
@@ -91,13 +91,13 @@ public sealed class LibraryStructureControllerTests : IClassFixture<JellyfinAppl
         Assert.False(options.Enabled);
         options.Enabled = true;
 
-        var existBody = new UpdateLibraryOptionsDto()
+        var body = new UpdateLibraryOptionsDto()
         {
             Id = Guid.Parse(library.ItemId),
             LibraryOptions = options
         };
 
-        using var response2 = await client.PostAsJsonAsync("Library/VirtualFolders/LibraryOptions", existBody, _jsonOptions);
+        using var response2 = await client.PostAsJsonAsync("Library/VirtualFolders/LibraryOptions", body, _jsonOptions);
         Assert.Equal(HttpStatusCode.NoContent, response2.StatusCode);
     }