From 58be1d7759e4ae2734dbbb2c980ac4f7e8ebaf62 Mon Sep 17 00:00:00 2001
From: Joe Rogers <1337joe@gmail.com>
Date: Mon, 15 Nov 2021 14:47:06 +0100
Subject: [PATCH] Actually check server disabled metadata providers

---
 .../BaseItemManager/BaseItemManager.cs        |  4 +-
 .../BaseItemManagerTests.cs                   | 89 +++++++++++++++++++
 2 files changed, 91 insertions(+), 2 deletions(-)
 create mode 100644 tests/Jellyfin.Controller.Tests/BaseItemManagerTests.cs

diff --git a/MediaBrowser.Controller/BaseItemManager/BaseItemManager.cs b/MediaBrowser.Controller/BaseItemManager/BaseItemManager.cs
index abfdb41d80..ba2f419a2e 100644
--- a/MediaBrowser.Controller/BaseItemManager/BaseItemManager.cs
+++ b/MediaBrowser.Controller/BaseItemManager/BaseItemManager.cs
@@ -60,7 +60,7 @@ namespace MediaBrowser.Controller.BaseItemManager
                 return false;
             }
 
-            var itemConfig = _serverConfigurationManager.Configuration.MetadataOptions.FirstOrDefault(i => string.Equals(i.ItemType, GetType().Name, StringComparison.OrdinalIgnoreCase));
+            var itemConfig = _serverConfigurationManager.Configuration.MetadataOptions.FirstOrDefault(i => string.Equals(i.ItemType, baseItem.GetType().Name, StringComparison.OrdinalIgnoreCase));
 
             return itemConfig == null || !itemConfig.DisabledMetadataFetchers.Contains(name.AsSpan(), StringComparison.OrdinalIgnoreCase);
         }
@@ -91,7 +91,7 @@ namespace MediaBrowser.Controller.BaseItemManager
                 return false;
             }
 
-            var itemConfig = _serverConfigurationManager.Configuration.MetadataOptions.FirstOrDefault(i => string.Equals(i.ItemType, GetType().Name, StringComparison.OrdinalIgnoreCase));
+            var itemConfig = _serverConfigurationManager.Configuration.MetadataOptions.FirstOrDefault(i => string.Equals(i.ItemType, baseItem.GetType().Name, StringComparison.OrdinalIgnoreCase));
 
             return itemConfig == null || !itemConfig.DisabledImageFetchers.Contains(name.AsSpan(), StringComparison.OrdinalIgnoreCase);
         }
diff --git a/tests/Jellyfin.Controller.Tests/BaseItemManagerTests.cs b/tests/Jellyfin.Controller.Tests/BaseItemManagerTests.cs
new file mode 100644
index 0000000000..edceef4a7c
--- /dev/null
+++ b/tests/Jellyfin.Controller.Tests/BaseItemManagerTests.cs
@@ -0,0 +1,89 @@
+using System;
+using MediaBrowser.Controller.BaseItemManager;
+using MediaBrowser.Controller.Configuration;
+using MediaBrowser.Controller.Entities;
+using MediaBrowser.Controller.Entities.Audio;
+using MediaBrowser.Controller.Entities.Movies;
+using MediaBrowser.Model.Configuration;
+using Moq;
+using Xunit;
+
+namespace Jellyfin.Controller.Tests
+{
+    public class BaseItemManagerTests
+    {
+        [Theory]
+        [InlineData(typeof(Book), "LibraryEnabled", true)]
+        [InlineData(typeof(Book), "LibraryDisabled", false)]
+        [InlineData(typeof(MusicArtist), "Enabled", true)]
+        [InlineData(typeof(MusicArtist), "ServerDisabled", false)]
+        public void IsMetadataFetcherEnabled_ChecksOptions_ReturnsExpected(Type itemType, string fetcherName, bool expected)
+        {
+            BaseItem item = (BaseItem)Activator.CreateInstance(itemType)!;
+
+            var libraryOptions = new LibraryOptions
+            {
+                TypeOptions = new[]
+                {
+                    new TypeOptions
+                    {
+                        Type = "Book",
+                        MetadataFetchers = new[] { "LibraryEnabled" }
+                    }
+                }
+            };
+
+            var serverConfiguration = new ServerConfiguration();
+            foreach (var typeConfig in serverConfiguration.MetadataOptions)
+            {
+                typeConfig.DisabledMetadataFetchers = new[] { "ServerDisabled" };
+            }
+
+            var serverConfigurationManager = new Mock<IServerConfigurationManager>();
+            serverConfigurationManager.Setup(scm => scm.Configuration)
+                .Returns(serverConfiguration);
+
+            var baseItemManager = new BaseItemManager(serverConfigurationManager.Object);
+            var actual = baseItemManager.IsMetadataFetcherEnabled(item, libraryOptions, fetcherName);
+
+            Assert.Equal(expected, actual);
+        }
+
+        [Theory]
+        [InlineData(typeof(Book), "LibraryEnabled", true)]
+        [InlineData(typeof(Book), "LibraryDisabled", false)]
+        [InlineData(typeof(MusicArtist), "Enabled", true)]
+        [InlineData(typeof(MusicArtist), "ServerDisabled", false)]
+        public void IsImageFetcherEnabled_ChecksOptions_ReturnsExpected(Type itemType, string fetcherName, bool expected)
+        {
+            BaseItem item = (BaseItem)Activator.CreateInstance(itemType)!;
+
+            var libraryOptions = new LibraryOptions
+            {
+                TypeOptions = new[]
+                {
+                    new TypeOptions
+                    {
+                        Type = "Book",
+                        ImageFetchers = new[] { "LibraryEnabled" }
+                    }
+                }
+            };
+
+            var serverConfiguration = new ServerConfiguration();
+            foreach (var typeConfig in serverConfiguration.MetadataOptions)
+            {
+                typeConfig.DisabledImageFetchers = new[] { "ServerDisabled" };
+            }
+
+            var serverConfigurationManager = new Mock<IServerConfigurationManager>();
+            serverConfigurationManager.Setup(scm => scm.Configuration)
+                .Returns(serverConfiguration);
+
+            var baseItemManager = new BaseItemManager(serverConfigurationManager.Object);
+            var actual = baseItemManager.IsImageFetcherEnabled(item, libraryOptions, fetcherName);
+
+            Assert.Equal(expected, actual);
+        }
+    }
+}