using Util.Helpers;
namespace Util.FileStorage.Tests;
///
/// 本地文件存储服务测试
///
public class LocalFileStoreTest {
///
/// 本地文件存储服务
///
private readonly ILocalFileStore _fileStore;
///
/// 测试初始化
///
public LocalFileStoreTest( ILocalFileStore fileStore ) {
_fileStore = fileStore;
}
///
/// 测试保存文件
///
[Fact]
public async Task TestSaveFileAsync_1() {
//保存文件
var path = Common.GetPhysicalPath( "~/Resources/1.jpg" );
await using var stream = File.ReadToStream( path );
var result = await _fileStore.SaveFileAsync( stream, "1.jpg" );
Assert.Equal( "upload\\1.jpg", result.FilePath );
Assert.Equal( "1.jpg", result.FileName );
Assert.Equal( "jpg", result.Extension );
//验证上传文件是否存在
var exists = await _fileStore.FileExistsAsync( "1.jpg" );
Assert.True( exists );
}
///
/// 测试保存文件 - 自定义文件名策略
///
[Fact]
public async Task TestSaveFileAsync_2() {
var path = Common.GetPhysicalPath( "~/Resources/2.png" );
await using var stream = File.ReadToStream( path );
var result = await _fileStore.SaveFileAsync( stream, "2.png","test" );
Assert.Equal( "upload\\a.png", result.FilePath );
Assert.Equal( "a.png", result.FileName );
Assert.Equal( "2.png", result.OriginalFileName );
Assert.Equal( "png", result.Extension );
}
///
/// 测试获取文件流
///
[Fact]
public async Task TestGetFileStreamAsync() {
//保存文件
var path = Common.GetPhysicalPath( "~/Resources/1.jpg" );
var fileInfo = new System.IO.FileInfo( path );
var result = await _fileStore.SaveFileAsync( fileInfo );
//验证
var exists = await _fileStore.FileExistsAsync( result.FileName );
Assert.True( exists );
//获取文件
await using var stream = await _fileStore.GetFileStreamAsync( result.FileName );
var bytes = await File.ToBytesAsync( stream );
Assert.Equal( result.Size.Size, bytes.Length );
}
///
/// 测试下载远程文件并保存到文件存储
///
[Fact]
public async Task TestSaveFileByUrlAsync_1() {
var result = await _fileStore.SaveFileByUrlAsync( "https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png", "baidu.png" );
var exists = await _fileStore.FileExistsAsync( result.FileName );
Assert.True( exists );
}
///
/// 测试复制文件
///
[Fact]
public async Task TestCopyFileAsync() {
var sourceName = "e.jpg";
var destinationName = "a/b/c/f.jpg";
//保存文件
var path = Common.GetPhysicalPath( "~/Resources/1.jpg" );
await using var stream = File.ReadToStream( path );
await _fileStore.SaveFileAsync( stream, sourceName );
//复制文件
await _fileStore.CopyFileAsync( sourceName, destinationName );
//验证
var result = await _fileStore.FileExistsAsync( sourceName );
Assert.True( result );
result = await _fileStore.FileExistsAsync( destinationName );
Assert.True( result );
}
///
/// 测试移动文件
///
[Fact]
public async Task TestMoveFileAsync() {
var sourceName = "e.jpg";
var destinationName = "a/b/c/g.jpg";
//保存文件
var path = Common.GetPhysicalPath( "~/Resources/1.jpg" );
await using var stream = File.ReadToStream( path );
await _fileStore.SaveFileAsync( stream, sourceName );
//复制文件
await _fileStore.MoveFileAsync( sourceName, destinationName );
//验证
var result = await _fileStore.FileExistsAsync( sourceName );
Assert.False( result );
result = await _fileStore.FileExistsAsync( destinationName );
Assert.True( result );
}
///
/// 测试删除文件
///
[Fact]
public async Task TestDeleteFileAsync() {
var name = "b.jpg";
//保存文件
var path = Common.GetPhysicalPath( "~/Resources/1.jpg" );
await using var stream = File.ReadToStream( path );
await _fileStore.SaveFileAsync( stream, name );
//验证已存在
var result = await _fileStore.FileExistsAsync( name );
Assert.True( result );
//删除文件
await _fileStore.DeleteFileAsync( name );
//验证已不存在
result = await _fileStore.FileExistsAsync( name );
Assert.False( result );
}
}