Files
Umbraco-CMS/tests/Umbraco.Tests.Integration/Umbraco.Infrastructure/Persistence/Repositories/DocumentVersionRepositoryTest.cs
Andy Butland 825f791d01 Remove the non-controversial, straightforward obsoleted constructs for Umbraco 16 (#18661)
* Removed obsoletes from IConfigManipulator.

* Removed obsolete models builder extensions.

* Removed the obsolete ContentDashboardSettings.

* Removed the obsolete InstallMissingDatabase setting on GlobalSettings.

* Removed obsolete NuCache settings.

* Removed obsolete RuntimeMinificationSettings.

* Removed obsolete health check constant.

* Removed obsolete icon constant.

* Removed obsolete telemetry constant.

* Removed obsolete property and constructor on UmbracoBuilder.

* Removed obsolete constructor on AuditNotificationsHandler.

* Removed obsolete constructor on HTTP header health checks.

* Removed obsolete constructor on MediaFileManager.

* Removed obsolete GetDefaultFileContent on ViewHelper.

* Remove obsoleted methods on embed providers.

* Fix tests.

* Removed obsolete constructors on BlockEditorDataConverter.

* Removed obsolete SeedCacheDuration property on CacheSettings.

* Removed obsolete PublishCulture on ContentRepositoryExtensions.

* Removed obsolete MonitorLock.

* Removed obsolete synchronous HasSavedValues from IDataTypeUsageService and IDataTypeUsageRepository.

* Removed obsolete HasSavedPropertyValues from IPropertyTypeUsageService and IPropertyTypeUsageRepository.

* Removed obsolete methods in ITrackedReferencesService and ITrackedReferencesRepository.

* Removed obsolete DateValueEditor constructors.

* Removed obsolete GetAutomaticRelationTypesAliases.

* Removed obsolete constructor on TextOnlyValueEditor.

* Removed obsolete constructors on RegexValidator and RequiredValidator.

* Removed obsolete constructs on SliderValueConverter and TagsValueConverter.

* Removed obsolete GetContentType methods from IPublishedCache.

* Removed ContentFinderByIdPath.

* Removed obsolete constructor on DefaultMediaUrlProvider.

* Removed obsolete constructor on Domain.

* Removed obsolete constructor on PublishedRequest.

* Removed obsolete methods on CheckPermissions.

* Removed obsolete GetUserId from IBackOfficeSecurity.

* Removed obsolete methods on LegacyPasswordSecurity.

* Removed obsolete constructors on AuditService.

* Removed obsolete methods on IContentEditingService.

* Remove obsolete constructors and methods on ContentService/IContentService.

* Removed obsolete constructor in ContentTypeEditingService.

* Removed obsolete constructor in MediaTypeEditingService.

* Removed obsolete constructor in MemberTypeEditingService.

* Removed obsolete constructor in ContentTypeService.

* Removed obsolete constructors in ContentTypeServiceBase.

* Removed obsolete constructors and methods in ContentVersionService.

* Removed obsolete constructor in DataTypeUsageService.

* Removed obsolete constructor in DomainService.

* Removed obsolete constructor in FileService.

* Removes obsolete AttemptMove from IContentService.

* Removes obsolete SetPreventCleanup from IContentVersionService.

* Removes obsolete GetReferences from IDataTypeService.

* Removed obsolete SetConsentLevel from IMetricsConsentService.

* Removed obsolete methods from IPackageDataInstallation.

* Removed obsolete methods from IPackagingService.

* Removed obsolete methods on ITwoFactorLoginService.
Removed obsolete ITemporaryMediaService.

* Removed obsolete constructor from MediaService, MemberTypeService and MediaTypeService.

* More obsolete constructors.

* Removed obsoleted overloads on IPropertyValidationService.

* Fixed build for tests.

* Removed obsolete constructor for PublicAccessService, UserService and RelationService.

* Removed GetDefaultMemberType.

* Removed obsolete user group functionality from IUserService.

* Removed obsolete extension methods on IUserService.

* Removed obsolete method from ITelemetryService.

* Removed obsolete UdiParserServiceConnectors.

* Removed obsolete method on ICookieManager.

* Removed obsolete DynamicContext.

* Removed obsolete XmlHelper.

* Fixed failing integration tests.

* Removed obsoletes in Umbraco.Cms.Api.Common

* Removed obsoletes in Umbraco.Cms.Api.Delivery

* Removed obsoletes in Umbraco.Cms.Api.Management

* Removed obsoletes in Umbraco.Examine.Lucene

* Removed obsoletes in Umbraco.Infrastructure

* Fix failing delivery API contract integration test.

* Made integration tests internal.

* Removed obsoletes from web projects.

* Fix build.

* Removed Twitter OEmbed provider

* Removed obsolete constructor on PublishedDataType.

* Removed obsolete constructors on PublishedCacheBase.

* Removed the obsolete PropertyEditorTagsExtensions.

* Removed obsoletion properties on configuration response  models (#18697)

* Removed obsolete methods from server-side models.

* Update client-side types and sdk.

* Update client-side files.

* Removed obsoletion of Utf8ToAsciiConverter.ToAsciiString overload. (#18694)

* Removed obsolete method in UserService. (#18710)

* Removed obsoleted group alias keys from being publicly available. (#18682)

* Removed unneceessary ApiVersion attribute.

* Clean-up obsoletions on MemberService (#18703)

* Removed obsoleted method on MemberService, added future obsoletion to interface and updated all callers.

* Removed obsoletion on member service method that's not obsolete on the interface.
2025-03-21 17:02:31 +00:00

215 lines
8.2 KiB
C#

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;
using Umbraco.Cms.Infrastructure.Scoping;
using Umbraco.Cms.Tests.Common.Builders;
using Umbraco.Cms.Tests.Common.Testing;
using Umbraco.Cms.Tests.Integration.Testing;
using Umbraco.Extensions;
namespace Umbraco.Cms.Tests.Integration.Umbraco.Infrastructure.Persistence.Repositories;
/// <remarks>
/// v9 -> Tests.Integration
/// </remarks>
[TestFixture]
[UmbracoTest(Database = UmbracoTestOptions.Database.NewSchemaPerTest)]
internal sealed class DocumentVersionRepositoryTest : UmbracoIntegrationTest
{
public IFileService FileService => GetRequiredService<IFileService>();
public IContentTypeService ContentTypeService => GetRequiredService<IContentTypeService>();
public IContentService ContentService => GetRequiredService<IContentService>();
[Test]
public void GetDocumentVersionsEligibleForCleanup_Always_ExcludesActiveVersions()
{
var template = TemplateBuilder.CreateTextPageTemplate();
FileService.SaveTemplate(template);
var contentType =
ContentTypeBuilder.CreateSimpleContentType("umbTextpage", "Textpage", defaultTemplateId: template.Id);
ContentTypeService.Save(contentType);
var content = ContentBuilder.CreateSimpleContent(contentType);
ContentService.Save(content);
ContentService.Publish(content, Array.Empty<string>());
// At this point content has 2 versions, a draft version and a published version.
ContentService.Publish(content, Array.Empty<string>());
// At this point content has 3 versions, a historic version, a draft version and a published version.
using (ScopeProvider.CreateScope())
{
var sut = new DocumentVersionRepository(ScopeAccessor);
var results = sut.GetDocumentVersionsEligibleForCleanup();
Assert.Multiple(() =>
{
Assert.AreEqual(1, results.Count);
Assert.AreEqual(1, results.First().VersionId);
});
}
}
[Test]
public void GetDocumentVersionsEligibleForCleanup_Always_ExcludesPinnedVersions()
{
var 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);
ContentService.Save(content);
ContentService.Publish(content, Array.Empty<string>());
// At this point content has 2 versions, a draft version and a published version.
ContentService.Publish(content, Array.Empty<string>());
ContentService.Publish(content, Array.Empty<string>());
ContentService.Publish(content, Array.Empty<string>());
// At this point content has 5 versions, 3 historic versions, a draft version and a published version.
var allVersions = ContentService.GetVersions(content.Id);
Debug.Assert(allVersions.Count() == 5); // Sanity check
using (var scope = ScopeProvider.CreateScope())
{
ScopeAccessor.AmbientScope.Database.Update<ContentVersionDto>("set preventCleanup = 1 where id in (1,3)");
var sut = new DocumentVersionRepository(ScopeAccessor);
var results = sut.GetDocumentVersionsEligibleForCleanup();
Assert.Multiple(() =>
{
Assert.AreEqual(1, results.Count);
// We pinned 1 & 3
// 4 is current
// 5 is published
// So all that is left is 2
Assert.AreEqual(2, results.First().VersionId);
});
}
}
[Test]
public void DeleteVersions_Always_DeletesSpecifiedVersions()
{
var template = TemplateBuilder.CreateTextPageTemplate();
FileService.SaveTemplate(template);
var contentType =
ContentTypeBuilder.CreateSimpleContentType("umbTextpage", "Textpage", defaultTemplateId: template.Id);
ContentTypeService.Save(contentType);
var content = ContentBuilder.CreateSimpleContent(contentType);
ContentService.Save(content);
ContentService.Publish(content, Array.Empty<string>());
ContentService.Publish(content, Array.Empty<string>());
ContentService.Publish(content, Array.Empty<string>());
ContentService.Publish(content, Array.Empty<string>());
using (var scope = ScopeProvider.CreateScope())
{
var query = ScopeAccessor.AmbientScope.SqlContext.Sql();
query.Select<ContentVersionDto>()
.From<ContentVersionDto>();
var sut = new DocumentVersionRepository(ScopeAccessor);
sut.DeleteVersions(new[] { 1, 2, 3 });
var after = ScopeAccessor.AmbientScope.Database.Fetch<ContentVersionDto>(query);
Assert.Multiple(() =>
{
Assert.AreEqual(2, after.Count);
Assert.True(after.All(x => x.Id > 3));
});
}
}
[Test]
public void GetPagedItemsByContentId_WithInvariantCultureContent_ReturnsPaginatedResults()
{
var template = TemplateBuilder.CreateTextPageTemplate();
FileService.SaveTemplate(template);
var contentType =
ContentTypeBuilder.CreateSimpleContentType("umbTextpage", "Textpage", defaultTemplateId: template.Id);
ContentTypeService.Save(contentType);
var content = ContentBuilder.CreateSimpleContent(contentType);
ContentService.Save(content);
ContentService.Publish(content, Array.Empty<string>()); // Draft + Published
ContentService.Publish(content, Array.Empty<string>()); // New Draft
using (ScopeProvider.CreateScope())
{
var sut = new DocumentVersionRepository((IScopeAccessor)ScopeProvider);
var page1 = sut.GetPagedItemsByContentId(content.Id, 0, 2, out var page1Total);
var page2 = sut.GetPagedItemsByContentId(content.Id, 1, 2, out var page2Total);
Assert.Multiple(() =>
{
Assert.AreEqual(2, page1.Count());
Assert.AreEqual(3, page1Total);
Assert.AreEqual(1, page2.Count());
Assert.AreEqual(3, page2Total);
});
}
}
[Test]
public void GetPagedItemsByContentId_WithVariantCultureContent_ReturnsPaginatedResults()
{
var template = TemplateBuilder.CreateTextPageTemplate();
FileService.SaveTemplate(template);
var contentType =
ContentTypeBuilder.CreateSimpleContentType("umbTextpage", "Textpage", defaultTemplateId: template.Id);
contentType.Variations = ContentVariation.Culture;
foreach (var propertyType in contentType.PropertyTypes)
{
propertyType.Variations = ContentVariation.Culture;
}
FileService.SaveTemplate(contentType.DefaultTemplate);
ContentTypeService.Save(contentType);
var content = ContentBuilder.CreateSimpleContent(contentType, "foo", culture: "en-US");
content.SetCultureName("foo", "en-US");
ContentService.Save(content);
ContentService.Publish(content, new[] { "en-US" }); // Draft + Published
ContentService.Publish(content, new[] { "en-US" }); // New Draft
using (ScopeProvider.CreateScope())
{
var sut = new DocumentVersionRepository((IScopeAccessor)ScopeProvider);
var page1 = sut.GetPagedItemsByContentId(content.Id, 0, 2, out var page1Total, 1);
var page2 = sut.GetPagedItemsByContentId(content.Id, 1, 2, out var page2Total, 1);
Assert.Multiple(() =>
{
Assert.AreEqual(2, page1.Count());
Assert.AreEqual(3, page1Total);
Assert.AreEqual(1, page2.Count());
Assert.AreEqual(3, page2Total);
});
}
}
}