# Conflicts: # src/Umbraco.Core/Composing/CompositionExtensions/Repositories.cs # src/Umbraco.Core/Composing/CompositionExtensions/Services.cs # src/Umbraco.Core/Configuration/UmbracoSettings/ContentElement.cs # src/Umbraco.Core/Configuration/UmbracoSettings/IContentSection.cs # src/Umbraco.Core/ContentEditing/HistoryCleanup.cs # src/Umbraco.Core/Models/ContentEditing/DocumentTypeDisplay.cs # src/Umbraco.Core/Models/ContentType.cs # src/Umbraco.Core/Models/Mapping/ContentTypeMapDefinition.cs # src/Umbraco.Core/Persistence/Repositories/DocumentVersionRepository.cs # src/Umbraco.Core/Scheduling/ContentVersionCleanup.cs # src/Umbraco.Core/Services/DefaultContentVersionCleanupPolicy.cs # src/Umbraco.Infrastructure/Migrations/Install/DatabaseSchemaCreator.cs # src/Umbraco.Infrastructure/Migrations/Upgrade/UmbracoPlan.cs # src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentTypeCommonRepository.cs # src/Umbraco.Infrastructure/Services/Implement/ContentService.cs # src/Umbraco.Tests/Configurations/UmbracoSettings/umbracoSettings.config # src/Umbraco.Tests/TestHelpers/Entities/MockedContent.cs # src/Umbraco.Tests/TestHelpers/Entities/MockedContentTypes.cs # src/Umbraco.Tests/Umbraco.Tests.csproj # src/Umbraco.Web.UI.Client/package-lock.json # src/Umbraco.Web.UI/config/umbracoSettings.Release.config # src/Umbraco.Web.UI/umbraco/config/lang/en.xml # src/Umbraco.Web.UI/umbraco/config/lang/en_us.xml # src/Umbraco.Web/Scheduling/SchedulerComponent.cs # src/Umbraco.Web/Umbraco.Web.csproj # tests/Umbraco.Tests.Common/Extensions/AutoMoqDataAttribute.cs # tests/Umbraco.Tests.UnitTests/Umbraco.Core/Persistence/Repositories/DocumentVersionRepository_Tests_Integration.cs # tests/Umbraco.Tests.UnitTests/Umbraco.Core/Scheduling/ContentVersionCleanup_Tests_UnitTests.cs # tests/Umbraco.Tests.UnitTests/Umbraco.Core/Services/ContentVersionCleanupService_Tests_Integration.cs # tests/Umbraco.Tests.UnitTests/Umbraco.Core/Services/ContentVersionCleanupService_Tests_UnitTests.cs # tests/Umbraco.Tests.UnitTests/Umbraco.Core/Services/DefaultContentVersionCleanupPolicy_Tests_UnitTests.cs
267 lines
11 KiB
C#
267 lines
11 KiB
C#
// using System;
|
|
// using System.Collections.Generic;
|
|
// using System.Diagnostics;
|
|
// using System.Linq;
|
|
// using AutoFixture.NUnit3;
|
|
// using CSharpTest.Net.Interfaces;
|
|
// using Moq;
|
|
// using NUnit.Framework;
|
|
// using Umbraco.Cms.Core.Events;
|
|
// using Umbraco.Cms.Core.Models;
|
|
// using Umbraco.Cms.Core.Scoping;
|
|
// using Umbraco.Cms.Core.Services;
|
|
// using Umbraco.Cms.Core.Services.Implement;
|
|
// using Umbraco.Cms.Tests.UnitTests.AutoFixture;
|
|
// using Umbraco.Core.Composing;
|
|
// using Umbraco.Core.Events;
|
|
// using Umbraco.Core.Models;
|
|
// using Umbraco.Core.Persistence.Repositories;
|
|
// using Umbraco.Core.Scoping;
|
|
// using Umbraco.Core.Services;
|
|
// using Umbraco.Core.Services.Implement;
|
|
// using Umbraco.Tests.Testing;
|
|
//
|
|
// namespace Umbraco.Tests.Services
|
|
// {
|
|
// /// <remarks>
|
|
// /// v9 -> Tests.UnitTests
|
|
// /// Sut here is ContentService, but in v9 should be a new class
|
|
// /// </remarks>
|
|
// [TestFixture]
|
|
// public class ContentVersionCleanupServiceTest
|
|
// {
|
|
//
|
|
//
|
|
// /// <remarks>
|
|
// /// For v9 this just needs a rewrite, no static events, no service location etc
|
|
// /// </remarks>
|
|
// [Test, AutoMoqData]
|
|
// public void PerformContentVersionCleanup_Always_RespectsDeleteRevisionsCancellation(
|
|
// [Frozen] Mock<IScope> scope,
|
|
// Mock<IDocumentVersionRepository> documentVersionRepository,
|
|
// List<TestHistoricContentVersionMeta> someHistoricVersions,
|
|
// DateTime aDateTime,
|
|
// ContentService sut)
|
|
// {
|
|
// factory.Setup(x => x.GetInstance(typeof(IDocumentVersionRepository)))
|
|
// .Returns(documentVersionRepository.Object);
|
|
//
|
|
// factory.Setup(x => x.GetInstance(typeof(IContentVersionCleanupPolicy)))
|
|
// .Returns(new EchoingCleanupPolicyStub());
|
|
//
|
|
// documentVersionRepository.Setup(x => x.GetDocumentVersionsEligibleForCleanup())
|
|
// .Returns(someHistoricVersions);
|
|
//
|
|
// scope.Setup(x => x.Events).Returns(new PassThroughEventDispatcher());
|
|
//
|
|
// // Wire up service locator
|
|
// Current.Factory = factory.Object;
|
|
//
|
|
// void OnDeletingVersions(IContentService sender, DeleteRevisionsEventArgs args) => args.Cancel = true;
|
|
//
|
|
// ContentService.DeletingVersions += OnDeletingVersions;
|
|
//
|
|
// // # Act
|
|
// var report = sut.PerformContentVersionCleanup(aDateTime);
|
|
//
|
|
// ContentService.DeletingVersions -= OnDeletingVersions;
|
|
//
|
|
// Assert.AreEqual(0, report.Count);
|
|
// }
|
|
//
|
|
// /// <remarks>
|
|
// /// For v9 this just needs a rewrite, no static events, no service location etc
|
|
// /// </remarks>
|
|
// [Test, AutoMoqData]
|
|
// public void PerformContentVersionCleanup_Always_FiresDeletedVersionsForEachDeletedVersion(
|
|
// [Frozen] Mock<IFactory> factory,
|
|
// [Frozen] Mock<IScope> scope,
|
|
// Mock<IDocumentVersionRepository> documentVersionRepository,
|
|
// List<TestHistoricContentVersionMeta> someHistoricVersions,
|
|
// DateTime aDateTime,
|
|
// ContentService sut)
|
|
// {
|
|
// factory.Setup(x => x.GetInstance(typeof(IDocumentVersionRepository)))
|
|
// .Returns(documentVersionRepository.Object);
|
|
//
|
|
// factory.Setup(x => x.GetInstance(typeof(IContentVersionCleanupPolicy)))
|
|
// .Returns(new EchoingCleanupPolicyStub());
|
|
//
|
|
// documentVersionRepository.Setup(x => x.GetDocumentVersionsEligibleForCleanup())
|
|
// .Returns(someHistoricVersions);
|
|
//
|
|
// scope.Setup(x => x.Events).Returns(new PassThroughEventDispatcher());
|
|
//
|
|
// // Wire up service locator
|
|
// Current.Factory = factory.Object;
|
|
//
|
|
// // v9 can Mock + Verify
|
|
// var deletedAccordingToEvents = 0;
|
|
// void OnDeletedVersions(IContentService sender, DeleteRevisionsEventArgs args) => deletedAccordingToEvents++;
|
|
//
|
|
// ContentService.DeletedVersions += OnDeletedVersions;
|
|
//
|
|
// // # Act
|
|
// sut.PerformContentVersionCleanup(aDateTime);
|
|
//
|
|
// ContentService.DeletedVersions -= OnDeletedVersions;
|
|
//
|
|
// Assert.Multiple(() =>
|
|
// {
|
|
// Assert.Greater(deletedAccordingToEvents, 0);
|
|
// Assert.AreEqual(someHistoricVersions.Count, deletedAccordingToEvents);
|
|
// });
|
|
// }
|
|
//
|
|
// /// <remarks>
|
|
// /// For v9 this just needs a rewrite, no static events, no service location etc
|
|
// /// </remarks>
|
|
// [Test, AutoMoqData]
|
|
// public void PerformContentVersionCleanup_Always_ReturnsReportOfDeletedItems(
|
|
// [Frozen] Mock<IFactory> factory,
|
|
// [Frozen] Mock<IScope> scope,
|
|
// Mock<IDocumentVersionRepository> documentVersionRepository,
|
|
// List<TestHistoricContentVersionMeta> someHistoricVersions,
|
|
// DateTime aDateTime,
|
|
// ContentService sut)
|
|
// {
|
|
// factory.Setup(x => x.GetInstance(typeof(IDocumentVersionRepository)))
|
|
// .Returns(documentVersionRepository.Object);
|
|
//
|
|
// factory.Setup(x => x.GetInstance(typeof(IContentVersionCleanupPolicy)))
|
|
// .Returns(new EchoingCleanupPolicyStub());
|
|
//
|
|
// documentVersionRepository.Setup(x => x.GetDocumentVersionsEligibleForCleanup())
|
|
// .Returns(someHistoricVersions);
|
|
//
|
|
// scope.Setup(x => x.Events).Returns(new PassThroughEventDispatcher());
|
|
//
|
|
// // Wire up service locator
|
|
// Current.Factory = factory.Object;
|
|
//
|
|
// // # Act
|
|
// var report = sut.PerformContentVersionCleanup(aDateTime);
|
|
//
|
|
// Assert.Multiple(() =>
|
|
// {
|
|
// Assert.Greater(report.Count, 0);
|
|
// Assert.AreEqual(someHistoricVersions.Count, report.Count);
|
|
// });
|
|
// }
|
|
//
|
|
// /// <remarks>
|
|
// /// For v9 this just needs a rewrite, no static events, no service location etc
|
|
// /// </remarks>
|
|
// [Test, AutoMoqData]
|
|
// public void PerformContentVersionCleanup_Always_AdheresToCleanupPolicy(
|
|
// [Frozen] Mock<IFactory> factory,
|
|
// [Frozen] Mock<IScope> scope,
|
|
// Mock<IDocumentVersionRepository> documentVersionRepository,
|
|
// Mock<IContentVersionCleanupPolicy> cleanupPolicy,
|
|
// List<TestHistoricContentVersionMeta> someHistoricVersions,
|
|
// DateTime aDateTime,
|
|
// ContentService sut)
|
|
// {
|
|
// factory.Setup(x => x.GetInstance(typeof(IDocumentVersionRepository)))
|
|
// .Returns(documentVersionRepository.Object);
|
|
//
|
|
// factory.Setup(x => x.GetInstance(typeof(IContentVersionCleanupPolicy)))
|
|
// .Returns(cleanupPolicy.Object);
|
|
//
|
|
// documentVersionRepository.Setup(x => x.GetDocumentVersionsEligibleForCleanup())
|
|
// .Returns(someHistoricVersions);
|
|
//
|
|
// scope.Setup(x => x.Events).Returns(new PassThroughEventDispatcher());
|
|
//
|
|
// cleanupPolicy.Setup(x => x.Apply(It.IsAny<DateTime>(), It.IsAny<IEnumerable<TestHistoricContentVersionMeta>>()))
|
|
// .Returns<DateTime, IEnumerable<TestHistoricContentVersionMeta>>((_, items) => items.Take(1));
|
|
//
|
|
// // Wire up service locator
|
|
// Current.Factory = factory.Object;
|
|
//
|
|
// // # Act
|
|
// var report = sut.PerformContentVersionCleanup(aDateTime);
|
|
//
|
|
// Debug.Assert(someHistoricVersions.Count > 1);
|
|
//
|
|
// Assert.Multiple(() =>
|
|
// {
|
|
// cleanupPolicy.Verify(x => x.Apply(aDateTime, someHistoricVersions), Times.Once);
|
|
// Assert.AreEqual(someHistoricVersions.First(), report.Single());
|
|
// });
|
|
// }
|
|
//
|
|
// /// <remarks>
|
|
// /// For v9 this just needs a rewrite, no static events, no service location etc
|
|
// /// </remarks>
|
|
// [Test, AutoMoqData]
|
|
// public void PerformContentVersionCleanup_HasVersionsToDelete_CallsDeleteOnRepositoryWithFilteredSet(
|
|
// [Frozen] Mock<IFactory> factory,
|
|
// [Frozen] Mock<IScope> scope,
|
|
// Mock<IDocumentVersionRepository> documentVersionRepository,
|
|
// Mock<IContentVersionCleanupPolicy> cleanupPolicy,
|
|
// List<TestHistoricContentVersionMeta> someHistoricVersions,
|
|
// DateTime aDateTime,
|
|
// ContentService sut)
|
|
// {
|
|
// factory.Setup(x => x.GetInstance(typeof(IDocumentVersionRepository)))
|
|
// .Returns(documentVersionRepository.Object);
|
|
//
|
|
// factory.Setup(x => x.GetInstance(typeof(IContentVersionCleanupPolicy)))
|
|
// .Returns(cleanupPolicy.Object);
|
|
//
|
|
// documentVersionRepository.Setup(x => x.GetDocumentVersionsEligibleForCleanup())
|
|
// .Returns(someHistoricVersions);
|
|
//
|
|
// scope.Setup(x => x.Events).Returns(new PassThroughEventDispatcher());
|
|
//
|
|
// var filteredSet = someHistoricVersions.Take(1);
|
|
//
|
|
// cleanupPolicy.Setup(x => x.Apply(It.IsAny<DateTime>(), It.IsAny<IEnumerable<TestHistoricContentVersionMeta>>()))
|
|
// .Returns<DateTime, IEnumerable<TestHistoricContentVersionMeta>>((_, items) => filteredSet);
|
|
//
|
|
// // Wire up service locator
|
|
// Current.Factory = factory.Object;
|
|
//
|
|
// // # Act
|
|
// var report = sut.PerformContentVersionCleanup(aDateTime);
|
|
//
|
|
// Debug.Assert(someHistoricVersions.Any());
|
|
//
|
|
// var expectedId = filteredSet.First().VersionId;
|
|
//
|
|
// documentVersionRepository.Verify(x => x.DeleteVersions(It.Is<IEnumerable<int>>(y => y.Single() == expectedId)), Times.Once);
|
|
// }
|
|
//
|
|
// class EchoingCleanupPolicyStub : IContentVersionCleanupPolicy
|
|
// {
|
|
// /// <summary>
|
|
// /// What goes in, must come out
|
|
// /// </summary>
|
|
// public EchoingCleanupPolicyStub() { }
|
|
//
|
|
// /* Note: Could just wire up a mock but its quite wordy.
|
|
// *
|
|
// * cleanupPolicy.Setup(x => x.Apply(It.IsAny<DateTime>(), It.IsAny<IEnumerable<TestHistoricContentVersionMeta>>()))
|
|
// * .Returns<DateTime, IEnumerable<TestHistoricContentVersionMeta>>((date, items) => items);
|
|
// */
|
|
// public IEnumerable<HistoricContentVersionMeta> Apply(
|
|
// DateTime asAtDate,
|
|
// IEnumerable<HistoricContentVersionMeta> items
|
|
// ) => items;
|
|
// }
|
|
//
|
|
// /// <remarks>
|
|
// /// <para>NPoco < 5 requires a parameter-less constructor but plays nice with get-only properties.</para>
|
|
// /// <para>Moq won't play nice with get-only properties, but doesn't require a parameter-less constructor.</para>
|
|
// ///
|
|
// /// <para>Inheritance solves this so that we get values for test data without a specimen builder</para>
|
|
// /// </remarks>
|
|
// public class TestHistoricContentVersionMeta : HistoricContentVersionMeta
|
|
// {
|
|
// public TestHistoricContentVersionMeta(int contentId, int contentTypeId, int versionId, DateTime versionDate)
|
|
// : base(contentId, contentTypeId, versionId, versionDate) { }
|
|
// }
|
|
// }
|
|
// }
|