Review changes and fixes

This commit is contained in:
kjac
2023-02-28 08:36:48 +01:00
parent 459e6f5421
commit 0f95dbbfa6
8 changed files with 39 additions and 23 deletions

View File

@@ -0,0 +1,10 @@
namespace Umbraco.Cms.Core.Configuration.Models;
/// <summary>
/// Typed configuration options for package manifest settings.
/// </summary>
[UmbracoOptions(Constants.Configuration.ConfigGlobal)]
public class PackageManifestSettings
{
public TimeSpan CacheTimeout { get; set; } = TimeSpan.FromMinutes(10);
}

View File

@@ -62,6 +62,7 @@ public static partial class Constants
public const string ConfigHelpPage = ConfigPrefix + "HelpPage";
public const string ConfigInstallDefaultData = ConfigPrefix + "InstallDefaultData";
public const string ConfigDataTypes = ConfigPrefix + "DataTypes";
public const string ConfigPackageManifests = ConfigPrefix + "PackageManifests";
public static class NamedOptions
{

View File

@@ -85,7 +85,8 @@ public static partial class UmbracoBuilderExtensions
.AddUmbracoOptions<PackageMigrationSettings>()
.AddUmbracoOptions<ContentDashboardSettings>()
.AddUmbracoOptions<HelpPageSettings>()
.AddUmbracoOptions<DataTypesSettings>();
.AddUmbracoOptions<DataTypesSettings>()
.AddUmbracoOptions<PackageManifestSettings>();
// Configure connection string and ensure it's updated when the configuration changes
builder.Services.AddSingleton<IConfigureOptions<ConnectionStrings>, ConfigureConnectionStrings>();

View File

@@ -128,7 +128,7 @@ public static partial class UmbracoBuilderExtensions
// register manifest parser, will be injected in collection builders where needed
builder.Services.AddSingleton<ILegacyManifestParser, LegacyManifestParser>();
builder.Services.AddSingleton<IPackageManifestReader, PackageManifestReader>();
builder.Services.AddSingleton<IPackageManifestReader, AppPluginsFileProviderPackageManifestReader>();
builder.Services.AddSingleton<IPackageManifestService, PackageManifestService>();
// register the manifest filter collection builder (collection is empty by default)

View File

@@ -14,12 +14,12 @@ internal sealed class AppPluginsFileProviderPackageManifestReader : IPackageMani
{
private readonly IPackageManifestFileProviderFactory _packageManifestFileProviderFactory;
private readonly IJsonSerializer _jsonSerializer;
private readonly ILogger<PackageManifestReader> _logger;
private readonly ILogger<AppPluginsFileProviderPackageManifestReader> _logger;
public PackageManifestReader(
public AppPluginsFileProviderPackageManifestReader(
IPackageManifestFileProviderFactory packageManifestFileProviderFactory,
IJsonSerializer jsonSerializer,
ILogger<PackageManifestReader> logger)
ILogger<AppPluginsFileProviderPackageManifestReader> logger)
{
_packageManifestFileProviderFactory = packageManifestFileProviderFactory;
_jsonSerializer = jsonSerializer;
@@ -90,6 +90,7 @@ internal sealed class AppPluginsFileProviderPackageManifestReader : IPackageMani
catch (Exception ex)
{
_logger.LogError(ex, "Unable to load package manifest file: {FileName}", fileInfo.Name);
throw;
}
}

View File

@@ -1,4 +1,6 @@
using Umbraco.Cms.Core.Cache;
using Microsoft.Extensions.Options;
using Umbraco.Cms.Core.Cache;
using Umbraco.Cms.Core.Configuration.Models;
using Umbraco.Cms.Core.Manifest;
using Umbraco.Extensions;
@@ -8,10 +10,15 @@ internal sealed class PackageManifestService : IPackageManifestService
{
private readonly IEnumerable<IPackageManifestReader> _packageManifestReaders;
private readonly IAppPolicyCache _cache;
private readonly PackageManifestSettings _packageManifestSettings;
public PackageManifestService(IEnumerable<IPackageManifestReader> packageManifestReaders, AppCaches appCaches)
public PackageManifestService(
IEnumerable<IPackageManifestReader> packageManifestReaders,
AppCaches appCaches,
IOptions<PackageManifestSettings> packageManifestSettings)
{
_packageManifestReaders = packageManifestReaders;
_packageManifestSettings = packageManifestSettings.Value;
_cache = appCaches.RuntimeCache;
}
@@ -20,13 +27,13 @@ internal sealed class PackageManifestService : IPackageManifestService
$"{nameof(PackageManifestService)}-PackageManifests",
async () =>
{
var tasks = _packageManifestReaders
Task<IEnumerable<PackageManifest>>[] tasks = _packageManifestReaders
.Select(x => x.ReadPackageManifestsAsync())
.ToArray();
await Task.WhenAll(tasks);
return tasks.SelectMany(x => x.Result);
},
TimeSpan.FromMinutes(10))
_packageManifestSettings.CacheTimeout)
?? Array.Empty<PackageManifest>();
}

