2024-10-01 15:03:02 +02:00
|
|
|
// using System.Collections.Generic;
|
|
|
|
|
// using System.Data;
|
|
|
|
|
// using System.Linq;
|
|
|
|
|
// using Microsoft.Extensions.Logging;
|
|
|
|
|
// using Microsoft.Extensions.Logging.Abstractions;
|
|
|
|
|
// using Microsoft.Extensions.Options;
|
|
|
|
|
// using Moq;
|
|
|
|
|
// using NUnit.Framework;
|
|
|
|
|
// using Umbraco.Cms.Core;
|
|
|
|
|
// using Umbraco.Cms.Core.Configuration.Models;
|
|
|
|
|
// using Umbraco.Cms.Core.Events;
|
|
|
|
|
// using Umbraco.Cms.Core.Hosting;
|
|
|
|
|
// using Umbraco.Cms.Core.Logging;
|
|
|
|
|
// using Umbraco.Cms.Core.Models;
|
|
|
|
|
// using Umbraco.Cms.Core.Models.PublishedContent;
|
|
|
|
|
// using Umbraco.Cms.Core.PropertyEditors;
|
|
|
|
|
// using Umbraco.Cms.Core.PropertyEditors.ValueConverters;
|
|
|
|
|
// using Umbraco.Cms.Core.PublishedCache;
|
|
|
|
|
// using Umbraco.Cms.Core.Routing;
|
|
|
|
|
// using Umbraco.Cms.Core.Scoping;
|
|
|
|
|
// using Umbraco.Cms.Core.Services;
|
|
|
|
|
// using Umbraco.Cms.Core.Strings;
|
|
|
|
|
// using Umbraco.Cms.Core.Sync;
|
|
|
|
|
// using Umbraco.Cms.Core.Web;
|
|
|
|
|
// using Umbraco.Cms.Infrastructure.PublishedCache;
|
|
|
|
|
// using Umbraco.Cms.Infrastructure.PublishedCache.DataSource;
|
|
|
|
|
// using Umbraco.Cms.Infrastructure.Serialization;
|
|
|
|
|
// using Umbraco.Cms.Tests.Common;
|
|
|
|
|
// using Umbraco.Extensions;
|
|
|
|
|
// using IScopeProvider = Umbraco.Cms.Infrastructure.Scoping.IScopeProvider;
|
|
|
|
|
//
|
|
|
|
|
// namespace Umbraco.Cms.Tests.UnitTests.TestHelpers;
|
|
|
|
|
//
|
|
|
|
|
// FIXME: Reintroduce if relevant
|
|
|
|
|
// [TestFixture]
|
|
|
|
|
// public class PublishedSnapshotServiceTestBase
|
|
|
|
|
// {
|
|
|
|
|
// [SetUp]
|
|
|
|
|
// public virtual void Setup()
|
|
|
|
|
// {
|
|
|
|
|
// VariationContextAccessor = new TestVariationContextAccessor();
|
|
|
|
|
// PublishedSnapshotAccessor = new TestPublishedSnapshotAccessor();
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// [TearDown]
|
|
|
|
|
// public void Teardown() => SnapshotService?.Dispose();
|
|
|
|
|
//
|
|
|
|
|
// protected IShortStringHelper ShortStringHelper { get; } = TestHelper.ShortStringHelper;
|
|
|
|
|
//
|
|
|
|
|
// protected virtual IPublishedModelFactory PublishedModelFactory { get; } = new NoopPublishedModelFactory();
|
|
|
|
|
//
|
|
|
|
|
// protected IContentTypeService ContentTypeService { get; private set; }
|
|
|
|
|
//
|
|
|
|
|
// protected IMediaTypeService MediaTypeService { get; private set; }
|
|
|
|
|
//
|
|
|
|
|
// protected IDataTypeService DataTypeService { get; private set; }
|
|
|
|
|
//
|
|
|
|
|
// protected IDomainService DomainService { get; private set; }
|
|
|
|
|
//
|
|
|
|
|
// protected IPublishedValueFallback PublishedValueFallback { get; private set; }
|
|
|
|
|
//
|
|
|
|
|
// protected IPublishedSnapshotService SnapshotService { get; private set; }
|
|
|
|
|
//
|
|
|
|
|
// protected IVariationContextAccessor VariationContextAccessor { get; private set; }
|
|
|
|
|
//
|
|
|
|
|
// protected TestPublishedSnapshotAccessor PublishedSnapshotAccessor { get; private set; }
|
|
|
|
|
//
|
|
|
|
|
// protected TestNuCacheContentService NuCacheContentService { get; private set; }
|
|
|
|
|
//
|
|
|
|
|
// protected PublishedContentTypeFactory PublishedContentTypeFactory { get; private set; }
|
|
|
|
|
//
|
|
|
|
|
// protected GlobalSettings GlobalSettings { get; } = new();
|
|
|
|
|
//
|
|
|
|
|
// protected virtual PropertyValueConverterCollection PropertyValueConverterCollection =>
|
|
|
|
|
// new(() => new[] { new TestSimpleTinyMceValueConverter() });
|
|
|
|
|
//
|
|
|
|
|
// protected IPublishedContent GetContent(int id)
|
|
|
|
|
// {
|
|
|
|
|
// var snapshot = GetPublishedSnapshot();
|
|
|
|
|
// var doc = snapshot.Content.GetById(id);
|
|
|
|
|
// Assert.IsNotNull(doc);
|
|
|
|
|
// return doc;
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// protected IPublishedContent GetMedia(int id)
|
|
|
|
|
// {
|
|
|
|
|
// var snapshot = GetPublishedSnapshot();
|
|
|
|
|
// var doc = snapshot.Media.GetById(id);
|
|
|
|
|
// Assert.IsNotNull(doc);
|
|
|
|
|
// return doc;
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// protected UrlProvider GetUrlProvider(
|
|
|
|
|
// IUmbracoContextAccessor umbracoContextAccessor,
|
|
|
|
|
// RequestHandlerSettings requestHandlerSettings,
|
|
|
|
|
// WebRoutingSettings webRoutingSettings,
|
|
|
|
|
// out UriUtility uriUtility)
|
|
|
|
|
// {
|
|
|
|
|
// uriUtility = new UriUtility(Mock.Of<IHostingEnvironment>());
|
|
|
|
|
// var urlProvider = new DefaultUrlProvider(
|
|
|
|
|
// Mock.Of<IOptionsMonitor<RequestHandlerSettings>>(x => x.CurrentValue == requestHandlerSettings),
|
|
|
|
|
// Mock.Of<ILogger<DefaultUrlProvider>>(),
|
|
|
|
|
// new SiteDomainMapper(),
|
|
|
|
|
// umbracoContextAccessor,
|
|
|
|
|
// uriUtility,
|
|
|
|
|
// Mock.Of<ILocalizationService>(x => x.GetDefaultLanguageIsoCode() == GlobalSettings.DefaultUILanguage));
|
|
|
|
|
//
|
|
|
|
|
// var publishedUrlProvider = new UrlProvider(
|
|
|
|
|
// umbracoContextAccessor,
|
|
|
|
|
// Options.Create(webRoutingSettings),
|
|
|
|
|
// new UrlProviderCollection(() => new[] { urlProvider }),
|
|
|
|
|
// new MediaUrlProviderCollection(() => Enumerable.Empty<IMediaUrlProvider>()),
|
|
|
|
|
// Mock.Of<IVariationContextAccessor>());
|
|
|
|
|
//
|
|
|
|
|
// return publishedUrlProvider;
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// protected static PublishedRouter CreatePublishedRouter(
|
|
|
|
|
// IUmbracoContextAccessor umbracoContextAccessor,
|
|
|
|
|
// IEnumerable<IContentFinder> contentFinders = null,
|
|
|
|
|
// IPublishedUrlProvider publishedUrlProvider = null,
|
|
|
|
|
// IDomainCache domainCache = null)
|
|
|
|
|
// {
|
|
|
|
|
// return new(
|
|
|
|
|
// Mock.Of<IOptionsMonitor<WebRoutingSettings>>(x => x.CurrentValue == new WebRoutingSettings()),
|
|
|
|
|
// new ContentFinderCollection(() => contentFinders ?? Enumerable.Empty<IContentFinder>()),
|
|
|
|
|
// new TestLastChanceFinder(),
|
|
|
|
|
// new TestVariationContextAccessor(),
|
|
|
|
|
// Mock.Of<IProfilingLogger>(),
|
|
|
|
|
// Mock.Of<ILogger<PublishedRouter>>(),
|
|
|
|
|
// publishedUrlProvider ?? Mock.Of<IPublishedUrlProvider>(),
|
|
|
|
|
// Mock.Of<IRequestAccessor>(),
|
|
|
|
|
// Mock.Of<IPublishedValueFallback>(),
|
|
|
|
|
// Mock.Of<IFileService>(),
|
|
|
|
|
// Mock.Of<IContentTypeService>(),
|
|
|
|
|
// umbracoContextAccessor,
|
|
|
|
|
// Mock.Of<IEventAggregator>(),
|
|
|
|
|
// domainCache ?? Mock.Of<IDomainCache>());
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// protected IUmbracoContextAccessor GetUmbracoContextAccessor(string urlAsString)
|
|
|
|
|
// {
|
|
|
|
|
// var snapshot = GetPublishedSnapshot();
|
|
|
|
|
//
|
|
|
|
|
// var uri = new Uri(urlAsString.Contains(Uri.SchemeDelimiter)
|
|
|
|
|
// ? urlAsString
|
|
|
|
|
// : $"http://example.com{urlAsString}");
|
|
|
|
|
//
|
|
|
|
|
// var umbracoContext = Mock.Of<IUmbracoContext>(
|
|
|
|
|
// x => x.CleanedUmbracoUrl == uri
|
|
|
|
|
// && x.Content == snapshot.Content
|
|
|
|
|
// && x.PublishedSnapshot == snapshot);
|
|
|
|
|
// var umbracoContextAccessor = new TestUmbracoContextAccessor(umbracoContext);
|
|
|
|
|
// return umbracoContextAccessor;
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// /// <summary>
|
|
|
|
|
// /// Used as a property editor for any test property that has an editor alias called "Umbraco.Void.RTE"
|
|
|
|
|
// /// </summary>
|
|
|
|
|
// private class TestSimpleTinyMceValueConverter : SimpleTinyMceValueConverter
|
|
|
|
|
// {
|
|
|
|
|
// public override bool IsConverter(IPublishedPropertyType propertyType)
|
|
|
|
|
// => propertyType.EditorAlias == "Umbraco.Void.RTE";
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// protected static DataType[] GetDefaultDataTypes()
|
|
|
|
|
// {
|
|
|
|
|
// var serializer = new SystemTextConfigurationEditorJsonSerializer();
|
|
|
|
|
//
|
|
|
|
|
// // create data types, property types and content types
|
|
|
|
|
// var dataType =
|
|
|
|
|
// new DataType(new VoidEditor("Editor", Mock.Of<IDataValueEditorFactory>()), serializer) { Id = 3 };
|
|
|
|
|
//
|
|
|
|
|
// return new[] { dataType };
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// protected virtual ServiceContext CreateServiceContext(IContentType[] contentTypes, IMediaType[] mediaTypes, IDataType[] dataTypes)
|
|
|
|
|
// {
|
|
|
|
|
// var contentTypeService = new Mock<IContentTypeService>();
|
|
|
|
|
// contentTypeService.Setup(x => x.GetAll()).Returns(contentTypes);
|
|
|
|
|
// contentTypeService.Setup(x => x.GetAll(It.IsAny<int[]>())).Returns(contentTypes);
|
|
|
|
|
// contentTypeService.Setup(x => x.Get(It.IsAny<string>()))
|
|
|
|
|
// .Returns((string alias) => contentTypes.FirstOrDefault(x => x.Alias.InvariantEquals(alias)));
|
|
|
|
|
//
|
|
|
|
|
// var mediaTypeService = new Mock<IMediaTypeService>();
|
|
|
|
|
// mediaTypeService.Setup(x => x.GetAll()).Returns(mediaTypes);
|
|
|
|
|
// mediaTypeService.Setup(x => x.GetAll(It.IsAny<int[]>())).Returns(mediaTypes);
|
|
|
|
|
// mediaTypeService.Setup(x => x.Get(It.IsAny<string>()))
|
|
|
|
|
// .Returns((string alias) => mediaTypes.FirstOrDefault(x => x.Alias.InvariantEquals(alias)));
|
|
|
|
|
//
|
|
|
|
|
// var contentTypeServiceBaseFactory = new Mock<IContentTypeBaseServiceProvider>();
|
|
|
|
|
// contentTypeServiceBaseFactory.Setup(x => x.For(It.IsAny<IContentBase>()))
|
|
|
|
|
// .Returns(contentTypeService.Object);
|
|
|
|
|
//
|
|
|
|
|
// var dataTypeServiceMock = new Mock<IDataTypeService>();
|
|
|
|
|
// dataTypeServiceMock.Setup(x => x.GetAll()).Returns(dataTypes);
|
|
|
|
|
//
|
|
|
|
|
// return ServiceContext.CreatePartial(
|
|
|
|
|
// dataTypeService: dataTypeServiceMock.Object,
|
|
|
|
|
// memberTypeService: Mock.Of<IMemberTypeService>(),
|
|
|
|
|
// memberService: Mock.Of<IMemberService>(),
|
|
|
|
|
// contentTypeService: contentTypeService.Object,
|
|
|
|
|
// mediaTypeService: mediaTypeService.Object,
|
|
|
|
|
// localizationService: Mock.Of<ILocalizationService>(),
|
|
|
|
|
// domainService: Mock.Of<IDomainService>(),
|
|
|
|
|
// fileService: Mock.Of<IFileService>());
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// /// <summary>
|
|
|
|
|
// /// Creates a published snapshot and set the accessor to resolve the created one
|
|
|
|
|
// /// </summary>
|
|
|
|
|
// /// <returns></returns>
|
|
|
|
|
// protected IPublishedSnapshot GetPublishedSnapshot()
|
|
|
|
|
// {
|
|
|
|
|
// var snapshot = SnapshotService.CreatePublishedSnapshot(null);
|
|
|
|
|
// PublishedSnapshotAccessor.SetCurrent(snapshot);
|
|
|
|
|
// return snapshot;
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// /// <summary>
|
|
|
|
|
// /// Initializes the <see cref="IPublishedSnapshotService" /> with a source of data.
|
|
|
|
|
// /// </summary>
|
|
|
|
|
// protected void InitializedCache(
|
|
|
|
|
// IEnumerable<ContentNodeKit> contentNodeKits,
|
|
|
|
|
// IContentType[] contentTypes,
|
|
|
|
|
// IDataType[] dataTypes = null,
|
|
|
|
|
// IEnumerable<ContentNodeKit> mediaNodeKits = null,
|
|
|
|
|
// IMediaType[] mediaTypes = null)
|
|
|
|
|
// {
|
|
|
|
|
// // create a data source for NuCache
|
|
|
|
|
// NuCacheContentService = new TestNuCacheContentService(contentNodeKits, mediaNodeKits);
|
|
|
|
|
//
|
|
|
|
|
// var runtime = Mock.Of<IRuntimeState>();
|
|
|
|
|
// Mock.Get(runtime).Setup(x => x.Level).Returns(RuntimeLevel.Run);
|
|
|
|
|
//
|
|
|
|
|
// // create a service context
|
|
|
|
|
// var serviceContext = CreateServiceContext(
|
|
|
|
|
// contentTypes ?? Array.Empty<IContentType>(),
|
|
|
|
|
// mediaTypes ?? Array.Empty<IMediaType>(),
|
|
|
|
|
// dataTypes ?? GetDefaultDataTypes());
|
|
|
|
|
//
|
|
|
|
|
// DataTypeService = serviceContext.DataTypeService;
|
|
|
|
|
// ContentTypeService = serviceContext.ContentTypeService;
|
|
|
|
|
// MediaTypeService = serviceContext.MediaTypeService;
|
|
|
|
|
// DomainService = serviceContext.DomainService;
|
|
|
|
|
//
|
|
|
|
|
// // create a scope provider
|
|
|
|
|
// var scopeProvider = Mock.Of<IScopeProvider>();
|
|
|
|
|
// Mock.Get(scopeProvider)
|
|
|
|
|
// .Setup(x => x.CreateScope(
|
|
|
|
|
// It.IsAny<IsolationLevel>(),
|
|
|
|
|
// It.IsAny<RepositoryCacheMode>(),
|
|
|
|
|
// It.IsAny<IEventDispatcher>(),
|
|
|
|
|
// It.IsAny<IScopedNotificationPublisher>(),
|
|
|
|
|
// It.IsAny<bool?>(),
|
|
|
|
|
// It.IsAny<bool>(),
|
|
|
|
|
// It.IsAny<bool>()))
|
|
|
|
|
// .Returns(Mock.Of<IScope>);
|
|
|
|
|
//
|
|
|
|
|
// // create a published content type factory
|
|
|
|
|
// PublishedContentTypeFactory = new PublishedContentTypeFactory(
|
|
|
|
|
// PublishedModelFactory,
|
|
|
|
|
// PropertyValueConverterCollection,
|
|
|
|
|
// DataTypeService);
|
|
|
|
|
//
|
|
|
|
|
// var typeFinder = TestHelper.GetTypeFinder();
|
|
|
|
|
//
|
|
|
|
|
// var nuCacheSettings = new NuCacheSettings();
|
|
|
|
|
//
|
|
|
|
|
// // at last, create the complete NuCache snapshot service!
|
|
|
|
|
// var options = new PublishedSnapshotServiceOptions { IgnoreLocalDb = true };
|
|
|
|
|
// SnapshotService = new PublishedSnapshotService(
|
|
|
|
|
// options,
|
|
|
|
|
// Mock.Of<ISyncBootStateAccessor>(x => x.GetSyncBootState() == SyncBootState.WarmBoot),
|
|
|
|
|
// new SimpleMainDom(),
|
|
|
|
|
// serviceContext,
|
|
|
|
|
// PublishedContentTypeFactory,
|
|
|
|
|
// PublishedSnapshotAccessor,
|
|
|
|
|
// VariationContextAccessor,
|
|
|
|
|
// Mock.Of<IProfilingLogger>(),
|
|
|
|
|
// NullLoggerFactory.Instance,
|
|
|
|
|
// scopeProvider,
|
|
|
|
|
// NuCacheContentService,
|
|
|
|
|
// new TestDefaultCultureAccessor(),
|
|
|
|
|
// Options.Create(GlobalSettings),
|
|
|
|
|
// PublishedModelFactory,
|
|
|
|
|
// TestHelper.GetHostingEnvironment(),
|
|
|
|
|
// Options.Create(nuCacheSettings),
|
|
|
|
|
// new ContentDataSerializer(new DictionaryOfPropertyDataSerializer()));
|
|
|
|
|
//
|
|
|
|
|
// // invariant is the current default
|
|
|
|
|
// VariationContextAccessor.VariationContext = new VariationContext();
|
|
|
|
|
//
|
|
|
|
|
// PublishedValueFallback = new PublishedValueFallback(serviceContext, VariationContextAccessor);
|
|
|
|
|
// }
|
|
|
|
|
// }
|