|
@@ -41,10 +41,7 @@ namespace Jellyfin.Providers.Tests.Manager
|
|
[Fact]
|
|
[Fact]
|
|
public void ValidateImages_EmptyItemEmptyProviders_NoChange()
|
|
public void ValidateImages_EmptyItemEmptyProviders_NoChange()
|
|
{
|
|
{
|
|
- var itemImageProvider = GetItemImageProvider(null, null);
|
|
|
|
- var changed = itemImageProvider.ValidateImages(new Video(), Enumerable.Empty<ILocalImageProvider>(), null);
|
|
|
|
-
|
|
|
|
- Assert.False(changed);
|
|
|
|
|
|
+ ValidateImages_Test(ImageType.Primary, 0, true, 0, false, 0);
|
|
}
|
|
}
|
|
|
|
|
|
private static TheoryData<ImageType, int> GetImageTypesWithCount()
|
|
private static TheoryData<ImageType, int> GetImageTypesWithCount()
|
|
@@ -53,7 +50,6 @@ namespace Jellyfin.Providers.Tests.Manager
|
|
{
|
|
{
|
|
// minimal test cases that hit different handling
|
|
// minimal test cases that hit different handling
|
|
{ ImageType.Primary, 1 },
|
|
{ ImageType.Primary, 1 },
|
|
- { ImageType.Backdrop, 1 },
|
|
|
|
{ ImageType.Backdrop, 2 }
|
|
{ ImageType.Backdrop, 2 }
|
|
};
|
|
};
|
|
|
|
|
|
@@ -64,43 +60,34 @@ namespace Jellyfin.Providers.Tests.Manager
|
|
[MemberData(nameof(GetImageTypesWithCount))]
|
|
[MemberData(nameof(GetImageTypesWithCount))]
|
|
public void ValidateImages_EmptyItemAndPopulatedProviders_AddsImages(ImageType imageType, int imageCount)
|
|
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<IFileSystem>();
|
|
|
|
-
|
|
|
|
- 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]
|
|
[Theory]
|
|
[MemberData(nameof(GetImageTypesWithCount))]
|
|
[MemberData(nameof(GetImageTypesWithCount))]
|
|
public void ValidateImages_PopulatedItemWithGoodPathsAndEmptyProviders_NoChange(ImageType imageType, int imageCount)
|
|
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<ILocalImageProvider>(), null);
|
|
|
|
-
|
|
|
|
- Assert.False(changed);
|
|
|
|
- Assert.Equal(imageCount, item.GetImages(imageType).Count());
|
|
|
|
|
|
+ ValidateImages_Test(imageType, imageCount, true, 0, false, imageCount);
|
|
}
|
|
}
|
|
|
|
|
|
[Theory]
|
|
[Theory]
|
|
[MemberData(nameof(GetImageTypesWithCount))]
|
|
[MemberData(nameof(GetImageTypesWithCount))]
|
|
public void ValidateImages_PopulatedItemWithBadPathsAndEmptyProviders_RemovesImage(ImageType imageType, int imageCount)
|
|
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 itemImageProvider = GetItemImageProvider(null, null);
|
|
- var changed = itemImageProvider.ValidateImages(item, Enumerable.Empty<ILocalImageProvider>(), 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]
|
|
[Fact]
|
|
@@ -137,41 +124,14 @@ namespace Jellyfin.Providers.Tests.Manager
|
|
}
|
|
}
|
|
|
|
|
|
[Theory]
|
|
[Theory]
|
|
- [MemberData(nameof(GetImageTypesWithCount))]
|
|
|
|
- public void MergeImages_PopulatedItemWithGoodPathsAndSameNewImages_NoChange(ImageType imageType, int imageCount)
|
|
|
|
- {
|
|
|
|
- var oldTime = new DateTime(1970, 1, 1);
|
|
|
|
-
|
|
|
|
- // match update time with time added to item images (unix epoch)
|
|
|
|
- var fileSystem = new Mock<IFileSystem>();
|
|
|
|
- fileSystem.Setup(fs => fs.GetLastWriteTimeUtc(It.IsAny<FileSystemMetadata>()))
|
|
|
|
- .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)
|
|
|
|
|
|
+ [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);
|
|
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<IFileSystem>();
|
|
var fileSystem = new Mock<IFileSystem>();
|
|
fileSystem.Setup(fs => fs.GetLastWriteTimeUtc(It.IsAny<FileSystemMetadata>()))
|
|
fileSystem.Setup(fs => fs.GetLastWriteTimeUtc(It.IsAny<FileSystemMetadata>()))
|
|
@@ -193,14 +153,21 @@ namespace Jellyfin.Providers.Tests.Manager
|
|
var itemImageProvider = GetItemImageProvider(null, fileSystem);
|
|
var itemImageProvider = GetItemImageProvider(null, fileSystem);
|
|
var changed = itemImageProvider.MergeImages(item, images);
|
|
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.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.Equal(updatedTime, image.DateModified);
|
|
|
|
- Assert.Equal(0, image.Height);
|
|
|
|
- Assert.Equal(0, image.Width);
|
|
|
|
|
|
+ Assert.False(changed);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|