Files
Umbraco-CMS/tests/Umbraco.Tests.Integration/Umbraco.Core/IO/FileSystemsTests.cs

157 lines
6.0 KiB
C#
Raw Normal View History

// Copyright (c) Umbraco.
// See LICENSE for more details.
2017-05-12 14:49:44 +02:00
using System.Text;
using NUnit.Framework;
using Umbraco.Cms.Core.Hosting;
using Umbraco.Cms.Core.IO;
using Umbraco.Cms.Core.IO.MediaPathSchemes;
using Umbraco.Cms.Tests.Common.Attributes;
using Umbraco.Cms.Tests.Common.Testing;
using Umbraco.Cms.Tests.Integration.Testing;
2017-05-12 14:49:44 +02:00
namespace Umbraco.Cms.Tests.Integration.Umbraco.Core.IO;
[TestFixture]
[UmbracoTest]
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 18:02:31 +01:00
internal sealed class FileSystemsTests : UmbracoIntegrationTest
2017-05-12 14:49:44 +02:00
{
[Test]
public void Can_Get_MediaFileManager()
2017-05-12 14:49:44 +02:00
{
var fileSystem = GetRequiredService<MediaFileManager>();
Assert.NotNull(fileSystem);
}
2019-01-08 12:52:16 +01:00
[Test]
public void MediaFileManager_Is_Singleton()
{
var fileManager1 = GetRequiredService<MediaFileManager>();
var fileManager2 = GetRequiredService<MediaFileManager>();
Assert.AreSame(fileManager1, fileManager2);
}
2017-05-12 14:49:44 +02:00
[Test]
[LongRunning]
public void Can_Delete_MediaFiles()
{
var mediaFileManager = GetRequiredService<MediaFileManager>();
var memoryStream = new MemoryStream(Encoding.UTF8.GetBytes("test"));
var virtualPath = mediaFileManager.GetMediaPath("file.txt", Guid.NewGuid(), Guid.NewGuid());
mediaFileManager.FileSystem.AddFile(virtualPath, memoryStream);
2017-05-12 14:49:44 +02:00
// ~/media/1234/file.txt exists
var hostingEnvironment = GetRequiredService<IHostingEnvironment>();
var physPath = hostingEnvironment.MapPathWebRoot(Path.Combine("media", virtualPath));
Assert.IsTrue(File.Exists(physPath));
2017-05-12 14:49:44 +02:00
// ~/media/1234/file.txt is gone
mediaFileManager.DeleteMediaFiles(new[] { virtualPath });
Assert.IsFalse(File.Exists(physPath));
2017-05-12 14:49:44 +02:00
var scheme = GetRequiredService<IMediaPathScheme>();
if (scheme is UniqueMediaPathScheme)
{
// ~/media/1234 is *not* gone
2017-05-12 14:49:44 +02:00
physPath = Path.GetDirectoryName(physPath);
Assert.IsTrue(Directory.Exists(physPath));
}
else
2017-07-20 11:21:28 +02:00
{
// ~/media/1234 is gone
physPath = Path.GetDirectoryName(physPath);
Assert.IsFalse(Directory.Exists(physPath));
2017-07-20 11:21:28 +02:00
}
2017-05-12 14:49:44 +02:00
// ~/media exists
physPath = Path.GetDirectoryName(physPath);
Assert.IsTrue(Directory.Exists(physPath));
}
2017-05-12 14:49:44 +02:00
[Test]
public void Can_Add_Suffix_To_Media_Files()
{
var mediaFileManager = GetRequiredService<MediaFileManager>();
var hostingEnvironment = GetRequiredService<IHostingEnvironment>();
CreateMediaFile(mediaFileManager, hostingEnvironment, out string virtualPath, out string physicalPath);
Assert.IsTrue(File.Exists(physicalPath));
mediaFileManager.SuffixMediaFiles([virtualPath], Cms.Core.Constants.Conventions.Media.TrashedMediaSuffix);
Assert.IsFalse(File.Exists(physicalPath));
var virtualPathWithSuffix = virtualPath.Replace("file.txt", $"file{Cms.Core.Constants.Conventions.Media.TrashedMediaSuffix}.txt");
physicalPath = hostingEnvironment.MapPathWebRoot(Path.Combine("media", virtualPathWithSuffix));
Assert.IsTrue(File.Exists(physicalPath));
}
[Test]
public void Can_Remove_Suffix_From_Media_Files()
{
var mediaFileManager = GetRequiredService<MediaFileManager>();
var hostingEnvironment = GetRequiredService<IHostingEnvironment>();
CreateMediaFile(mediaFileManager, hostingEnvironment, out string virtualPath, out string physicalPath);
mediaFileManager.SuffixMediaFiles([virtualPath], Cms.Core.Constants.Conventions.Media.TrashedMediaSuffix);
Assert.IsFalse(File.Exists(physicalPath));
mediaFileManager.RemoveSuffixFromMediaFiles([virtualPath], Cms.Core.Constants.Conventions.Media.TrashedMediaSuffix);
Assert.IsFalse(File.Exists(physicalPath));
var virtualPathWithSuffix = virtualPath.Replace("file.txt", $"file{Cms.Core.Constants.Conventions.Media.TrashedMediaSuffix}.txt");
physicalPath = hostingEnvironment.MapPathWebRoot(Path.Combine("media", virtualPathWithSuffix));
Assert.IsTrue(File.Exists(physicalPath));
}
private static void CreateMediaFile(
MediaFileManager mediaFileManager,
IHostingEnvironment hostingEnvironment,
out string virtualPath,
out string physicalPath)
{
virtualPath = mediaFileManager.GetMediaPath("file.txt", Guid.NewGuid(), Guid.NewGuid());
physicalPath = hostingEnvironment.MapPathWebRoot(Path.Combine("media", virtualPath));
var memoryStream = new MemoryStream(Encoding.UTF8.GetBytes("test"));
mediaFileManager.FileSystem.AddFile(virtualPath, memoryStream);
Assert.IsTrue(File.Exists(physicalPath));
}
// TODO: don't make sense anymore
/*
[Test]
public void Cannot_Get_InvalidFileSystem()
{
// throws because InvalidTypedFileSystem does not have the proper attribute with an alias
Assert.Throws<InvalidOperationException>(() => FileSystems.GetFileSystem<InvalidFileSystem>());
}
2017-05-12 14:49:44 +02:00
[Test]
public void Cannot_Get_NonConfiguredFileSystem()
{
// note: we need to reset the manager between tests else the Accept_Fallback test would corrupt that one
// throws because NonConfiguredFileSystem has the proper attribute with an alias,
// but then the container cannot find an IFileSystem implementation for that alias
Assert.Throws<InvalidOperationException>(() => FileSystems.GetFileSystem<NonConfiguredFileSystem>());
2017-05-12 14:49:44 +02:00
// all we'd need to pass is to register something like:
//_container.Register<IFileSystem>("noconfig", factory => new PhysicalFileSystem("~/foo"));
}
internal class InvalidFileSystem : FileSystemWrapper
{
public InvalidFileSystem(IFileSystem innerFileSystem)
: base(innerFileSystem)
{ }
}
[InnerFileSystem("noconfig")]
internal class NonConfiguredFileSystem : FileSystemWrapper
{
public NonConfiguredFileSystem(IFileSystem innerFileSystem)
: base(innerFileSystem)
{ }
2017-05-12 14:49:44 +02:00
}
*/
2017-05-12 14:49:44 +02:00
}