From b7d5fd4b268ed9a2d3b87a26037c4fe2417e6e8c Mon Sep 17 00:00:00 2001 From: Bjarke Berg Date: Tue, 2 Nov 2021 09:18:15 +0100 Subject: [PATCH] Cleanup and fixed tests --- src/Umbraco.Core/Models/ContentType.cs | 2 +- .../ContentVersionCleanupPolicySettings.cs | 2 +- src/Umbraco.Core/Models/IContentType.cs | 18 +++-- .../Mapping/ContentTypeMapDefinition.cs | 34 ++++++--- .../IDocumentVersionRepository.cs | 4 +- .../Services/IContentVersionCleanupPolicy.cs | 3 +- .../Services/IContentVersionService.cs | 1 - .../UmbracoBuilder.Repositories.cs | 1 + .../UmbracoBuilder.Services.cs | 3 +- .../HostedServices/ContentVersionCleanup.cs | 11 +-- .../Migrations/Upgrade/UmbracoPlan.cs | 2 +- .../AddContentVersionCleanupFeature.cs | 2 +- .../Implement/ContentTypeRepository.cs | 20 +++-- .../Implement/DocumentVersionRepository.cs | 3 +- .../Implement/ContentVersionService.cs | 2 - .../DefaultContentVersionCleanupPolicy.cs | 7 +- .../DocumentVersionRepositoryTest.cs | 21 +++-- .../ContentVersionCleanupServiceTest.cs | 9 ++- .../Scheduling/ContentVersionCleanupTest.cs | 53 ++++++++++--- .../DefaultContentVersionCleanupPolicyTest.cs | 76 ++++++++++++++----- 20 files changed, 183 insertions(+), 91 deletions(-) diff --git a/src/Umbraco.Core/Models/ContentType.cs b/src/Umbraco.Core/Models/ContentType.cs index f4ff7bccf785..a2357e21ef49 100644 --- a/src/Umbraco.Core/Models/ContentType.cs +++ b/src/Umbraco.Core/Models/ContentType.cs @@ -13,7 +13,7 @@ namespace Umbraco.Cms.Core.Models /// [Serializable] [DataContract(IsReference = true)] - public class ContentType : ContentTypeCompositionBase, IContentType + public class ContentType : ContentTypeCompositionBase, IContentTypeWithHistoryCleanup { public const bool SupportsPublishingConst = true; diff --git a/src/Umbraco.Core/Models/ContentVersionCleanupPolicySettings.cs b/src/Umbraco.Core/Models/ContentVersionCleanupPolicySettings.cs index 5e3f319e6a73..b23e6c95fae5 100644 --- a/src/Umbraco.Core/Models/ContentVersionCleanupPolicySettings.cs +++ b/src/Umbraco.Core/Models/ContentVersionCleanupPolicySettings.cs @@ -1,6 +1,6 @@ using System; -namespace Umbraco.Core.Models +namespace Umbraco.Cms.Core.Models { public class ContentVersionCleanupPolicySettings { diff --git a/src/Umbraco.Core/Models/IContentType.cs b/src/Umbraco.Core/Models/IContentType.cs index cf4a347112d1..4025239a3fde 100644 --- a/src/Umbraco.Core/Models/IContentType.cs +++ b/src/Umbraco.Core/Models/IContentType.cs @@ -1,8 +1,19 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using Umbraco.Cms.Core.Models.ContentEditing; namespace Umbraco.Cms.Core.Models { + [Obsolete("This will be merged into IContentType in Umbraco 10")] + public interface IContentTypeWithHistoryCleanup : IContentType + { + /// + /// Gets or Sets the history cleanup configuration + /// + HistoryCleanup HistoryCleanup { get; set; } + } + + /// /// Defines a ContentType, which Content is based on /// @@ -23,11 +34,6 @@ public interface IContentType : IContentTypeComposition /// IEnumerable AllowedTemplates { get; set; } - /// - /// Gets or Sets the history cleanup configuration - /// - HistoryCleanup HistoryCleanup { get; set; } - /// /// Determines if AllowedTemplates contains templateId /// diff --git a/src/Umbraco.Core/Models/Mapping/ContentTypeMapDefinition.cs b/src/Umbraco.Core/Models/Mapping/ContentTypeMapDefinition.cs index 3281701c84d3..debaa976c510 100644 --- a/src/Umbraco.Core/Models/Mapping/ContentTypeMapDefinition.cs +++ b/src/Umbraco.Core/Models/Mapping/ContentTypeMapDefinition.cs @@ -45,9 +45,10 @@ public ContentTypeMapDefinition(CommonMapper commonMapper, PropertyEditorCollect IMemberTypeService memberTypeService, ILoggerFactory loggerFactory, IShortStringHelper shortStringHelper, IOptions globalSettings, IHostingEnvironment hostingEnvironment) - : this(commonMapper, propertyEditors, dataTypeService, fileService, contentTypeService, mediaTypeService, memberTypeService, loggerFactory, shortStringHelper, globalSettings, hostingEnvironment, StaticServiceProvider.Instance.GetRequiredService>()) + : this(commonMapper, propertyEditors, dataTypeService, fileService, contentTypeService, mediaTypeService, + memberTypeService, loggerFactory, shortStringHelper, globalSettings, hostingEnvironment, + StaticServiceProvider.Instance.GetRequiredService>()) { - } public ContentTypeMapDefinition(CommonMapper commonMapper, PropertyEditorCollection propertyEditors, @@ -130,7 +131,10 @@ private void Map(DocumentTypeSave source, IContentType target, MapperContext con MapSaveToTypeBase(source, target, context); MapComposition(source, target, alias => _contentTypeService.Get(alias)); - target.HistoryCleanup = source.HistoryCleanup; + if (target is IContentTypeWithHistoryCleanup targetWithHistoryCleanup) + { + targetWithHistoryCleanup.HistoryCleanup = source.HistoryCleanup; + } target.AllowedTemplates = source.AllowedTemplates .Where(x => x != null) @@ -177,15 +181,23 @@ private void Map(IContentType source, DocumentTypeDisplay target, MapperContext { MapTypeToDisplayBase(source, target); - target.HistoryCleanup = new HistoryCleanupViewModel + if (source is IContentTypeWithHistoryCleanup sourceWithHistoryCleanup) { - PreventCleanup = source.HistoryCleanup.PreventCleanup, - KeepAllVersionsNewerThanDays = source.HistoryCleanup.KeepAllVersionsNewerThanDays, - KeepLatestVersionPerDayForDays = source.HistoryCleanup.KeepLatestVersionPerDayForDays, - GlobalKeepAllVersionsNewerThanDays = _contentSettings.ContentVersionCleanupPolicy.KeepAllVersionsNewerThanDays, - GlobalKeepLatestVersionPerDayForDays = _contentSettings.ContentVersionCleanupPolicy.KeepLatestVersionPerDayForDays, - GlobalEnableCleanup = _contentSettings.ContentVersionCleanupPolicy.EnableCleanup - }; + target.HistoryCleanup = new HistoryCleanupViewModel + { + PreventCleanup = sourceWithHistoryCleanup.HistoryCleanup.PreventCleanup, + KeepAllVersionsNewerThanDays = + sourceWithHistoryCleanup.HistoryCleanup.KeepAllVersionsNewerThanDays, + KeepLatestVersionPerDayForDays = + sourceWithHistoryCleanup.HistoryCleanup.KeepLatestVersionPerDayForDays, + GlobalKeepAllVersionsNewerThanDays = + _contentSettings.ContentVersionCleanupPolicy.KeepAllVersionsNewerThanDays, + GlobalKeepLatestVersionPerDayForDays = + _contentSettings.ContentVersionCleanupPolicy.KeepLatestVersionPerDayForDays, + GlobalEnableCleanup = _contentSettings.ContentVersionCleanupPolicy.EnableCleanup + }; + } + target.AllowCultureVariant = source.VariesByCulture(); target.AllowSegmentVariant = source.VariesBySegment(); diff --git a/src/Umbraco.Core/Persistence/Repositories/IDocumentVersionRepository.cs b/src/Umbraco.Core/Persistence/Repositories/IDocumentVersionRepository.cs index bcdf4f8aebeb..8175ba0d99a3 100644 --- a/src/Umbraco.Core/Persistence/Repositories/IDocumentVersionRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/IDocumentVersionRepository.cs @@ -1,9 +1,7 @@ using System.Collections.Generic; using Umbraco.Cms.Core.Models; -using Umbraco.Cms.Core.Persistence; -using Umbraco.Core.Models; -namespace Umbraco.Core.Persistence.Repositories +namespace Umbraco.Cms.Core.Persistence.Repositories { public interface IDocumentVersionRepository : IRepository { diff --git a/src/Umbraco.Core/Services/IContentVersionCleanupPolicy.cs b/src/Umbraco.Core/Services/IContentVersionCleanupPolicy.cs index 43718c801ffd..d2f70206b087 100644 --- a/src/Umbraco.Core/Services/IContentVersionCleanupPolicy.cs +++ b/src/Umbraco.Core/Services/IContentVersionCleanupPolicy.cs @@ -1,9 +1,8 @@ using System; using System.Collections.Generic; using Umbraco.Cms.Core.Models; -using Umbraco.Core.Models; -namespace Umbraco.Core.Services +namespace Umbraco.Cms.Core.Services { /// /// Used to filter historic content versions for cleanup. diff --git a/src/Umbraco.Core/Services/IContentVersionService.cs b/src/Umbraco.Core/Services/IContentVersionService.cs index 656fd899348d..882618780fe6 100644 --- a/src/Umbraco.Core/Services/IContentVersionService.cs +++ b/src/Umbraco.Core/Services/IContentVersionService.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using Umbraco.Cms.Core.Models; -using Umbraco.Core.Models; namespace Umbraco.Cms.Core.Services { diff --git a/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.Repositories.cs b/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.Repositories.cs index 360e7859068c..d3ebb28f9c53 100644 --- a/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.Repositories.cs +++ b/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.Repositories.cs @@ -25,6 +25,7 @@ internal static IUmbracoBuilder AddRepositories(this IUmbracoBuilder builder) builder.Services.AddUnique(); builder.Services.AddUnique(); builder.Services.AddUnique(); + builder.Services.AddUnique(); builder.Services.AddUnique(); builder.Services.AddUnique(); builder.Services.AddUnique(); diff --git a/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.Services.cs b/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.Services.cs index c7a66373f7bf..661ed9329292 100644 --- a/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.Services.cs +++ b/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.Services.cs @@ -6,7 +6,6 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core; using Umbraco.Cms.Core.Cache; -using Umbraco.Cms.Core.Configuration; using Umbraco.Cms.Core.Configuration.Models; using Umbraco.Cms.Core.DependencyInjection; using Umbraco.Cms.Core.Hosting; @@ -16,6 +15,7 @@ using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Services.Implement; using Umbraco.Cms.Infrastructure.Packaging; +using Umbraco.Cms.Infrastructure.Services.Implement; using Umbraco.Extensions; namespace Umbraco.Cms.Infrastructure.DependencyInjection @@ -44,6 +44,7 @@ internal static IUmbracoBuilder AddServices(this IUmbracoBuilder builder) builder.Services.AddUnique(); builder.Services.AddUnique(); builder.Services.AddUnique(); + builder.Services.AddUnique(); builder.Services.AddUnique(); builder.Services.AddUnique(); builder.Services.AddUnique(); diff --git a/src/Umbraco.Infrastructure/HostedServices/ContentVersionCleanup.cs b/src/Umbraco.Infrastructure/HostedServices/ContentVersionCleanup.cs index 6c97f7c80fd8..f486275d7625 100644 --- a/src/Umbraco.Infrastructure/HostedServices/ContentVersionCleanup.cs +++ b/src/Umbraco.Infrastructure/HostedServices/ContentVersionCleanup.cs @@ -7,7 +7,6 @@ using Umbraco.Cms.Core.Runtime; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Sync; -using Umbraco.Core.Services; namespace Umbraco.Cms.Infrastructure.HostedServices { @@ -18,10 +17,10 @@ public class ContentVersionCleanup : RecurringHostedServiceBase { private readonly IRuntimeState _runtimeState; private readonly ILogger _logger; + private readonly IOptionsMonitor _settingsMonitor; private readonly IContentVersionService _service; private readonly IMainDom _mainDom; private readonly IServerRoleAccessor _serverRoleAccessor; - private ContentVersionCleanupPolicySettings _settings; /// /// Initializes a new instance of the class. @@ -29,7 +28,7 @@ public class ContentVersionCleanup : RecurringHostedServiceBase public ContentVersionCleanup( IRuntimeState runtimeState, ILogger logger, - IOptionsMonitor settings, + IOptionsMonitor settingsMonitor, IContentVersionService service, IMainDom mainDom, IServerRoleAccessor serverRoleAccessor) @@ -37,19 +36,17 @@ public ContentVersionCleanup( { _runtimeState = runtimeState; _logger = logger; - _settings = settings.CurrentValue.ContentVersionCleanupPolicy; + _settingsMonitor = settingsMonitor; _service = service; _mainDom = mainDom; _serverRoleAccessor = serverRoleAccessor; - - settings.OnChange(x => _settings = x.ContentVersionCleanupPolicy); } /// public override Task PerformExecuteAsync(object state) { // Globally disabled by feature flag - if (!_settings.EnableCleanup) + if (!_settingsMonitor.CurrentValue.ContentVersionCleanupPolicy.EnableCleanup) { _logger.LogInformation("ContentVersionCleanup task will not run as it has been globally disabled via configuration"); return Task.CompletedTask; diff --git a/src/Umbraco.Infrastructure/Migrations/Upgrade/UmbracoPlan.cs b/src/Umbraco.Infrastructure/Migrations/Upgrade/UmbracoPlan.cs index 2e33ab044442..76a67fd33078 100644 --- a/src/Umbraco.Infrastructure/Migrations/Upgrade/UmbracoPlan.cs +++ b/src/Umbraco.Infrastructure/Migrations/Upgrade/UmbracoPlan.cs @@ -13,7 +13,7 @@ using Umbraco.Cms.Infrastructure.Migrations.Upgrade.V_8_7_0; using Umbraco.Cms.Infrastructure.Migrations.Upgrade.V_8_9_0; using Umbraco.Cms.Infrastructure.Migrations.Upgrade.V_9_0_0; -using Umbraco.Core.Migrations.Upgrade.V_9_1_0; +using Umbraco.Cms.Infrastructure.Migrations.Upgrade.V_9_1_0; using Umbraco.Extensions; namespace Umbraco.Cms.Infrastructure.Migrations.Upgrade diff --git a/src/Umbraco.Infrastructure/Migrations/Upgrade/V_9_1_0/AddContentVersionCleanupFeature.cs b/src/Umbraco.Infrastructure/Migrations/Upgrade/V_9_1_0/AddContentVersionCleanupFeature.cs index b9729e53f034..aa0d4472e813 100644 --- a/src/Umbraco.Infrastructure/Migrations/Upgrade/V_9_1_0/AddContentVersionCleanupFeature.cs +++ b/src/Umbraco.Infrastructure/Migrations/Upgrade/V_9_1_0/AddContentVersionCleanupFeature.cs @@ -2,7 +2,7 @@ using Umbraco.Cms.Infrastructure.Persistence.Dtos; using Umbraco.Extensions; -namespace Umbraco.Core.Migrations.Upgrade.V_9_1_0 +namespace Umbraco.Cms.Infrastructure.Migrations.Upgrade.V_9_1_0 { class AddContentVersionCleanupFeature : MigrationBase { diff --git a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentTypeRepository.cs b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentTypeRepository.cs index 9a1ea90f6012..9fa9207f53f0 100644 --- a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentTypeRepository.cs +++ b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentTypeRepository.cs @@ -296,15 +296,19 @@ protected override void PersistUpdatedItem(IContentType entity) private void PersistHistoryCleanup(IContentType entity) { - ContentVersionCleanupPolicyDto dto = new ContentVersionCleanupPolicyDto() + if (entity is IContentTypeWithHistoryCleanup entityWithHistoryCleanup) { - ContentTypeId = entity.Id, - Updated = DateTime.Now, - PreventCleanup = entity.HistoryCleanup.PreventCleanup, - KeepAllVersionsNewerThanDays = entity.HistoryCleanup.KeepAllVersionsNewerThanDays, - KeepLatestVersionPerDayForDays = entity.HistoryCleanup.KeepLatestVersionPerDayForDays, - }; - Database.InsertOrUpdate(dto); + ContentVersionCleanupPolicyDto dto = new ContentVersionCleanupPolicyDto() + { + ContentTypeId = entity.Id, + Updated = DateTime.Now, + PreventCleanup = entityWithHistoryCleanup.HistoryCleanup.PreventCleanup, + KeepAllVersionsNewerThanDays = entityWithHistoryCleanup.HistoryCleanup.KeepAllVersionsNewerThanDays, + KeepLatestVersionPerDayForDays = entityWithHistoryCleanup.HistoryCleanup.KeepLatestVersionPerDayForDays, + }; + Database.InsertOrUpdate(dto); + } + } } } diff --git a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/DocumentVersionRepository.cs b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/DocumentVersionRepository.cs index 1067637f401c..5040ee5d7a70 100644 --- a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/DocumentVersionRepository.cs +++ b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/DocumentVersionRepository.cs @@ -3,10 +3,9 @@ using System.Linq; using Umbraco.Cms.Core; using Umbraco.Cms.Core.Models; +using Umbraco.Cms.Core.Persistence.Repositories; using Umbraco.Cms.Core.Scoping; using Umbraco.Cms.Infrastructure.Persistence.Dtos; -using Umbraco.Core.Models; -using Umbraco.Core.Persistence.Repositories; using Umbraco.Extensions; namespace Umbraco.Cms.Infrastructure.Persistence.Repositories.Implement diff --git a/src/Umbraco.Infrastructure/Services/Implement/ContentVersionService.cs b/src/Umbraco.Infrastructure/Services/Implement/ContentVersionService.cs index c8ce9ce707a7..40c12a1fe53c 100644 --- a/src/Umbraco.Infrastructure/Services/Implement/ContentVersionService.cs +++ b/src/Umbraco.Infrastructure/Services/Implement/ContentVersionService.cs @@ -7,8 +7,6 @@ using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Core.Persistence.Repositories; using Umbraco.Cms.Core.Scoping; -using Umbraco.Core.Persistence.Repositories; -using Umbraco.Core.Services; using Umbraco.Extensions; namespace Umbraco.Cms.Core.Services.Implement diff --git a/src/Umbraco.Infrastructure/Services/Implement/DefaultContentVersionCleanupPolicy.cs b/src/Umbraco.Infrastructure/Services/Implement/DefaultContentVersionCleanupPolicy.cs index 755d30306ba2..383554c34c68 100644 --- a/src/Umbraco.Infrastructure/Services/Implement/DefaultContentVersionCleanupPolicy.cs +++ b/src/Umbraco.Infrastructure/Services/Implement/DefaultContentVersionCleanupPolicy.cs @@ -4,11 +4,10 @@ using Microsoft.Extensions.Options; using Umbraco.Cms.Core.Configuration.Models; using Umbraco.Cms.Core.Models; +using Umbraco.Cms.Core.Persistence.Repositories; using Umbraco.Cms.Core.Scoping; -using Umbraco.Core.Models; -using Umbraco.Core.Persistence.Repositories; -using Umbraco.Core.Services; -using ContentVersionCleanupPolicySettings = Umbraco.Core.Models.ContentVersionCleanupPolicySettings; +using Umbraco.Cms.Core.Services; +using ContentVersionCleanupPolicySettings = Umbraco.Cms.Core.Models.ContentVersionCleanupPolicySettings; namespace Umbraco.Cms.Infrastructure.Services.Implement { diff --git a/tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/DocumentVersionRepositoryTest.cs b/tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/DocumentVersionRepositoryTest.cs index 6ac6fd406069..1649aa2fc6bd 100644 --- a/tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/DocumentVersionRepositoryTest.cs +++ b/tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/DocumentVersionRepositoryTest.cs @@ -1,6 +1,7 @@ using System.Diagnostics; using System.Linq; using NUnit.Framework; +using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Infrastructure.Persistence.Dtos; using Umbraco.Cms.Infrastructure.Persistence.Repositories.Implement; @@ -25,8 +26,11 @@ public class DocumentVersionRepositoryTest : UmbracoIntegrationTest [Test] public void GetDocumentVersionsEligibleForCleanup_Always_ExcludesActiveVersions() { - var contentType = ContentTypeBuilder.CreateSimpleContentType("umbTextpage", "Textpage"); - FileService.SaveTemplate(contentType.DefaultTemplate); + Template template = TemplateBuilder.CreateTextPageTemplate(); + FileService.SaveTemplate(template); + + var contentType = ContentTypeBuilder.CreateSimpleContentType("umbTextpage", "Textpage", defaultTemplateId: template.Id); + ContentTypeService.Save(contentType); ContentTypeService.Save(contentType); var content = ContentBuilder.CreateSimpleContent(contentType); @@ -53,8 +57,11 @@ public void GetDocumentVersionsEligibleForCleanup_Always_ExcludesActiveVersions( [Test] public void GetDocumentVersionsEligibleForCleanup_Always_ExcludesPinnedVersions() { - var contentType = ContentTypeBuilder.CreateSimpleContentType("umbTextpage", "Textpage"); - FileService.SaveTemplate(contentType.DefaultTemplate); + Template template = TemplateBuilder.CreateTextPageTemplate(); + FileService.SaveTemplate(template); + + var contentType = ContentTypeBuilder.CreateSimpleContentType("umbTextpage", "Textpage", defaultTemplateId: template.Id); + ContentTypeService.Save(contentType); ContentTypeService.Save(contentType); var content = ContentBuilder.CreateSimpleContent(contentType); @@ -92,8 +99,10 @@ public void GetDocumentVersionsEligibleForCleanup_Always_ExcludesPinnedVersions( [Test] public void DeleteVersions_Always_DeletesSpecifiedVersions() { - var contentType = ContentTypeBuilder.CreateSimpleContentType("umbTextpage", "Textpage"); - FileService.SaveTemplate(contentType.DefaultTemplate); + Template template = TemplateBuilder.CreateTextPageTemplate(); + FileService.SaveTemplate(template); + + var contentType = ContentTypeBuilder.CreateSimpleContentType("umbTextpage", "Textpage", defaultTemplateId: template.Id); ContentTypeService.Save(contentType); var content = ContentBuilder.CreateSimpleContent(contentType); diff --git a/tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/ContentVersionCleanupServiceTest.cs b/tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/ContentVersionCleanupServiceTest.cs index 1a03482fb6c0..0f7ec616f7bd 100644 --- a/tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/ContentVersionCleanupServiceTest.cs +++ b/tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Services/ContentVersionCleanupServiceTest.cs @@ -20,6 +20,7 @@ internal class ContentVersionCleanupServiceTest : UmbracoIntegrationTest public IContentTypeService ContentTypeService => GetRequiredService(); public IContentService ContentService => GetRequiredService(); + public IContentVersionService ContentVersionService => GetRequiredService(); /// /// This is covered by the unit tests, but nice to know it deletes on infra. @@ -33,8 +34,10 @@ public void PerformContentVersionCleanup_WithNoKeepPeriods_DeletesEverythingExce // With 200K Versions // With 11M Property data - ContentType contentTypeA = ContentTypeBuilder.CreateSimpleContentType("contentTypeA", "contentTypeA"); - FileService.SaveTemplate(contentTypeA.DefaultTemplate); + Template template = TemplateBuilder.CreateTextPageTemplate(); + FileService.SaveTemplate(template); + + ContentType contentTypeA = ContentTypeBuilder.CreateSimpleContentType("contentTypeA", "contentTypeA", defaultTemplateId: template.Id); ContentTypeService.Save(contentTypeA); Content content = ContentBuilder.CreateSimpleContent(contentTypeA); @@ -53,7 +56,7 @@ public void PerformContentVersionCleanup_WithNoKeepPeriods_DeletesEverythingExce // Kill all historic InsertCleanupPolicy(contentTypeA, 0, 0); - ((IContentVersionService)ContentService).PerformContentVersionCleanup(DateTime.Now.AddHours(1)); + ContentVersionService.PerformContentVersionCleanup(DateTime.Now.AddHours(1)); Report after = GetReport(); diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Scheduling/ContentVersionCleanupTest.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Scheduling/ContentVersionCleanupTest.cs index 040c5059b072..ad06bc2683af 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Scheduling/ContentVersionCleanupTest.cs +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Scheduling/ContentVersionCleanupTest.cs @@ -19,15 +19,20 @@ class ContentVersionCleanupTest { [Test, AutoMoqData] public async Task ContentVersionCleanup_WhenNotEnabled_DoesNotCleanupWillRepeat( - [Frozen] Mock> settings, + [Frozen] Mock> settings, [Frozen] Mock mainDom, [Frozen] Mock serverRoleAccessor, [Frozen] Mock runtimeState, [Frozen] Mock cleanupService, ContentVersionCleanup sut) { - settings.Setup(x => x.Value.ContentVersionCleanupPolicy.EnableCleanup).Returns(false); - + settings.Setup(x => x.CurrentValue).Returns(new ContentSettings() + { + ContentVersionCleanupPolicy = new ContentVersionCleanupPolicySettings() + { + EnableCleanup = false + } + }); runtimeState.Setup(x => x.Level).Returns(RuntimeLevel.Run); mainDom.Setup(x => x.IsMainDom).Returns(true); serverRoleAccessor.Setup(x => x.CurrentServerRole).Returns(ServerRole.SchedulingPublisher); @@ -39,14 +44,20 @@ public async Task ContentVersionCleanup_WhenNotEnabled_DoesNotCleanupWillRepeat( [Test, AutoMoqData] public async Task ContentVersionCleanup_RuntimeLevelNotRun_DoesNotCleanupWillRepeat( - [Frozen] Mock> settings, + [Frozen] Mock> settings, [Frozen] Mock mainDom, [Frozen] Mock serverRoleAccessor, [Frozen] Mock runtimeState, [Frozen] Mock cleanupService, ContentVersionCleanup sut) { - settings.Setup(x => x.Value.ContentVersionCleanupPolicy.EnableCleanup).Returns(true); + settings.Setup(x => x.CurrentValue).Returns(new ContentSettings() + { + ContentVersionCleanupPolicy = new ContentVersionCleanupPolicySettings() + { + EnableCleanup = true + } + }); runtimeState.Setup(x => x.Level).Returns(RuntimeLevel.Unknown); mainDom.Setup(x => x.IsMainDom).Returns(true); serverRoleAccessor.Setup(x => x.CurrentServerRole).Returns(ServerRole.SchedulingPublisher); @@ -58,14 +69,20 @@ public async Task ContentVersionCleanup_RuntimeLevelNotRun_DoesNotCleanupWillRep [Test, AutoMoqData] public async Task ContentVersionCleanup_ServerRoleUnknown_DoesNotCleanupWillRepeat( - [Frozen] Mock> settings, + [Frozen] Mock> settings, [Frozen] Mock mainDom, [Frozen] Mock serverRoleAccessor, [Frozen] Mock runtimeState, [Frozen] Mock cleanupService, ContentVersionCleanup sut) { - settings.Setup(x => x.Value.ContentVersionCleanupPolicy.EnableCleanup).Returns(true); + settings.Setup(x => x.CurrentValue).Returns(new ContentSettings() + { + ContentVersionCleanupPolicy = new ContentVersionCleanupPolicySettings() + { + EnableCleanup = true + } + }); runtimeState.Setup(x => x.Level).Returns(RuntimeLevel.Run); mainDom.Setup(x => x.IsMainDom).Returns(true); serverRoleAccessor.Setup(x => x.CurrentServerRole).Returns(ServerRole.Unknown); @@ -77,14 +94,21 @@ public async Task ContentVersionCleanup_ServerRoleUnknown_DoesNotCleanupWillRep [Test, AutoMoqData] public async Task ContentVersionCleanup_NotMainDom_DoesNotCleanupWillNotRepeat( - [Frozen] Mock> settings, + [Frozen] Mock> settings, [Frozen] Mock mainDom, [Frozen] Mock serverRoleAccessor, [Frozen] Mock runtimeState, [Frozen] Mock cleanupService, ContentVersionCleanup sut) { - settings.Setup(x => x.Value.ContentVersionCleanupPolicy.EnableCleanup).Returns(true); + settings.Setup(x => x.CurrentValue).Returns(new ContentSettings() + { + ContentVersionCleanupPolicy = new ContentVersionCleanupPolicySettings() + { + EnableCleanup = true + } + }); + runtimeState.Setup(x => x.Level).Returns(RuntimeLevel.Run); mainDom.Setup(x => x.IsMainDom).Returns(false); serverRoleAccessor.Setup(x => x.CurrentServerRole).Returns(ServerRole.SchedulingPublisher); @@ -96,14 +120,21 @@ public async Task ContentVersionCleanup_NotMainDom_DoesNotCleanupWillNotRepeat( [Test, AutoMoqData] public async Task ContentVersionCleanup_Enabled_DelegatesToCleanupService( - [Frozen] Mock> settings, + [Frozen] Mock> settings, [Frozen] Mock mainDom, [Frozen] Mock serverRoleAccessor, [Frozen] Mock runtimeState, [Frozen] Mock cleanupService, ContentVersionCleanup sut) { - settings.Setup(x => x.Value.ContentVersionCleanupPolicy.EnableCleanup).Returns(true); + settings.Setup(x => x.CurrentValue).Returns(new ContentSettings() + { + ContentVersionCleanupPolicy = new ContentVersionCleanupPolicySettings() + { + EnableCleanup = true + } + }); + runtimeState.Setup(x => x.Level).Returns(RuntimeLevel.Run); mainDom.Setup(x => x.IsMainDom).Returns(true); serverRoleAccessor.Setup(x => x.CurrentServerRole).Returns(ServerRole.SchedulingPublisher); diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Services/DefaultContentVersionCleanupPolicyTest.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Services/DefaultContentVersionCleanupPolicyTest.cs index a51c77c03a3b..800bcd65b798 100644 --- a/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Services/DefaultContentVersionCleanupPolicyTest.cs +++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Core/Services/DefaultContentVersionCleanupPolicyTest.cs @@ -7,10 +7,10 @@ using NUnit.Framework; using Umbraco.Cms.Core.Configuration.Models; using Umbraco.Cms.Core.Models; +using Umbraco.Cms.Core.Persistence.Repositories; using Umbraco.Cms.Infrastructure.Services.Implement; using Umbraco.Cms.Tests.UnitTests.AutoFixture; -using Umbraco.Core.Persistence.Repositories; -using ContentVersionCleanupPolicySettings = Umbraco.Core.Models.ContentVersionCleanupPolicySettings; +using ContentVersionCleanupPolicySettings = Umbraco.Cms.Core.Models.ContentVersionCleanupPolicySettings; namespace Umbraco.Tests.Services { @@ -31,9 +31,15 @@ public void Apply_AllOlderThanKeepSettings_AllVersionsReturned( new HistoricContentVersionMeta(versionId: ++versionId, contentId: 1, contentTypeId: 1, versionDate: DateTime.Today.AddHours(-1)), }; - contentSettings.Setup(x => x.Value.ContentVersionCleanupPolicy.EnableCleanup).Returns(true); - contentSettings.Setup(x => x.Value.ContentVersionCleanupPolicy.KeepAllVersionsNewerThanDays).Returns(0); - contentSettings.Setup(x => x.Value.ContentVersionCleanupPolicy.KeepLatestVersionPerDayForDays).Returns(0); + contentSettings.Setup(x => x.Value).Returns(new ContentSettings() + { + ContentVersionCleanupPolicy = new Cms.Core.Configuration.Models.ContentVersionCleanupPolicySettings() + { + EnableCleanup = true, + KeepAllVersionsNewerThanDays = 0, + KeepLatestVersionPerDayForDays = 0 + } + }); documentVersionRepository.Setup(x => x.GetCleanupPolicies()) .Returns(Array.Empty()); @@ -60,9 +66,15 @@ public void Apply_OverlappingKeepSettings_KeepAllVersionsNewerThanDaysTakesPrior new HistoricContentVersionMeta(versionId: ++versionId, contentId: 1, contentTypeId: 1, versionDate: DateTime.Today.AddHours(-1)), }; - contentSettings.Setup(x => x.Value.ContentVersionCleanupPolicy.EnableCleanup).Returns(true); - contentSettings.Setup(x => x.Value.ContentVersionCleanupPolicy.KeepAllVersionsNewerThanDays).Returns(2); - contentSettings.Setup(x => x.Value.ContentVersionCleanupPolicy.KeepLatestVersionPerDayForDays).Returns(2); + contentSettings.Setup(x => x.Value).Returns(new ContentSettings() + { + ContentVersionCleanupPolicy = new Cms.Core.Configuration.Models.ContentVersionCleanupPolicySettings() + { + EnableCleanup = true, + KeepAllVersionsNewerThanDays = 2, + KeepLatestVersionPerDayForDays = 2 + } + }); documentVersionRepository.Setup(x => x.GetCleanupPolicies()) .Returns(Array.Empty()); @@ -96,9 +108,15 @@ public void Apply_WithinInKeepLatestPerDay_ReturnsSinglePerContentPerDay( new HistoricContentVersionMeta(versionId: 9, contentId: 2, contentTypeId: 1, versionDate: DateTime.Today.AddHours(-1)), }; - contentSettings.Setup(x => x.Value.ContentVersionCleanupPolicy.EnableCleanup).Returns(true); - contentSettings.Setup(x => x.Value.ContentVersionCleanupPolicy.KeepAllVersionsNewerThanDays).Returns(0); - contentSettings.Setup(x => x.Value.ContentVersionCleanupPolicy.KeepLatestVersionPerDayForDays).Returns(3); + contentSettings.Setup(x => x.Value).Returns(new ContentSettings() + { + ContentVersionCleanupPolicy = new Cms.Core.Configuration.Models.ContentVersionCleanupPolicySettings() + { + EnableCleanup = true, + KeepAllVersionsNewerThanDays = 0, + KeepLatestVersionPerDayForDays = 3 + } + }); documentVersionRepository.Setup(x => x.GetCleanupPolicies()) .Returns(Array.Empty()); @@ -134,9 +152,15 @@ public void Apply_HasOverridePolicy_RespectsPreventCleanup( new HistoricContentVersionMeta(versionId: 6, contentId: 2, contentTypeId: 2, versionDate: DateTime.Today.AddHours(-1)), }; - contentSettings.Setup(x => x.Value.ContentVersionCleanupPolicy.EnableCleanup).Returns(true); - contentSettings.Setup(x => x.Value.ContentVersionCleanupPolicy.KeepAllVersionsNewerThanDays).Returns(0); - contentSettings.Setup(x => x.Value.ContentVersionCleanupPolicy.KeepLatestVersionPerDayForDays).Returns(0); + contentSettings.Setup(x => x.Value).Returns(new ContentSettings() + { + ContentVersionCleanupPolicy = new Cms.Core.Configuration.Models.ContentVersionCleanupPolicySettings() + { + EnableCleanup = true, + KeepAllVersionsNewerThanDays = 0, + KeepLatestVersionPerDayForDays = 0 + } + }); documentVersionRepository.Setup(x => x.GetCleanupPolicies()) .Returns(new ContentVersionCleanupPolicySettings[] @@ -169,9 +193,15 @@ public void Apply_HasOverridePolicy_RespectsKeepAll( new HistoricContentVersionMeta(versionId: 6, contentId: 2, contentTypeId: 2, versionDate: DateTime.Today.AddHours(-1)), }; - contentSettings.Setup(x => x.Value.ContentVersionCleanupPolicy.EnableCleanup).Returns(true); - contentSettings.Setup(x => x.Value.ContentVersionCleanupPolicy.KeepAllVersionsNewerThanDays).Returns(0); - contentSettings.Setup(x => x.Value.ContentVersionCleanupPolicy.KeepLatestVersionPerDayForDays).Returns(0); + contentSettings.Setup(x => x.Value).Returns(new ContentSettings() + { + ContentVersionCleanupPolicy = new Cms.Core.Configuration.Models.ContentVersionCleanupPolicySettings() + { + EnableCleanup = true, + KeepAllVersionsNewerThanDays = 0, + KeepLatestVersionPerDayForDays = 0 + } + }); documentVersionRepository.Setup(x => x.GetCleanupPolicies()) .Returns(new ContentVersionCleanupPolicySettings[] @@ -204,9 +234,15 @@ public void Apply_HasOverridePolicy_RespectsKeepLatest( new HistoricContentVersionMeta(versionId: 6, contentId: 2, contentTypeId: 2, versionDate: DateTime.Today.AddHours(-1)), }; - contentSettings.Setup(x => x.Value.ContentVersionCleanupPolicy.EnableCleanup).Returns(true); - contentSettings.Setup(x => x.Value.ContentVersionCleanupPolicy.KeepAllVersionsNewerThanDays).Returns(0); - contentSettings.Setup(x => x.Value.ContentVersionCleanupPolicy.KeepLatestVersionPerDayForDays).Returns(0); + contentSettings.Setup(x => x.Value).Returns(new ContentSettings() + { + ContentVersionCleanupPolicy = new Cms.Core.Configuration.Models.ContentVersionCleanupPolicySettings() + { + EnableCleanup = true, + KeepAllVersionsNewerThanDays = 0, + KeepLatestVersionPerDayForDays = 0 + } + }); documentVersionRepository.Setup(x => x.GetCleanupPolicies()) .Returns(new ContentVersionCleanupPolicySettings[]