diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Package/AllPackageManifestsController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Package/AllPackageManifestsController.cs new file mode 100644 index 0000000000..e87acee64d --- /dev/null +++ b/src/Umbraco.Cms.Api.Management/Controllers/Package/AllPackageManifestsController.cs @@ -0,0 +1,34 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using Umbraco.Cms.Api.Common.ViewModels.Pagination; +using Umbraco.Cms.Api.Management.ViewModels.Package; +using Umbraco.Cms.Core.Manifest; +using Umbraco.Cms.Core.Mapping; + +namespace Umbraco.Cms.Api.Management.Controllers.Package; + +public class AllPackageManifestsController : PackageControllerBase +{ + private readonly IPackageManifestService _packageManifestService; + private readonly IUmbracoMapper _umbracoMapper; + + public AllPackageManifestsController(IPackageManifestService packageManifestService, IUmbracoMapper umbracoMapper) + { + _packageManifestService = packageManifestService; + _umbracoMapper = umbracoMapper; + } + + [HttpGet("manifest")] + [MapToApiVersion("1.0")] + [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)] + public async Task>> AllPackageManifests(int skip = 0, int take = 100) + { + PackageManifest[] packageManifests = (await _packageManifestService.GetPackageManifestsAsync()).ToArray(); + return Ok( + new PagedViewModel + { + Items = _umbracoMapper.MapEnumerable(packageManifests.Skip(skip).Take(take)), + Total = packageManifests.Length + }); + } +} diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Package/AllPluginsController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Package/AllPluginsController.cs deleted file mode 100644 index bbae667125..0000000000 --- a/src/Umbraco.Cms.Api.Management/Controllers/Package/AllPluginsController.cs +++ /dev/null @@ -1,34 +0,0 @@ -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc; -using Umbraco.Cms.Api.Common.ViewModels.Pagination; -using Umbraco.Cms.Api.Management.ViewModels.Package; -using Umbraco.Cms.Core.Plugin; -using Umbraco.Cms.Core.Mapping; - -namespace Umbraco.Cms.Api.Management.Controllers.Package; - -public class AllPluginsController : PackageControllerBase -{ - private readonly IPluginConfigurationService _pluginConfigurationService; - private readonly IUmbracoMapper _umbracoMapper; - - public AllPluginsController(IPluginConfigurationService pluginConfigurationService, IUmbracoMapper umbracoMapper) - { - _pluginConfigurationService = pluginConfigurationService; - _umbracoMapper = umbracoMapper; - } - - [HttpGet("plugins")] - [MapToApiVersion("1.0")] - [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)] - public async Task>> AllPlugins(int skip = 0, int take = 100) - { - PluginConfiguration[] pluginConfigurations = (await _pluginConfigurationService.GetPluginConfigurationsAsync()).ToArray(); - return Ok( - new PagedViewModel - { - Items = _umbracoMapper.MapEnumerable(pluginConfigurations.Skip(skip).Take(take)), - Total = pluginConfigurations.Length - }); - } -} diff --git a/src/Umbraco.Cms.Api.Management/DependencyInjection/PackageBuilderExtensions.cs b/src/Umbraco.Cms.Api.Management/DependencyInjection/PackageBuilderExtensions.cs index 55c8439ec0..24e4c9acc9 100644 --- a/src/Umbraco.Cms.Api.Management/DependencyInjection/PackageBuilderExtensions.cs +++ b/src/Umbraco.Cms.Api.Management/DependencyInjection/PackageBuilderExtensions.cs @@ -8,7 +8,7 @@ internal static class PackageBuilderExtensions { internal static IUmbracoBuilder AddPackages(this IUmbracoBuilder builder) { - builder.WithCollectionBuilder().Add(); + builder.WithCollectionBuilder().Add(); return builder; } diff --git a/src/Umbraco.Cms.Api.Management/Mapping/Package/PluginConfigurationViewModelMapDefinition.cs b/src/Umbraco.Cms.Api.Management/Mapping/Package/PackageManifestViewModelMapDefinition.cs similarity index 53% rename from src/Umbraco.Cms.Api.Management/Mapping/Package/PluginConfigurationViewModelMapDefinition.cs rename to src/Umbraco.Cms.Api.Management/Mapping/Package/PackageManifestViewModelMapDefinition.cs index 18318ab3fa..e1ee64af74 100644 --- a/src/Umbraco.Cms.Api.Management/Mapping/Package/PluginConfigurationViewModelMapDefinition.cs +++ b/src/Umbraco.Cms.Api.Management/Mapping/Package/PackageManifestViewModelMapDefinition.cs @@ -1,17 +1,16 @@ using Umbraco.Cms.Api.Management.ViewModels.Package; -using Umbraco.Cms.Core.Plugin; using Umbraco.Cms.Core.Manifest; using Umbraco.Cms.Core.Mapping; namespace Umbraco.Cms.Api.Management.Mapping.Package; -public class PluginConfigurationViewModelMapDefinition : IMapDefinition +public class PackageManifestViewModelMapDefinition : IMapDefinition { public void DefineMaps(IUmbracoMapper mapper) - => mapper.Define((_, _) => new PluginConfigurationViewModel(), Map); + => mapper.Define((_, _) => new PackageManifestViewModel(), Map); // Umbraco.Code.MapAll - private static void Map(PluginConfiguration source, PluginConfigurationViewModel target, MapperContext context) + private static void Map(PackageManifest source, PackageManifestViewModel target, MapperContext context) { target.Name = source.Name; target.Version = source.Version; diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/Package/PluginConfigurationViewModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/Package/PackageManifestViewModel.cs similarity index 84% rename from src/Umbraco.Cms.Api.Management/ViewModels/Package/PluginConfigurationViewModel.cs rename to src/Umbraco.Cms.Api.Management/ViewModels/Package/PackageManifestViewModel.cs index 034a2c6239..4b20d922bc 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/Package/PluginConfigurationViewModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/Package/PackageManifestViewModel.cs @@ -1,6 +1,6 @@ namespace Umbraco.Cms.Api.Management.ViewModels.Package; -public class PluginConfigurationViewModel +public class PackageManifestViewModel { public string Name { get; set; } = string.Empty; diff --git a/src/Umbraco.Core/IO/IManifestFileProviderFactory.cs b/src/Umbraco.Core/IO/ILegacyPackageManifestFileProviderFactory.cs similarity index 72% rename from src/Umbraco.Core/IO/IManifestFileProviderFactory.cs rename to src/Umbraco.Core/IO/ILegacyPackageManifestFileProviderFactory.cs index 982b029c27..39414a87d5 100644 --- a/src/Umbraco.Core/IO/IManifestFileProviderFactory.cs +++ b/src/Umbraco.Core/IO/ILegacyPackageManifestFileProviderFactory.cs @@ -5,6 +5,6 @@ namespace Umbraco.Cms.Core.IO; /// /// Factory for creating instances for providing the package.manifest file. /// -public interface IManifestFileProviderFactory : IFileProviderFactory +public interface ILegacyPackageManifestFileProviderFactory : IFileProviderFactory { } diff --git a/src/Umbraco.Core/IO/IPluginConfigurationFileProviderFactory.cs b/src/Umbraco.Core/IO/IPackageManifestFileProviderFactory.cs similarity index 73% rename from src/Umbraco.Core/IO/IPluginConfigurationFileProviderFactory.cs rename to src/Umbraco.Core/IO/IPackageManifestFileProviderFactory.cs index 221ccb3a5f..39afc36d2f 100644 --- a/src/Umbraco.Core/IO/IPluginConfigurationFileProviderFactory.cs +++ b/src/Umbraco.Core/IO/IPackageManifestFileProviderFactory.cs @@ -5,6 +5,6 @@ namespace Umbraco.Cms.Core.IO; /// /// Factory for creating instances for providing the umbraco-package.json file. /// -public interface IPluginConfigurationFileProviderFactory : IFileProviderFactory +public interface IPackageManifestFileProviderFactory : IFileProviderFactory { } diff --git a/src/Umbraco.Core/Manifest/IPackageManifestService.cs b/src/Umbraco.Core/Manifest/IPackageManifestService.cs new file mode 100644 index 0000000000..6588861411 --- /dev/null +++ b/src/Umbraco.Core/Manifest/IPackageManifestService.cs @@ -0,0 +1,6 @@ +namespace Umbraco.Cms.Core.Manifest; + +public interface IPackageManifestService +{ + Task> GetPackageManifestsAsync(); +} diff --git a/src/Umbraco.Core/Plugin/PluginConfiguration.cs b/src/Umbraco.Core/Manifest/PackageManifest.cs similarity index 73% rename from src/Umbraco.Core/Plugin/PluginConfiguration.cs rename to src/Umbraco.Core/Manifest/PackageManifest.cs index f16f0243d6..ba62334240 100644 --- a/src/Umbraco.Core/Plugin/PluginConfiguration.cs +++ b/src/Umbraco.Core/Manifest/PackageManifest.cs @@ -1,6 +1,6 @@ -namespace Umbraco.Cms.Core.Plugin; +namespace Umbraco.Cms.Core.Manifest; -public class PluginConfiguration +public class PackageManifest { public required string Name { get; set; } diff --git a/src/Umbraco.Core/Plugin/IPluginConfigurationService.cs b/src/Umbraco.Core/Plugin/IPluginConfigurationService.cs deleted file mode 100644 index c176c1ba47..0000000000 --- a/src/Umbraco.Core/Plugin/IPluginConfigurationService.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Umbraco.Cms.Core.Plugin; - -public interface IPluginConfigurationService -{ - Task> GetPluginConfigurationsAsync(); -} diff --git a/src/Umbraco.Core/Telemetry/TelemetryService.cs b/src/Umbraco.Core/Telemetry/TelemetryService.cs index 38537f080f..1d5fde2996 100644 --- a/src/Umbraco.Core/Telemetry/TelemetryService.cs +++ b/src/Umbraco.Core/Telemetry/TelemetryService.cs @@ -4,7 +4,6 @@ using Microsoft.Extensions.DependencyInjection; using Umbraco.Cms.Core.Configuration; using Umbraco.Cms.Core.DependencyInjection; -using Umbraco.Cms.Core.Plugin; using Umbraco.Cms.Core.Manifest; using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Services; @@ -20,7 +19,7 @@ internal class TelemetryService : ITelemetryService private readonly ISiteIdentifierService _siteIdentifierService; private readonly IUmbracoVersion _umbracoVersion; private readonly IUsageInformationService _usageInformationService; - private readonly IPluginConfigurationService _pluginConfigurationService; + private readonly IPackageManifestService _packageManifestService; [Obsolete("Please use the constructor that does not take an IManifestParser. Will be removed in V15.")] public TelemetryService( @@ -35,7 +34,7 @@ internal class TelemetryService : ITelemetryService siteIdentifierService, usageInformationService, metricsConsentService, - StaticServiceProvider.Instance.GetRequiredService()) + StaticServiceProvider.Instance.GetRequiredService()) { } @@ -46,13 +45,13 @@ internal class TelemetryService : ITelemetryService ISiteIdentifierService siteIdentifierService, IUsageInformationService usageInformationService, IMetricsConsentService metricsConsentService, - IPluginConfigurationService pluginConfigurationService) + IPackageManifestService packageManifestService) : this( umbracoVersion, siteIdentifierService, usageInformationService, metricsConsentService, - pluginConfigurationService) + packageManifestService) { } @@ -64,13 +63,13 @@ internal class TelemetryService : ITelemetryService ISiteIdentifierService siteIdentifierService, IUsageInformationService usageInformationService, IMetricsConsentService metricsConsentService, - IPluginConfigurationService pluginConfigurationService) + IPackageManifestService packageManifestService) { _umbracoVersion = umbracoVersion; _siteIdentifierService = siteIdentifierService; _usageInformationService = usageInformationService; _metricsConsentService = metricsConsentService; - _pluginConfigurationService = pluginConfigurationService; + _packageManifestService = packageManifestService; } [Obsolete("Please use GetTelemetryReportDataAsync. Will be removed in V15.")] @@ -108,7 +107,7 @@ internal class TelemetryService : ITelemetryService return null; } - IEnumerable manifests = await _pluginConfigurationService.GetPluginConfigurationsAsync(); + IEnumerable manifests = await _packageManifestService.GetPackageManifestsAsync(); return manifests .Where(manifest => manifest.AllowTelemetry) diff --git a/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.CoreServices.cs b/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.CoreServices.cs index 8507d93184..ffbfacf6d6 100644 --- a/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.CoreServices.cs +++ b/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.CoreServices.cs @@ -10,7 +10,6 @@ using Umbraco.Cms.Core.Configuration.Models; using Umbraco.Cms.Core.DependencyInjection; using Umbraco.Cms.Core.DistributedLocking; using Umbraco.Cms.Core.Events; -using Umbraco.Cms.Core.Plugin; using Umbraco.Cms.Core.Handlers; using Umbraco.Cms.Core.HealthChecks.NotificationMethods; using Umbraco.Cms.Core.Hosting; @@ -40,11 +39,11 @@ using Umbraco.Cms.Core.Trees; using Umbraco.Cms.Core.Web; using Umbraco.Cms.Infrastructure.DistributedLocking; using Umbraco.Cms.Infrastructure.Examine; -using Umbraco.Cms.Infrastructure.Plugin; using Umbraco.Cms.Infrastructure.HealthChecks; using Umbraco.Cms.Infrastructure.HostedServices; using Umbraco.Cms.Infrastructure.Install; using Umbraco.Cms.Infrastructure.Mail; +using Umbraco.Cms.Infrastructure.Manifest; using Umbraco.Cms.Infrastructure.Migrations; using Umbraco.Cms.Infrastructure.Migrations.Install; using Umbraco.Cms.Infrastructure.Migrations.PostMigrations; @@ -129,8 +128,8 @@ public static partial class UmbracoBuilderExtensions // register manifest parser, will be injected in collection builders where needed builder.Services.AddSingleton(); - builder.Services.AddSingleton(); - builder.Services.AddSingleton(); + builder.Services.AddSingleton(); + builder.Services.AddSingleton(); // register the manifest filter collection builder (collection is empty by default) builder.ManifestFilters(); diff --git a/src/Umbraco.Infrastructure/Manifest/IPackageManifestReader.cs b/src/Umbraco.Infrastructure/Manifest/IPackageManifestReader.cs new file mode 100644 index 0000000000..806bb3bfb5 --- /dev/null +++ b/src/Umbraco.Infrastructure/Manifest/IPackageManifestReader.cs @@ -0,0 +1,8 @@ +using Umbraco.Cms.Core.Manifest; + +namespace Umbraco.Cms.Infrastructure.Manifest; + +public interface IPackageManifestReader +{ + Task> ReadPackageManifestsAsync(); +} diff --git a/src/Umbraco.Infrastructure/Manifest/LegacyManifestParser.cs b/src/Umbraco.Infrastructure/Manifest/LegacyManifestParser.cs index 76168320b0..916378f201 100644 --- a/src/Umbraco.Infrastructure/Manifest/LegacyManifestParser.cs +++ b/src/Umbraco.Infrastructure/Manifest/LegacyManifestParser.cs @@ -25,7 +25,7 @@ public class LegacyManifestParser : ILegacyManifestParser private readonly IAppPolicyCache _cache; private readonly IDataValueEditorFactory _dataValueEditorFactory; - private readonly IManifestFileProviderFactory _manifestFileProviderFactory; + private readonly ILegacyPackageManifestFileProviderFactory _legacyPackageManifestFileProviderFactory; private readonly LegacyManifestFilterCollection _filters; private readonly IHostingEnvironment _hostingEnvironment; @@ -52,7 +52,7 @@ public class LegacyManifestParser : ILegacyManifestParser ILocalizedTextService localizedTextService, IShortStringHelper shortStringHelper, IDataValueEditorFactory dataValueEditorFactory, - IManifestFileProviderFactory manifestFileProviderFactory) + ILegacyPackageManifestFileProviderFactory legacyPackageManifestFileProviderFactory) { if (appCaches == null) { @@ -70,7 +70,7 @@ public class LegacyManifestParser : ILegacyManifestParser _localizedTextService = localizedTextService; _shortStringHelper = shortStringHelper; _dataValueEditorFactory = dataValueEditorFactory; - _manifestFileProviderFactory = manifestFileProviderFactory; + _legacyPackageManifestFileProviderFactory = legacyPackageManifestFileProviderFactory; } [Obsolete("Use other ctor - Will be removed in Umbraco 13")] @@ -96,7 +96,7 @@ public class LegacyManifestParser : ILegacyManifestParser localizedTextService, shortStringHelper, dataValueEditorFactory, - StaticServiceProvider.Instance.GetRequiredService()) + StaticServiceProvider.Instance.GetRequiredService()) { } @@ -123,7 +123,7 @@ public class LegacyManifestParser : ILegacyManifestParser public IEnumerable GetManifests() { var manifests = new List(); - IFileProvider? manifestFileProvider = _manifestFileProviderFactory.Create(); + IFileProvider? manifestFileProvider = _legacyPackageManifestFileProviderFactory.Create(); if (manifestFileProvider is null) { diff --git a/src/Umbraco.Infrastructure/Plugin/PluginConfigurationReader.cs b/src/Umbraco.Infrastructure/Manifest/PackageManifestReader.cs similarity index 51% rename from src/Umbraco.Infrastructure/Plugin/PluginConfigurationReader.cs rename to src/Umbraco.Infrastructure/Manifest/PackageManifestReader.cs index 9fba461a7a..6ef44b0612 100644 --- a/src/Umbraco.Infrastructure/Plugin/PluginConfigurationReader.cs +++ b/src/Umbraco.Infrastructure/Manifest/PackageManifestReader.cs @@ -2,43 +2,43 @@ using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.Logging; using Umbraco.Cms.Core; -using Umbraco.Cms.Core.Plugin; using Umbraco.Cms.Core.IO; +using Umbraco.Cms.Core.Manifest; using Umbraco.Cms.Core.Routing; using Umbraco.Cms.Core.Serialization; using Umbraco.Extensions; -namespace Umbraco.Cms.Infrastructure.Plugin; +namespace Umbraco.Cms.Infrastructure.Manifest; -internal sealed class PluginConfigurationReader : IPluginConfigurationReader +internal sealed class PackageManifestReader : IPackageManifestReader { - private readonly IPluginConfigurationFileProviderFactory _pluginConfigurationFileProviderFactory; + private readonly IPackageManifestFileProviderFactory _packageManifestFileProviderFactory; private readonly IJsonSerializer _jsonSerializer; - private readonly ILogger _logger; + private readonly ILogger _logger; - public PluginConfigurationReader( - IPluginConfigurationFileProviderFactory pluginConfigurationFileProviderFactory, + public PackageManifestReader( + IPackageManifestFileProviderFactory packageManifestFileProviderFactory, IJsonSerializer jsonSerializer, - ILogger logger) + ILogger logger) { - _pluginConfigurationFileProviderFactory = pluginConfigurationFileProviderFactory; + _packageManifestFileProviderFactory = packageManifestFileProviderFactory; _jsonSerializer = jsonSerializer; _logger = logger; } - public async Task> ReadPluginConfigurationsAsync() + public async Task> ReadPackageManifestsAsync() { - IFileProvider? fileProvider = _pluginConfigurationFileProviderFactory.Create(); + IFileProvider? fileProvider = _packageManifestFileProviderFactory.Create(); if (fileProvider is null) { throw new ArgumentNullException(nameof(fileProvider)); } - IFileInfo[] files = GetAllPluginConfigurationFiles(fileProvider, Constants.SystemDirectories.AppPlugins).ToArray(); - return await ParsePluginConfigurationFiles(files); + IFileInfo[] files = GetAllPackageManifestFiles(fileProvider, Constants.SystemDirectories.AppPlugins).ToArray(); + return await ParsePackageManifestFiles(files); } - private static IEnumerable GetAllPluginConfigurationFiles(IFileProvider fileProvider, string path) + private static IEnumerable GetAllPackageManifestFiles(IFileProvider fileProvider, string path) { const string extensionFileName = "umbraco-package.json"; foreach (IFileInfo fileInfo in fileProvider.GetDirectoryContents(path)) @@ -48,7 +48,7 @@ internal sealed class PluginConfigurationReader : IPluginConfigurationReader var virtualPath = WebPath.Combine(path, fileInfo.Name); // find all extension package configuration files recursively - foreach (IFileInfo nested in GetAllPluginConfigurationFiles(fileProvider, virtualPath)) + foreach (IFileInfo nested in GetAllPackageManifestFiles(fileProvider, virtualPath)) { yield return nested; } @@ -60,9 +60,9 @@ internal sealed class PluginConfigurationReader : IPluginConfigurationReader } } - private async Task> ParsePluginConfigurationFiles(IFileInfo[] files) + private async Task> ParsePackageManifestFiles(IFileInfo[] files) { - var pluginConfigurations = new List(); + var packageManifests = new List(); foreach (IFileInfo fileInfo in files) { string fileContent; @@ -81,18 +81,18 @@ internal sealed class PluginConfigurationReader : IPluginConfigurationReader try { - PluginConfiguration? pluginConfiguration = _jsonSerializer.Deserialize(fileContent); - if (pluginConfiguration != null) + PackageManifest? packageManifest = _jsonSerializer.Deserialize(fileContent); + if (packageManifest != null) { - pluginConfigurations.Add(pluginConfiguration); + packageManifests.Add(packageManifest); } } catch (Exception ex) { - _logger.LogError(ex, "Unable to load plugin configuration file: {FileName}", fileInfo.Name); + _logger.LogError(ex, "Unable to load package manifest file: {FileName}", fileInfo.Name); } } - return pluginConfigurations; + return packageManifests; } } diff --git a/src/Umbraco.Infrastructure/Manifest/PackageManifestService.cs b/src/Umbraco.Infrastructure/Manifest/PackageManifestService.cs new file mode 100644 index 0000000000..dbbac4c5f9 --- /dev/null +++ b/src/Umbraco.Infrastructure/Manifest/PackageManifestService.cs @@ -0,0 +1,24 @@ +using Umbraco.Cms.Core.Cache; +using Umbraco.Cms.Core.Manifest; +using Umbraco.Extensions; + +namespace Umbraco.Cms.Infrastructure.Manifest; + +internal sealed class PackageManifestService : IPackageManifestService +{ + private readonly IPackageManifestReader _packageManifestReader; + private readonly IAppPolicyCache _cache; + + public PackageManifestService(IPackageManifestReader packageManifestReader, AppCaches appCaches) + { + _packageManifestReader = packageManifestReader; + _cache = appCaches.RuntimeCache; + } + + public async Task> GetPackageManifestsAsync() + => await _cache.GetCacheItemAsync( + $"{nameof(PackageManifestService)}-PackageManifests", + async () => await _packageManifestReader.ReadPackageManifestsAsync(), + TimeSpan.FromMinutes(10)) + ?? Array.Empty(); +} diff --git a/src/Umbraco.Infrastructure/Plugin/IPluginConfigurationReader.cs b/src/Umbraco.Infrastructure/Plugin/IPluginConfigurationReader.cs deleted file mode 100644 index f1f012dbe9..0000000000 --- a/src/Umbraco.Infrastructure/Plugin/IPluginConfigurationReader.cs +++ /dev/null @@ -1,8 +0,0 @@ -using Umbraco.Cms.Core.Plugin; - -namespace Umbraco.Cms.Infrastructure.Plugin; - -public interface IPluginConfigurationReader -{ - Task> ReadPluginConfigurationsAsync(); -} diff --git a/src/Umbraco.Infrastructure/Plugin/PluginConfigurationService.cs b/src/Umbraco.Infrastructure/Plugin/PluginConfigurationService.cs deleted file mode 100644 index 06a8dd10fe..0000000000 --- a/src/Umbraco.Infrastructure/Plugin/PluginConfigurationService.cs +++ /dev/null @@ -1,24 +0,0 @@ -using Umbraco.Cms.Core.Cache; -using Umbraco.Cms.Core.Plugin; -using Umbraco.Extensions; - -namespace Umbraco.Cms.Infrastructure.Plugin; - -internal sealed class PluginConfigurationService : IPluginConfigurationService -{ - private readonly IPluginConfigurationReader _pluginConfigurationReader; - private readonly IAppPolicyCache _cache; - - public PluginConfigurationService(IPluginConfigurationReader pluginConfigurationReader, AppCaches appCaches) - { - _pluginConfigurationReader = pluginConfigurationReader; - _cache = appCaches.RuntimeCache; - } - - public async Task> GetPluginConfigurationsAsync() - => await _cache.GetCacheItemAsync( - $"{nameof(PluginConfigurationService)}-PluginConfigurations", - async () => await _pluginConfigurationReader.ReadPluginConfigurationsAsync(), - TimeSpan.FromMinutes(10)) - ?? Array.Empty(); -} diff --git a/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs b/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs index 7efcb3e67d..198f3a2aa2 100644 --- a/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs +++ b/src/Umbraco.Web.Common/DependencyInjection/UmbracoBuilderExtensions.cs @@ -149,9 +149,9 @@ public static partial class UmbracoBuilderExtensions // WebRootFileProviderFactory is just a wrapper around the IWebHostEnvironment.WebRootFileProvider, // therefore no need to register it as singleton - builder.Services.AddSingleton(); + builder.Services.AddSingleton(); builder.Services.AddSingleton(); - builder.Services.AddSingleton(); + builder.Services.AddSingleton(); // Must be added here because DbProviderFactories is netstandard 2.1 so cannot exist in Infra for now builder.Services.AddSingleton(factory => new DbProviderFactoryCreator( diff --git a/src/Umbraco.Web.Common/FileProviders/ContentAndWebRootFileProviderFactory.cs b/src/Umbraco.Web.Common/FileProviders/ContentAndWebRootFileProviderFactory.cs index 64263075d8..22c86e49c2 100644 --- a/src/Umbraco.Web.Common/FileProviders/ContentAndWebRootFileProviderFactory.cs +++ b/src/Umbraco.Web.Common/FileProviders/ContentAndWebRootFileProviderFactory.cs @@ -4,7 +4,7 @@ using Umbraco.Cms.Core.IO; namespace Umbraco.Cms.Web.Common.FileProviders; -public class ContentAndWebRootFileProviderFactory : IManifestFileProviderFactory, IPluginConfigurationFileProviderFactory +public class ContentAndWebRootFileProviderFactory : ILegacyPackageManifestFileProviderFactory, IPackageManifestFileProviderFactory { private readonly IWebHostEnvironment _webHostEnvironment; diff --git a/src/Umbraco.Web.Common/FileProviders/WebRootFileProviderFactory.cs b/src/Umbraco.Web.Common/FileProviders/WebRootFileProviderFactory.cs index 64824dd090..02fe86f6fd 100644 --- a/src/Umbraco.Web.Common/FileProviders/WebRootFileProviderFactory.cs +++ b/src/Umbraco.Web.Common/FileProviders/WebRootFileProviderFactory.cs @@ -4,7 +4,7 @@ using Umbraco.Cms.Core.IO; namespace Umbraco.Cms.Web.Common.FileProviders; -public class WebRootFileProviderFactory : IManifestFileProviderFactory, IGridEditorsConfigFileProviderFactory +public class WebRootFileProviderFactory : ILegacyPackageManifestFileProviderFactory, IGridEditorsConfigFileProviderFactory { private readonly IWebHostEnvironment _webHostEnvironment; diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Manifest/LegacyManifestParserTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Manifest/LegacyManifestParserTests.cs index fbef57a11a..f8f1f49610 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Manifest/LegacyManifestParserTests.cs +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Manifest/LegacyManifestParserTests.cs @@ -48,7 +48,7 @@ public class LegacyManifestParserTests Mock.Of(), Mock.Of(), Mock.Of(), - Mock.Of()); + Mock.Of()); } private LegacyManifestParser _parser; diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Plugin/PluginConfigurationReaderTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Manifest/PackageManifestReaderTests.cs similarity index 62% rename from tests/Umbraco.Tests.UnitTests/Umbraco.Core/Plugin/PluginConfigurationReaderTests.cs rename to tests/Umbraco.Tests.UnitTests/Umbraco.Core/Manifest/PackageManifestReaderTests.cs index 0b7e5c982f..d7d7fb405a 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Plugin/PluginConfigurationReaderTests.cs +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Manifest/PackageManifestReaderTests.cs @@ -6,17 +6,17 @@ using Moq; using NUnit.Framework; using Umbraco.Cms.Core; using Umbraco.Cms.Core.IO; -using Umbraco.Cms.Infrastructure.Plugin; +using Umbraco.Cms.Infrastructure.Manifest; using Umbraco.Cms.Infrastructure.Serialization; -namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Plugin; +namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Manifest; [TestFixture] -public class PluginConfigurationReaderTests +public class PackageManifestReaderTests { - private IPluginConfigurationReader _reader; + private IPackageManifestReader _reader; private Mock _rootDirectoryContentsMock; - private Mock> _loggerMock; + private Mock> _loggerMock; private Mock _fileProviderMock; [SetUp] @@ -27,82 +27,82 @@ public class PluginConfigurationReaderTests _fileProviderMock .Setup(m => m.GetDirectoryContents(Constants.SystemDirectories.AppPlugins)) .Returns(_rootDirectoryContentsMock.Object); - var fileProviderFactoryMock = new Mock(); + var fileProviderFactoryMock = new Mock(); fileProviderFactoryMock.Setup(m => m.Create()).Returns(_fileProviderMock.Object); - _loggerMock = new Mock>(); - _reader = new PluginConfigurationReader(fileProviderFactoryMock.Object, new SystemTextJsonSerializer(), _loggerMock.Object); + _loggerMock = new Mock>(); + _reader = new PackageManifestReader(fileProviderFactoryMock.Object, new SystemTextJsonSerializer(), _loggerMock.Object); } [Test] - public async Task Can_Read_PluginConfigurations_At_Root() + public async Task Can_Read_PackageManifests_At_Root() { _rootDirectoryContentsMock .Setup(f => f.GetEnumerator()) - .Returns(new List { CreatePluginConfigurationFile() }.GetEnumerator()); + .Returns(new List { CreatePackageManifestFile() }.GetEnumerator()); - var result = await _reader.ReadPluginConfigurationsAsync(); + var result = await _reader.ReadPackageManifestsAsync(); Assert.AreEqual(1, result.Count()); var first = result.First(); - Assert.AreEqual("My Plugin Configuration", first.Name); + Assert.AreEqual("My Package", first.Name); Assert.AreEqual("1.2.3", first.Version); Assert.AreEqual(2, first.Extensions.Count()); Assert.IsTrue(first.Extensions.All(e => e is JsonElement)); } [Test] - public async Task Can_Read_PluginConfiguration_In_Root_Directories() + public async Task Can_Read_PackageManifest_In_Root_Directories() { - var plugin1 = CreateDirectoryMock("/my-extension", CreatePluginConfigurationFile(DefaultPluginConfigurationContent("Plugin One"))); - var plugin2 = CreateDirectoryMock("/my-other-extension", CreatePluginConfigurationFile(DefaultPluginConfigurationContent("Plugin Two"))); + var directoryOne = CreateDirectoryMock("/my-extension", CreatePackageManifestFile(DefaultPackageManifestContent("Package One"))); + var directoryTwo = CreateDirectoryMock("/my-other-extension", CreatePackageManifestFile(DefaultPackageManifestContent("Package Two"))); _rootDirectoryContentsMock .Setup(f => f.GetEnumerator()) - .Returns(new List { plugin1, plugin2 }.GetEnumerator()); + .Returns(new List { directoryOne, directoryTwo }.GetEnumerator()); - var result = await _reader.ReadPluginConfigurationsAsync(); + var result = await _reader.ReadPackageManifestsAsync(); Assert.AreEqual(2, result.Count()); - Assert.AreEqual("Plugin One", result.First().Name); - Assert.AreEqual("Plugin Two", result.Last().Name); + Assert.AreEqual("Package One", result.First().Name); + Assert.AreEqual("Package Two", result.Last().Name); } [Test] - public async Task Can_Read_PluginConfigurations_Recursively() + public async Task Can_Read_PackageManifests_Recursively() { - var childFolder = CreateDirectoryMock("/my-parent-folder/my-child-folder", CreatePluginConfigurationFile(DefaultPluginConfigurationContent("Nested Plugin"))); + var childFolder = CreateDirectoryMock("/my-parent-folder/my-child-folder", CreatePackageManifestFile(DefaultPackageManifestContent("Nested Package"))); var parentFolder = CreateDirectoryMock("/my-parent-folder", childFolder); _rootDirectoryContentsMock .Setup(f => f.GetEnumerator()) .Returns(new List { parentFolder }.GetEnumerator()); - var result = await _reader.ReadPluginConfigurationsAsync(); + var result = await _reader.ReadPackageManifestsAsync(); Assert.AreEqual(1, result.Count()); - Assert.AreEqual("Nested Plugin", result.First().Name); + Assert.AreEqual("Nested Package", result.First().Name); } [Test] public async Task Can_Skip_Empty_Directories() { - var pluginFolder = CreateDirectoryMock("/my-plugin-folder", CreatePluginConfigurationFile(DefaultPluginConfigurationContent("My Plugin"))); + var packageFolder = CreateDirectoryMock("/my-package-folder", CreatePackageManifestFile(DefaultPackageManifestContent("My Package"))); var emptyFolder = CreateDirectoryMock("/my-empty-folder"); _rootDirectoryContentsMock .Setup(f => f.GetEnumerator()) - .Returns(new List { emptyFolder, pluginFolder }.GetEnumerator()); + .Returns(new List { emptyFolder, packageFolder }.GetEnumerator()); - var result = await _reader.ReadPluginConfigurationsAsync(); + var result = await _reader.ReadPackageManifestsAsync(); Assert.AreEqual(1, result.Count()); - Assert.AreEqual("My Plugin", result.First().Name); + Assert.AreEqual("My Package", result.First().Name); } [Test] public async Task Can_Skip_Other_Files() { - var pluginFolder = CreateDirectoryMock( - "/my-plugin-folder", + var packageFolder = CreateDirectoryMock( + "/my-package-folder", CreateOtherFile("my.js"), - CreatePluginConfigurationFile(DefaultPluginConfigurationContent("My Plugin"))); + CreatePackageManifestFile(DefaultPackageManifestContent("My Package"))); var otherFolder = CreateDirectoryMock( "/my-empty-folder", CreateOtherFile("some.js"), @@ -110,11 +110,11 @@ public class PluginConfigurationReaderTests _rootDirectoryContentsMock .Setup(f => f.GetEnumerator()) - .Returns(new List { otherFolder, pluginFolder }.GetEnumerator()); + .Returns(new List { otherFolder, packageFolder }.GetEnumerator()); - var result = await _reader.ReadPluginConfigurationsAsync(); + var result = await _reader.ReadPackageManifestsAsync(); Assert.AreEqual(1, result.Count()); - Assert.AreEqual("My Plugin", result.First().Name); + Assert.AreEqual("My Package", result.First().Name); } [Test] @@ -126,12 +126,12 @@ public class PluginConfigurationReaderTests .Setup(f => f.GetEnumerator()) .Returns(folders.GetEnumerator()); - var result = await _reader.ReadPluginConfigurationsAsync(); + var result = await _reader.ReadPackageManifestsAsync(); Assert.AreEqual(0, result.Count()); } [Test] - public async Task Cannot_Read_PluginConfiguration_Without_Name() + public async Task Cannot_Read_PackageManifest_Without_Name() { var content = @"{ ""version"": ""1.2.3"", @@ -145,16 +145,16 @@ public class PluginConfigurationReaderTests }"; _rootDirectoryContentsMock .Setup(f => f.GetEnumerator()) - .Returns(new List { CreatePluginConfigurationFile(content) }.GetEnumerator()); + .Returns(new List { CreatePackageManifestFile(content) }.GetEnumerator()); - var result = await _reader.ReadPluginConfigurationsAsync(); + var result = await _reader.ReadPackageManifestsAsync(); Assert.AreEqual(0, result.Count()); EnsureLogErrorWasCalled(); } [Test] - public async Task Cannot_Read_PluginConfiguration_Without_Extensions() + public async Task Cannot_Read_PackageManifest_Without_Extensions() { var content = @"{ ""name"": ""Something"", @@ -163,9 +163,9 @@ public class PluginConfigurationReaderTests }"; _rootDirectoryContentsMock .Setup(f => f.GetEnumerator()) - .Returns(new List { CreatePluginConfigurationFile(content) }.GetEnumerator()); + .Returns(new List { CreatePackageManifestFile(content) }.GetEnumerator()); - var result = await _reader.ReadPluginConfigurationsAsync(); + var result = await _reader.ReadPackageManifestsAsync(); Assert.AreEqual(0, result.Count()); EnsureLogErrorWasCalled(); @@ -173,13 +173,13 @@ public class PluginConfigurationReaderTests [TestCase("This is not JSON")] [TestCase(@"{""name"": ""invalid-json"", ""version"": ")] - public async Task Cannot_Read_Invalid_PluginConfiguration(string content) + public async Task Cannot_Read_Invalid_PackageManifest(string content) { _rootDirectoryContentsMock .Setup(f => f.GetEnumerator()) - .Returns(new List { CreatePluginConfigurationFile(content) }.GetEnumerator()); + .Returns(new List { CreatePackageManifestFile(content) }.GetEnumerator()); - var result = await _reader.ReadPluginConfigurationsAsync(); + var result = await _reader.ReadPackageManifestsAsync(); Assert.AreEqual(0, result.Count()); EnsureLogErrorWasCalled(); @@ -213,9 +213,9 @@ public class PluginConfigurationReaderTests return fileInfo.Object; } - private IFileInfo CreatePluginConfigurationFile(string? content = null) + private IFileInfo CreatePackageManifestFile(string? content = null) { - content ??= DefaultPluginConfigurationContent(); + content ??= DefaultPackageManifestContent(); var fileInfo = new Mock(); fileInfo.SetupGet(f => f.IsDirectory).Returns(false); @@ -235,7 +235,7 @@ public class PluginConfigurationReaderTests return fileInfo.Object; } - private static string DefaultPluginConfigurationContent(string name = "My Plugin Configuration") + private static string DefaultPackageManifestContent(string name = "My Package") => @"{ ""name"": ""##NAME##"", ""version"": ""1.2.3"", diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Manifest/PackageManifestServiceTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Manifest/PackageManifestServiceTests.cs new file mode 100644 index 0000000000..cca026eb20 --- /dev/null +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Manifest/PackageManifestServiceTests.cs @@ -0,0 +1,67 @@ +using Moq; +using NUnit.Framework; +using Umbraco.Cms.Core.Cache; +using Umbraco.Cms.Core.Manifest; +using Umbraco.Cms.Infrastructure.Manifest; + +namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Manifest; + +[TestFixture] +public class PackageManifestServiceTests +{ + private IPackageManifestService _service; + private Mock _readerMock; + private IAppPolicyCache _runtimeCache; + + [SetUp] + public void SetUp() + { + _readerMock = new Mock(); + _readerMock.Setup(r => r.ReadPackageManifestsAsync()).ReturnsAsync( + new[] + { + new PackageManifest { Name = "Test", Extensions = Array.Empty() } + }); + + _runtimeCache = new ObjectCacheAppCache(); + AppCaches appCaches = new AppCaches( + _runtimeCache, + NoAppCache.Instance, + new IsolatedCaches(type => NoAppCache.Instance)); + + _service = new PackageManifestService(_readerMock.Object, appCaches); + } + + [Test] + public async Task Caches_PackageManifests() + { + var result = await _service.GetPackageManifestsAsync(); + Assert.AreEqual(1, result.Count()); + + var result2 = await _service.GetPackageManifestsAsync(); + Assert.AreEqual(1, result2.Count()); + + var result3 = await _service.GetPackageManifestsAsync(); + Assert.AreEqual(1, result3.Count()); + + _readerMock.Verify(r => r.ReadPackageManifestsAsync(), Times.Exactly(1)); + } + + [Test] + public async Task Reloads_PackageManifest_After_Cache_Clear() + { + var result = await _service.GetPackageManifestsAsync(); + Assert.AreEqual(1, result.Count()); + _runtimeCache.Clear(); + + var result2 = await _service.GetPackageManifestsAsync(); + Assert.AreEqual(1, result2.Count()); + _runtimeCache.Clear(); + + var result3 = await _service.GetPackageManifestsAsync(); + Assert.AreEqual(1, result3.Count()); + _runtimeCache.Clear(); + + _readerMock.Verify(r => r.ReadPackageManifestsAsync(), Times.Exactly(3)); + } +} diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Plugin/PluginConfigurationServiceTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Plugin/PluginConfigurationServiceTests.cs deleted file mode 100644 index 016799f58a..0000000000 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Plugin/PluginConfigurationServiceTests.cs +++ /dev/null @@ -1,67 +0,0 @@ -using Moq; -using NUnit.Framework; -using Umbraco.Cms.Core.Cache; -using Umbraco.Cms.Core.Plugin; -using Umbraco.Cms.Infrastructure.Plugin; - -namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Core.Plugin; - -[TestFixture] -public class PluginConfigurationServiceTests -{ - private IPluginConfigurationService _service; - private Mock _readerMock; - private IAppPolicyCache _runtimeCache; - - [SetUp] - public void SetUp() - { - _readerMock = new Mock(); - _readerMock.Setup(r => r.ReadPluginConfigurationsAsync()).ReturnsAsync( - new[] - { - new PluginConfiguration { Name = "Test", Extensions = Array.Empty() } - }); - - _runtimeCache = new ObjectCacheAppCache(); - AppCaches appCaches = new AppCaches( - _runtimeCache, - NoAppCache.Instance, - new IsolatedCaches(type => NoAppCache.Instance)); - - _service = new PluginConfigurationService(_readerMock.Object, appCaches); - } - - [Test] - public async Task CachesExtensionPackageConfigurations() - { - var result = await _service.GetPluginConfigurationsAsync(); - Assert.AreEqual(1, result.Count()); - - var result2 = await _service.GetPluginConfigurationsAsync(); - Assert.AreEqual(1, result2.Count()); - - var result3 = await _service.GetPluginConfigurationsAsync(); - Assert.AreEqual(1, result3.Count()); - - _readerMock.Verify(r => r.ReadPluginConfigurationsAsync(), Times.Exactly(1)); - } - - [Test] - public async Task ReloadsExtensionPackageConfigurationsAfterCacheClear() - { - var result = await _service.GetPluginConfigurationsAsync(); - Assert.AreEqual(1, result.Count()); - _runtimeCache.Clear(); - - var result2 = await _service.GetPluginConfigurationsAsync(); - Assert.AreEqual(1, result2.Count()); - _runtimeCache.Clear(); - - var result3 = await _service.GetPluginConfigurationsAsync(); - Assert.AreEqual(1, result3.Count()); - _runtimeCache.Clear(); - - _readerMock.Verify(r => r.ReadPluginConfigurationsAsync(), Times.Exactly(3)); - } -} diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Telemetry/TelemetryServiceTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Telemetry/TelemetryServiceTests.cs index f9a69a6aa1..c29590cf0d 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Telemetry/TelemetryServiceTests.cs +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Telemetry/TelemetryServiceTests.cs @@ -1,7 +1,6 @@ using Moq; using NUnit.Framework; using Umbraco.Cms.Core.Configuration; -using Umbraco.Cms.Core.Plugin; using Umbraco.Cms.Core.Manifest; using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Semver; @@ -24,7 +23,7 @@ public class TelemetryServiceTests siteIdentifierServiceMock.Object, usageInformationServiceMock.Object, Mock.Of(), - Mock.Of()); + Mock.Of()); Guid guid; await sut.GetTelemetryReportDataAsync(); @@ -40,7 +39,7 @@ public class TelemetryServiceTests CreateSiteIdentifierService(false), Mock.Of(), Mock.Of(), - Mock.Of()); + Mock.Of()); var result = await sut.GetTelemetryReportDataAsync(); Assert.IsNull(result); @@ -58,7 +57,7 @@ public class TelemetryServiceTests CreateSiteIdentifierService(), Mock.Of(), metricsConsentService.Object, - Mock.Of()); + Mock.Of()); var result = await sut.GetTelemetryReportDataAsync(); @@ -73,12 +72,12 @@ public class TelemetryServiceTests var versionPackageName = "VersionPackage"; var packageVersion = "1.0.0"; var noVersionPackageName = "NoVersionPackage"; - PluginConfiguration[] manifests = + PackageManifest[] manifests = { new() { Name = versionPackageName, Version = packageVersion, Extensions = Array.Empty()}, new() { Name = noVersionPackageName, Extensions = Array.Empty() }, }; - var extensionManifestService = CreateExtensionManifestService(manifests); + var packageManifestService = CreatePackageManifestService(manifests); var metricsConsentService = new Mock(); metricsConsentService.Setup(x => x.GetConsentLevel()).Returns(TelemetryLevel.Basic); var sut = new TelemetryService( @@ -86,7 +85,7 @@ public class TelemetryServiceTests CreateSiteIdentifierService(), Mock.Of(), metricsConsentService.Object, - extensionManifestService); + packageManifestService); var result = await sut.GetTelemetryReportDataAsync(); @@ -108,12 +107,12 @@ public class TelemetryServiceTests public async Task RespectsAllowPackageTelemetry() { var version = CreateUmbracoVersion(9, 1, 1); - PluginConfiguration[] manifests = + PackageManifest[] manifests = { new() { Name = "DoNotTrack", AllowTelemetry = false, Extensions = Array.Empty() }, new() { Name = "TrackingAllowed", AllowTelemetry = true, Extensions = Array.Empty() }, }; - var extensionManifestService = CreateExtensionManifestService(manifests); + var packageManifestService = CreatePackageManifestService(manifests); var metricsConsentService = new Mock(); metricsConsentService.Setup(x => x.GetConsentLevel()).Returns(TelemetryLevel.Basic); var sut = new TelemetryService( @@ -121,7 +120,7 @@ public class TelemetryServiceTests CreateSiteIdentifierService(), Mock.Of(), metricsConsentService.Object, - extensionManifestService); + packageManifestService); var result = await sut.GetTelemetryReportDataAsync(); @@ -133,10 +132,10 @@ public class TelemetryServiceTests }); } - private IPluginConfigurationService CreateExtensionManifestService(IEnumerable manifests) + private IPackageManifestService CreatePackageManifestService(IEnumerable manifests) { - var mock = new Mock(); - mock.Setup(x => x.GetPluginConfigurationsAsync()).Returns(Task.FromResult(manifests)); + var mock = new Mock(); + mock.Setup(x => x.GetPackageManifestsAsync()).Returns(Task.FromResult(manifests)); return mock.Object; }