diff --git a/tests/Jellyfin.Providers.Tests/Manager/ItemImageProviderTests.cs b/tests/Jellyfin.Providers.Tests/Manager/ItemImageProviderTests.cs index 9aa9e2c32..af273390b 100644 --- a/tests/Jellyfin.Providers.Tests/Manager/ItemImageProviderTests.cs +++ b/tests/Jellyfin.Providers.Tests/Manager/ItemImageProviderTests.cs @@ -41,10 +41,7 @@ namespace Jellyfin.Providers.Tests.Manager [Fact] public void ValidateImages_EmptyItemEmptyProviders_NoChange() { - var itemImageProvider = GetItemImageProvider(null, null); - var changed = itemImageProvider.ValidateImages(new Video(), Enumerable.Empty(), null); - - Assert.False(changed); + ValidateImages_Test(ImageType.Primary, 0, true, 0, false, 0); } private static TheoryData GetImageTypesWithCount() @@ -53,7 +50,6 @@ namespace Jellyfin.Providers.Tests.Manager { // minimal test cases that hit different handling { ImageType.Primary, 1 }, - { ImageType.Backdrop, 1 }, { ImageType.Backdrop, 2 } }; @@ -64,43 +60,34 @@ namespace Jellyfin.Providers.Tests.Manager [MemberData(nameof(GetImageTypesWithCount))] public void ValidateImages_EmptyItemAndPopulatedProviders_AddsImages(ImageType imageType, int imageCount) { - // Has to exist for querying DateModified time on file, results stored but not checked so not populating - BaseItem.FileSystem = Mock.Of(); - - var item = new Video(); - var imageProvider = GetImageProvider(imageType, imageCount, true); - - var itemImageProvider = GetItemImageProvider(null, null); - var changed = itemImageProvider.ValidateImages(item, new[] { imageProvider }, null); - - Assert.True(changed); - Assert.Equal(imageCount, item.GetImages(imageType).Count()); + ValidateImages_Test(imageType, 0, true, imageCount, true, imageCount); } [Theory] [MemberData(nameof(GetImageTypesWithCount))] public void ValidateImages_PopulatedItemWithGoodPathsAndEmptyProviders_NoChange(ImageType imageType, int imageCount) { - var item = GetItemWithImages(imageType, imageCount, true); - - var itemImageProvider = GetItemImageProvider(null, null); - var changed = itemImageProvider.ValidateImages(item, Enumerable.Empty(), null); - - Assert.False(changed); - Assert.Equal(imageCount, item.GetImages(imageType).Count()); + ValidateImages_Test(imageType, imageCount, true, 0, false, imageCount); } [Theory] [MemberData(nameof(GetImageTypesWithCount))] public void ValidateImages_PopulatedItemWithBadPathsAndEmptyProviders_RemovesImage(ImageType imageType, int imageCount) { - var item = GetItemWithImages(imageType, imageCount, false); + ValidateImages_Test(imageType, imageCount, false, 0, true, 0); + } + + private void ValidateImages_Test(ImageType imageType, int initialImageCount, bool initialPathsValid, int providerImageCount, bool expectedChange, int expectedImageCount) + { + var item = GetItemWithImages(imageType, initialImageCount, initialPathsValid); + + var imageProvider = GetImageProvider(imageType, providerImageCount, true); var itemImageProvider = GetItemImageProvider(null, null); - var changed = itemImageProvider.ValidateImages(item, Enumerable.Empty(), null); + var actualChange = itemImageProvider.ValidateImages(item, new[] { imageProvider }, null); - Assert.True(changed); - Assert.Empty(item.GetImages(imageType)); + Assert.Equal(expectedChange, actualChange); + Assert.Equal(expectedImageCount, item.GetImages(imageType).Count()); } [Fact] @@ -137,41 +124,14 @@ namespace Jellyfin.Providers.Tests.Manager } [Theory] - [MemberData(nameof(GetImageTypesWithCount))] - public void MergeImages_PopulatedItemWithGoodPathsAndSameNewImages_NoChange(ImageType imageType, int imageCount) + [InlineData(ImageType.Primary, 1, false)] + [InlineData(ImageType.Backdrop, 2, false)] + [InlineData(ImageType.Primary, 1, true)] + [InlineData(ImageType.Backdrop, 2, true)] + public void MergeImages_PopulatedItemWithGoodPathsAndSameNewImages_ResetIfTimeChanges(ImageType imageType, int imageCount, bool updateTime) { var oldTime = new DateTime(1970, 1, 1); - - // match update time with time added to item images (unix epoch) - var fileSystem = new Mock(); - fileSystem.Setup(fs => fs.GetLastWriteTimeUtc(It.IsAny())) - .Returns(oldTime); - BaseItem.FileSystem = fileSystem.Object; - - // all valid paths - matching for strictly updating - var item = GetItemWithImages(imageType, imageCount, true); - // set size to non-zero to allow for updates to occur - foreach (var image in item.GetImages(imageType)) - { - image.DateModified = oldTime; - image.Height = 1; - image.Width = 1; - } - - var images = GetImages(imageType, imageCount, true); - - var itemImageProvider = GetItemImageProvider(null, fileSystem); - var changed = itemImageProvider.MergeImages(item, images); - - Assert.False(changed); - } - - [Theory] - [MemberData(nameof(GetImageTypesWithCount))] - public void MergeImages_PopulatedItemWithGoodPathsAndSameNewImagesWithNewTimestamps_ResetsImageSizes(ImageType imageType, int imageCount) - { - var oldTime = new DateTime(1970, 1, 1); - var updatedTime = new DateTime(2021, 1, 1); + var updatedTime = updateTime ? new DateTime(2021, 1, 1) : oldTime; var fileSystem = new Mock(); fileSystem.Setup(fs => fs.GetLastWriteTimeUtc(It.IsAny())) @@ -193,14 +153,21 @@ namespace Jellyfin.Providers.Tests.Manager var itemImageProvider = GetItemImageProvider(null, fileSystem); var changed = itemImageProvider.MergeImages(item, images); - Assert.True(changed); - // before and after paths are the same, verify updated by size reset to 0 - Assert.Equal(imageCount, item.GetImages(imageType).Count()); - foreach (var image in item.GetImages(imageType)) + if (updateTime) { - Assert.Equal(updatedTime, image.DateModified); - Assert.Equal(0, image.Height); - Assert.Equal(0, image.Width); + Assert.True(changed); + // before and after paths are the same, verify updated by size reset to 0 + Assert.Equal(imageCount, item.GetImages(imageType).Count()); + foreach (var image in item.GetImages(imageType)) + { + Assert.Equal(updatedTime, image.DateModified); + Assert.Equal(0, image.Height); + Assert.Equal(0, image.Width); + } + } + else + { + Assert.False(changed); } }