Added tests.

pull/4105/head
Halil İbrahim Kalkan 6 years ago
parent a8bd4c2ca2
commit 3a7a3fea00

@ -0,0 +1,32 @@
using System.IO;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.BlobStoring.FileSystem
{
public class DefaultBlogFilePathCalculator : IBlogFilePathCalculator, ITransientDependency
{
public virtual string Calculate(BlobProviderArgs args)
{
var fileSystemConfiguration = args.Configuration.GetFileSystemConfiguration();
var blobPath = fileSystemConfiguration.BasePath;
if (args.TenantId == null)
{
blobPath = Path.Combine(blobPath, "host");
}
else
{
blobPath = Path.Combine(blobPath, "tenants", args.TenantId.Value.ToString("D"));
}
if (fileSystemConfiguration.AppendContainerNameToBasePath)
{
blobPath = Path.Combine(blobPath, args.ContainerName);
}
blobPath = Path.Combine(blobPath, args.BlobName);
return blobPath;
}
}
}

@ -9,9 +9,16 @@ namespace Volo.Abp.BlobStoring.FileSystem
public class FileSystemBlobProvider : BlobProviderBase, ITransientDependency public class FileSystemBlobProvider : BlobProviderBase, ITransientDependency
{ {
protected IBlogFilePathCalculator FilePathCalculator { get; }
public FileSystemBlobProvider(IBlogFilePathCalculator filePathCalculator)
{
FilePathCalculator = filePathCalculator;
}
public override async Task SaveAsync(BlobProviderSaveArgs args) public override async Task SaveAsync(BlobProviderSaveArgs args)
{ {
var filePath = CalculateBlobFilePath(args); var filePath = FilePathCalculator.Calculate(args);
DirectoryHelper.CreateIfNotExists(Path.GetDirectoryName(filePath)); DirectoryHelper.CreateIfNotExists(Path.GetDirectoryName(filePath));
@ -35,21 +42,21 @@ namespace Volo.Abp.BlobStoring.FileSystem
public override Task<bool> DeleteAsync(BlobProviderDeleteArgs args) public override Task<bool> DeleteAsync(BlobProviderDeleteArgs args)
{ {
var filePath = CalculateBlobFilePath(args); var filePath = FilePathCalculator.Calculate(args);
return Task.FromResult(FileHelper.DeleteIfExists(filePath)); return Task.FromResult(FileHelper.DeleteIfExists(filePath));
} }
public override Task<bool> ExistsAsync(BlobProviderExistsArgs args) public override Task<bool> ExistsAsync(BlobProviderExistsArgs args)
{ {
var filePath = CalculateBlobFilePath(args); var filePath = FilePathCalculator.Calculate(args);
return Task.FromResult(File.Exists(filePath)); return Task.FromResult(File.Exists(filePath));
} }
public override Task<Stream> GetOrNullAsync(BlobProviderGetArgs args) public override Task<Stream> GetOrNullAsync(BlobProviderGetArgs args)
{ {
var filePath = CalculateBlobFilePath(args); var filePath = FilePathCalculator.Calculate(args);
if (!File.Exists(filePath)) if (!File.Exists(filePath))
{ {
@ -58,29 +65,5 @@ namespace Volo.Abp.BlobStoring.FileSystem
return Task.FromResult<Stream>(File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.Read)); return Task.FromResult<Stream>(File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.Read));
} }
protected virtual string CalculateBlobFilePath(BlobProviderArgs args)
{
var fileSystemConfiguration = args.Configuration.GetFileSystemConfiguration();
var blobPath = fileSystemConfiguration.BasePath;
if (args.TenantId == null)
{
blobPath = Path.Combine(blobPath, "host");
}
else
{
blobPath = Path.Combine(blobPath, "tenants", args.TenantId.Value.ToString("D"));
}
if (fileSystemConfiguration.AppendContainerNameToBasePath)
{
blobPath = Path.Combine(blobPath, args.ContainerName);
}
blobPath = Path.Combine(blobPath, args.BlobName);
return blobPath;
}
} }
} }

@ -15,7 +15,7 @@
public bool AppendContainerNameToBasePath public bool AppendContainerNameToBasePath
{ {
get => _containerConfiguration.GetConfigurationOrDefault(FileSystemBlobProviderConfigurationNames.AppendContainerNameToBasePath, true); get => _containerConfiguration.GetConfigurationOrDefault(FileSystemBlobProviderConfigurationNames.AppendContainerNameToBasePath, true);
set => _containerConfiguration.SetConfiguration(FileSystemBlobProviderConfigurationNames.BasePath, value); set => _containerConfiguration.SetConfiguration(FileSystemBlobProviderConfigurationNames.AppendContainerNameToBasePath, value);
} }
private readonly BlobContainerConfiguration _containerConfiguration; private readonly BlobContainerConfiguration _containerConfiguration;

@ -0,0 +1,7 @@
namespace Volo.Abp.BlobStoring.FileSystem
{
public interface IBlogFilePathCalculator
{
string Calculate(BlobProviderArgs args);
}
}

@ -0,0 +1,60 @@
using System;
using System.IO;
using Shouldly;
using Xunit;
namespace Volo.Abp.BlobStoring.FileSystem
{
public class BlogFilePathCalculator_Tests : AbpBlobStoringFileSystemTestBase
{
private readonly IBlogFilePathCalculator _calculator;
public BlogFilePathCalculator_Tests()
{
_calculator = GetRequiredService<IBlogFilePathCalculator>();
}
[Fact]
public void Default_Settings()
{
var separator = Path.DirectorySeparatorChar;
_calculator.Calculate(
GetArgs($"C:{separator}my-files","my-container","my-blob")
).ShouldBe($"C:{separator}my-files{separator}host{separator}my-container{separator}my-blob");
}
[Fact]
public void AppendContainerNameToBasePath_Set_To_False()
{
var separator = Path.DirectorySeparatorChar;
_calculator.Calculate(
GetArgs($"C:{separator}my-files","my-container","my-blob", appendContainerNameToBasePath: false)
).ShouldBe($"C:{separator}my-files{separator}host{separator}my-blob");
}
private BlobProviderArgs GetArgs(
string basePath,
string containerName,
string blobName,
Guid? tenantId = null,
bool? appendContainerNameToBasePath = null)
{
return new BlobProviderGetArgs(
containerName,
new BlobContainerConfiguration()
.UseFileSystem(fs =>
{
fs.BasePath = basePath;
if (appendContainerNameToBasePath.HasValue)
{
fs.AppendContainerNameToBasePath = appendContainerNameToBasePath.Value;
}
}),
blobName,
tenantId
);
}
}
}
Loading…
Cancel
Save