aboutsummaryrefslogtreecommitdiff
path: root/tests/Jellyfin.Providers.Tests/Manager/ProviderManagerTests.cs
diff options
context:
space:
mode:
authorJoe Rogers <1337joe@gmail.com>2021-12-06 00:09:46 +0100
committerJoe Rogers <1337joe@gmail.com>2022-04-03 23:34:48 +0200
commit56900d0fc3bc791fd3c0a92bda22ca2f23f28be1 (patch)
tree57bfd782626e3cdcedd8ee97ee1bf481faff2c14 /tests/Jellyfin.Providers.Tests/Manager/ProviderManagerTests.cs
parent6221991c630bcbd688316ad35121781c7a52c591 (diff)
Implement CanRefresh tests for ProviderManager.GetImageProviders
Diffstat (limited to 'tests/Jellyfin.Providers.Tests/Manager/ProviderManagerTests.cs')
-rw-r--r--tests/Jellyfin.Providers.Tests/Manager/ProviderManagerTests.cs93
1 files changed, 87 insertions, 6 deletions
diff --git a/tests/Jellyfin.Providers.Tests/Manager/ProviderManagerTests.cs b/tests/Jellyfin.Providers.Tests/Manager/ProviderManagerTests.cs
index 590f50b25..4a1b90895 100644
--- a/tests/Jellyfin.Providers.Tests/Manager/ProviderManagerTests.cs
+++ b/tests/Jellyfin.Providers.Tests/Manager/ProviderManagerTests.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using MediaBrowser.Controller.BaseItemManager;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.Movies;
@@ -53,7 +54,7 @@ namespace Jellyfin.Providers.Tests.Manager
for (var i = 0; i < providerCount; 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();
@@ -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
{
Mock<IHasOrder>? hasOrder = null;
@@ -111,12 +183,21 @@ namespace Jellyfin.Providers.Tests.Manager
: hasOrder.As<T>();
provider.Setup(p => p.Name)
.Returns(name);
- provider.Setup(p => p.Supports(supportedType))
- .Returns(true);
+ if (errorOnSupported)
+ {
+ provider.Setup(p => p.Supports(It.IsAny<BaseItem>()))
+ .Throws(new ArgumentException());
+ }
+ else
+ {
+ provider.Setup(p => p.Supports(expectedType))
+ .Returns(supports);
+ }
+
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);
serverConfigurationManager.Setup(i => i.Configuration)
@@ -135,7 +216,7 @@ namespace Jellyfin.Providers.Tests.Manager
null,
null,
libraryManager.Object,
- null);
+ baseItemManager);
return providerManager;
}