View File

@@ -16,7 +16,7 @@ public class PackageManifestReaderTests
{
private IPackageManifestReader _reader;
private Mock<IDirectoryContents> _rootDirectoryContentsMock;
private Mock<ILogger<PackageManifestReader>> _loggerMock;
private Mock<ILogger<AppPluginsFileProviderPackageManifestReader>> _loggerMock;
private Mock<IFileProvider> _fileProviderMock;
[SetUp]
@@ -30,8 +30,8 @@ public class PackageManifestReaderTests
var fileProviderFactoryMock = new Mock<IPackageManifestFileProviderFactory>();
fileProviderFactoryMock.Setup(m => m.Create()).Returns(_fileProviderMock.Object);
_loggerMock = new Mock<ILogger<PackageManifestReader>>();
_reader = new PackageManifestReader(fileProviderFactoryMock.Object, new SystemTextJsonSerializer(), _loggerMock.Object);
_loggerMock = new Mock<ILogger<AppPluginsFileProviderPackageManifestReader>>();
_reader = new AppPluginsFileProviderPackageManifestReader(fileProviderFactoryMock.Object, new SystemTextJsonSerializer(), _loggerMock.Object);
}
[Test]
@@ -147,9 +147,7 @@ public class PackageManifestReaderTests
.Setup(f => f.GetEnumerator())
.Returns(new List<IFileInfo> { CreatePackageManifestFile(content) }.GetEnumerator());
var result = await _reader.ReadPackageManifestsAsync();
Assert.AreEqual(0, result.Count());
Assert.ThrowsAsync<JsonException>(() => _reader.ReadPackageManifestsAsync());
EnsureLogErrorWasCalled();
}
@@ -165,9 +163,7 @@ public class PackageManifestReaderTests
.Setup(f => f.GetEnumerator())
.Returns(new List<IFileInfo> { CreatePackageManifestFile(content) }.GetEnumerator());
var result = await _reader.ReadPackageManifestsAsync();
Assert.AreEqual(0, result.Count());
Assert.ThrowsAsync<JsonException>(() => _reader.ReadPackageManifestsAsync());
EnsureLogErrorWasCalled();
}
@@ -179,9 +175,7 @@ public class PackageManifestReaderTests
.Setup(f => f.GetEnumerator())
.Returns(new List<IFileInfo> { CreatePackageManifestFile(content) }.GetEnumerator());
var result = await _reader.ReadPackageManifestsAsync();
Assert.AreEqual(0, result.Count());
Assert.ThrowsAsync<JsonException>(() => _reader.ReadPackageManifestsAsync());
EnsureLogErrorWasCalled();
}

View File

@@ -1,6 +1,8 @@
using Moq;
using Microsoft.Extensions.Options;
using Moq;
using NUnit.Framework;
using Umbraco.Cms.Core.Cache;
using Umbraco.Cms.Core.Configuration.Models;
using Umbraco.Cms.Core.Manifest;
using Umbraco.Cms.Infrastructure.Manifest;
@@ -29,7 +31,7 @@ public class PackageManifestServiceTests
NoAppCache.Instance,
new IsolatedCaches(type => NoAppCache.Instance));
_service = new PackageManifestService(_readerMock.Object, appCaches);
_service = new PackageManifestService(new[] { _readerMock.Object }, appCaches, new OptionsWrapper<PackageManifestSettings>(new PackageManifestSettings()));
}
[Test]