Implement CanRefresh tests for ProviderManager.GetImageProviders

This commit is contained in:
Joe Rogers 2021-12-06 00:09:46 +01:00
parent 6221991c63
commit 56900d0fc3
No known key found for this signature in database
GPG Key ID: 0074AD57B8FDBBB4

View File

@ -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;
} }