mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-07-09 03:04:24 -04:00
Implement CanRefresh tests for ProviderManager.GetImageProviders
This commit is contained in:
parent
6221991c63
commit
56900d0fc3
@ -1,6 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using MediaBrowser.Controller.BaseItemManager;
|
||||||
using MediaBrowser.Controller.Configuration;
|
using MediaBrowser.Controller.Configuration;
|
||||||
using MediaBrowser.Controller.Entities;
|
using MediaBrowser.Controller.Entities;
|
||||||
using MediaBrowser.Controller.Entities.Movies;
|
using MediaBrowser.Controller.Entities.Movies;
|
||||||
@ -53,7 +54,7 @@ namespace Jellyfin.Providers.Tests.Manager
|
|||||||
for (var i = 0; i < providerCount; i++)
|
for (var i = 0; i < providerCount; i++)
|
||||||
{
|
{
|
||||||
var order = hasOrderOrder?[i];
|
var order = hasOrderOrder?[i];
|
||||||
providerList.Add(MockIImageProvider<IImageProvider>(nameProvider(i), item, order));
|
providerList.Add(MockIImageProvider<IImageProvider>(nameProvider(i), item, order: order));
|
||||||
}
|
}
|
||||||
|
|
||||||
var libraryOptions = new LibraryOptions();
|
var libraryOptions = new LibraryOptions();
|
||||||
@ -95,7 +96,78 @@ namespace Jellyfin.Providers.Tests.Manager
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static IImageProvider MockIImageProvider<T>(string name, BaseItem supportedType, int? order = null)
|
[Theory]
|
||||||
|
[InlineData(true, false, true)]
|
||||||
|
[InlineData(false, false, false)]
|
||||||
|
[InlineData(true, true, false)]
|
||||||
|
public void GetImageProviders_CanRefreshBasic_WhenSupportsWithoutError(bool supports, bool errorOnSupported, bool expected)
|
||||||
|
{
|
||||||
|
GetImageProviders_CanRefresh_Tester(typeof(IImageProvider), supports, expected, errorOnSupported: errorOnSupported);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Theory]
|
||||||
|
[InlineData(typeof(ILocalImageProvider), false, true)]
|
||||||
|
[InlineData(typeof(ILocalImageProvider), true, true)]
|
||||||
|
[InlineData(typeof(IImageProvider), false, false)]
|
||||||
|
[InlineData(typeof(IImageProvider), true, true)]
|
||||||
|
public void GetImageProviders_CanRefreshLocked_WhenLocalOrFullRefresh(Type providerType, bool fullRefresh, bool expected)
|
||||||
|
{
|
||||||
|
GetImageProviders_CanRefresh_Tester(providerType, true, expected, itemLocked: true, fullRefresh: fullRefresh);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Theory]
|
||||||
|
[InlineData(typeof(ILocalImageProvider), false, true)]
|
||||||
|
[InlineData(typeof(IRemoteImageProvider), true, true)]
|
||||||
|
[InlineData(typeof(IDynamicImageProvider), true, true)]
|
||||||
|
[InlineData(typeof(IRemoteImageProvider), false, false)]
|
||||||
|
[InlineData(typeof(IDynamicImageProvider), false, false)]
|
||||||
|
public void GetImageProviders_CanRefreshEnabled_WhenLocalOrEnabled(Type providerType, bool enabled, bool expected)
|
||||||
|
{
|
||||||
|
GetImageProviders_CanRefresh_Tester(providerType, true, expected, baseItemEnabled: enabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void GetImageProviders_CanRefresh_Tester(Type providerType, bool supports, bool expected, bool errorOnSupported = false, bool itemLocked = false, bool fullRefresh = false, bool baseItemEnabled = true)
|
||||||
|
{
|
||||||
|
var item = new Movie
|
||||||
|
{
|
||||||
|
IsLocked = itemLocked
|
||||||
|
};
|
||||||
|
|
||||||
|
var providerName = "provider";
|
||||||
|
IImageProvider provider = providerType.Name switch
|
||||||
|
{
|
||||||
|
"IImageProvider" => MockIImageProvider<IImageProvider>(providerName, item, supports: supports, errorOnSupported: errorOnSupported),
|
||||||
|
"ILocalImageProvider" => MockIImageProvider<ILocalImageProvider>(providerName, item, supports: supports, errorOnSupported: errorOnSupported),
|
||||||
|
"IRemoteImageProvider" => MockIImageProvider<IRemoteImageProvider>(providerName, item, supports: supports, errorOnSupported: errorOnSupported),
|
||||||
|
"IDynamicImageProvider" => MockIImageProvider<IDynamicImageProvider>(providerName, item, supports: supports, errorOnSupported: errorOnSupported),
|
||||||
|
_ => throw new ArgumentException("Unexpected provider type")
|
||||||
|
};
|
||||||
|
|
||||||
|
var refreshOptions = new ImageRefreshOptions(Mock.Of<IDirectoryService>(MockBehavior.Strict))
|
||||||
|
{
|
||||||
|
ImageRefreshMode = fullRefresh ? MetadataRefreshMode.FullRefresh : MetadataRefreshMode.Default
|
||||||
|
};
|
||||||
|
|
||||||
|
var baseItemManager = new Mock<IBaseItemManager>(MockBehavior.Strict);
|
||||||
|
baseItemManager.Setup(i => i.IsImageFetcherEnabled(item, It.IsAny<LibraryOptions>(), providerName))
|
||||||
|
.Returns(baseItemEnabled);
|
||||||
|
|
||||||
|
var providerManager = GetProviderManager(baseItemManager: baseItemManager.Object);
|
||||||
|
AddParts(providerManager, imageProviders: new[] { provider });
|
||||||
|
|
||||||
|
var actualProviders = providerManager.GetImageProviders(item, refreshOptions);
|
||||||
|
|
||||||
|
if (expected)
|
||||||
|
{
|
||||||
|
Assert.Single(actualProviders);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Assert.Empty(actualProviders);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static IImageProvider MockIImageProvider<T>(string name, BaseItem expectedType, bool supports = true, int? order = null, bool errorOnSupported = false)
|
||||||
where T : class, IImageProvider
|
where T : class, IImageProvider
|
||||||
{
|
{
|
||||||
Mock<IHasOrder>? hasOrder = null;
|
Mock<IHasOrder>? hasOrder = null;
|
||||||
@ -111,12 +183,21 @@ namespace Jellyfin.Providers.Tests.Manager
|
|||||||
: hasOrder.As<T>();
|
: hasOrder.As<T>();
|
||||||
provider.Setup(p => p.Name)
|
provider.Setup(p => p.Name)
|
||||||
.Returns(name);
|
.Returns(name);
|
||||||
provider.Setup(p => p.Supports(supportedType))
|
if (errorOnSupported)
|
||||||
.Returns(true);
|
{
|
||||||
|
provider.Setup(p => p.Supports(It.IsAny<BaseItem>()))
|
||||||
|
.Throws(new ArgumentException());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
provider.Setup(p => p.Supports(expectedType))
|
||||||
|
.Returns(supports);
|
||||||
|
}
|
||||||
|
|
||||||
return provider.Object;
|
return provider.Object;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static ProviderManager GetProviderManager(ServerConfiguration? serverConfiguration = null, LibraryOptions? libraryOptions = null)
|
private static ProviderManager GetProviderManager(ServerConfiguration? serverConfiguration = null, LibraryOptions? libraryOptions = null, IBaseItemManager? baseItemManager = null)
|
||||||
{
|
{
|
||||||
var serverConfigurationManager = new Mock<IServerConfigurationManager>(MockBehavior.Strict);
|
var serverConfigurationManager = new Mock<IServerConfigurationManager>(MockBehavior.Strict);
|
||||||
serverConfigurationManager.Setup(i => i.Configuration)
|
serverConfigurationManager.Setup(i => i.Configuration)
|
||||||
@ -135,7 +216,7 @@ namespace Jellyfin.Providers.Tests.Manager
|
|||||||
null,
|
null,
|
||||||
null,
|
null,
|
||||||
libraryManager.Object,
|
libraryManager.Object,
|
||||||
null);
|
baseItemManager);
|
||||||
|
|
||||||
return providerManager;
|
return providerManager;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user