283 lines
8.5 KiB
C#
283 lines
8.5 KiB
C#
using Infrastructure;
|
||
using Microsoft.Extensions.Configuration;
|
||
using Xunit;
|
||
using ZR.Common;
|
||
using ZR.Model.Business.Dto;
|
||
|
||
namespace ZR.Tests
|
||
{
|
||
/// <summary>
|
||
/// CosService 单元测试
|
||
/// </summary>
|
||
public class CosServiceTests : IClassFixture<TestFixture>
|
||
{
|
||
public CosServiceTests(TestFixture fixture)
|
||
{
|
||
// 确保配置已初始化
|
||
}
|
||
|
||
/// <summary>
|
||
/// 测试URL生成逻辑 - 验证返回的图片数量与请求数量一致
|
||
/// </summary>
|
||
[Fact]
|
||
public void GetUploadUrls_ReturnsCorrectImageCount()
|
||
{
|
||
// Arrange
|
||
var request = new CosUploadUrlsRequest
|
||
{
|
||
RecordTime = DateTime.Now,
|
||
DeptName = "测试部门",
|
||
Content = "测试内容",
|
||
Workers = new List<string> { "张三", "李四" },
|
||
FileExt = ".jpg",
|
||
ImageCount = 3
|
||
};
|
||
|
||
// Act
|
||
var response = CosService.GetUploadUrls(request);
|
||
|
||
// Assert
|
||
Assert.NotNull(response);
|
||
Assert.NotNull(response.Images);
|
||
Assert.Equal(3, response.Images.Count);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 测试URL生成逻辑 - 验证每张图片都有完整的URL结构
|
||
/// </summary>
|
||
[Fact]
|
||
public void GetUploadUrls_ReturnsCompleteUrlStructure()
|
||
{
|
||
// Arrange
|
||
var request = new CosUploadUrlsRequest
|
||
{
|
||
RecordTime = DateTime.Now,
|
||
DeptName = "测试部门",
|
||
Content = "测试内容",
|
||
Workers = new List<string> { "张三", "李四" },
|
||
FileExt = ".jpg",
|
||
ImageCount = 1
|
||
};
|
||
|
||
// Act
|
||
var response = CosService.GetUploadUrls(request);
|
||
|
||
// Assert
|
||
Assert.NotNull(response);
|
||
Assert.Single(response.Images);
|
||
|
||
var image = response.Images[0];
|
||
Assert.NotNull(image.ImageId);
|
||
Assert.NotNull(image.FileName);
|
||
Assert.NotNull(image.AccessUrl);
|
||
Assert.NotNull(image.UploadUrls);
|
||
Assert.NotNull(image.UploadUrls.Daily);
|
||
Assert.NotNull(image.UploadUrls.Content);
|
||
Assert.NotNull(image.UploadUrls.Dept);
|
||
Assert.NotNull(image.UploadUrls.Workers);
|
||
Assert.Equal(2, image.UploadUrls.Workers.Count);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 测试目录路径格式 - 验证路径包含正确的日期格式
|
||
/// </summary>
|
||
[Fact]
|
||
public void GetUploadUrls_PathContainsCorrectDateFormat()
|
||
{
|
||
// Arrange
|
||
var recordTime = new DateTime(2025, 1, 5, 10, 30, 0);
|
||
var request = new CosUploadUrlsRequest
|
||
{
|
||
RecordTime = recordTime,
|
||
DeptName = "测试部门",
|
||
Content = "测试内容",
|
||
Workers = new List<string> { "张三" },
|
||
FileExt = ".jpg",
|
||
ImageCount = 1
|
||
};
|
||
|
||
// Act
|
||
var response = CosService.GetUploadUrls(request);
|
||
|
||
// Assert
|
||
Assert.NotNull(response);
|
||
var image = response.Images[0];
|
||
|
||
// 验证AccessUrl包含正确的日期路径格式
|
||
Assert.Contains("/workfiles/202501/20250105/", image.AccessUrl);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 测试目录路径格式 - 验证路径包含正确的分类目录
|
||
/// </summary>
|
||
[Fact]
|
||
public void GetUploadUrls_PathContainsCorrectCategories()
|
||
{
|
||
// Arrange
|
||
var request = new CosUploadUrlsRequest
|
||
{
|
||
RecordTime = DateTime.Now,
|
||
DeptName = "测试部门",
|
||
Content = "测试内容",
|
||
Workers = new List<string> { "张三" },
|
||
FileExt = ".jpg",
|
||
ImageCount = 1
|
||
};
|
||
|
||
// Act
|
||
var response = CosService.GetUploadUrls(request);
|
||
|
||
// Assert
|
||
Assert.NotNull(response);
|
||
var image = response.Images[0];
|
||
|
||
// 验证AccessUrl包含当日照片目录
|
||
Assert.Contains("/当日照片/", image.AccessUrl);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 测试文件名格式 - 验证文件名包含时间戳和扩展名
|
||
/// </summary>
|
||
[Fact]
|
||
public void GetUploadUrls_FileNameHasCorrectFormat()
|
||
{
|
||
// Arrange
|
||
var request = new CosUploadUrlsRequest
|
||
{
|
||
RecordTime = DateTime.Now,
|
||
DeptName = "测试部门",
|
||
Content = "测试内容",
|
||
Workers = new List<string> { "张三" },
|
||
FileExt = ".png",
|
||
ImageCount = 1
|
||
};
|
||
|
||
// Act
|
||
var response = CosService.GetUploadUrls(request);
|
||
|
||
// Assert
|
||
Assert.NotNull(response);
|
||
var image = response.Images[0];
|
||
|
||
// 验证文件名以指定扩展名结尾
|
||
Assert.EndsWith(".png", image.FileName);
|
||
// 验证文件名包含下划线(时间戳_随机数格式)
|
||
Assert.Contains("_", image.FileName);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 测试空Workers列表
|
||
/// </summary>
|
||
[Fact]
|
||
public void GetUploadUrls_WithEmptyWorkers_ReturnsEmptyWorkersUrls()
|
||
{
|
||
// Arrange
|
||
var request = new CosUploadUrlsRequest
|
||
{
|
||
RecordTime = DateTime.Now,
|
||
DeptName = "测试部门",
|
||
Content = "测试内容",
|
||
Workers = new List<string>(),
|
||
FileExt = ".jpg",
|
||
ImageCount = 1
|
||
};
|
||
|
||
// Act
|
||
var response = CosService.GetUploadUrls(request);
|
||
|
||
// Assert
|
||
Assert.NotNull(response);
|
||
var image = response.Images[0];
|
||
Assert.NotNull(image.UploadUrls.Workers);
|
||
Assert.Empty(image.UploadUrls.Workers);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 测试COS URL验证 - 有效URL
|
||
/// </summary>
|
||
[Fact]
|
||
public void IsValidCosUrl_WithValidUrl_ReturnsTrue()
|
||
{
|
||
// Arrange
|
||
var validUrl = "https://miaoyu-1308826010.cos.ap-shanghai.myqcloud.com/workfiles/202501/20250105/当日照片/test.jpg";
|
||
|
||
// Act
|
||
var result = CosService.IsValidCosUrl(validUrl);
|
||
|
||
// Assert
|
||
Assert.True(result);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 测试COS URL验证 - 无效URL
|
||
/// </summary>
|
||
[Fact]
|
||
public void IsValidCosUrl_WithInvalidUrl_ReturnsFalse()
|
||
{
|
||
// Arrange
|
||
var invalidUrl = "https://other-domain.com/workfiles/test.jpg";
|
||
|
||
// Act
|
||
var result = CosService.IsValidCosUrl(invalidUrl);
|
||
|
||
// Assert
|
||
Assert.False(result);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 测试COS URL验证 - 空URL
|
||
/// </summary>
|
||
[Fact]
|
||
public void IsValidCosUrl_WithEmptyUrl_ReturnsFalse()
|
||
{
|
||
// Act
|
||
var result = CosService.IsValidCosUrl("");
|
||
|
||
// Assert
|
||
Assert.False(result);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 测试获取临时密钥
|
||
/// </summary>
|
||
[Fact]
|
||
public void GetTempCredentials_ReturnsValidCredentials()
|
||
{
|
||
// Act
|
||
var credentials = CosService.GetTempCredentials();
|
||
|
||
// Assert
|
||
Assert.NotNull(credentials);
|
||
Assert.NotNull(credentials.SecretId);
|
||
Assert.NotNull(credentials.SecretKey);
|
||
Assert.NotNull(credentials.Region);
|
||
Assert.NotNull(credentials.Bucket);
|
||
Assert.NotNull(credentials.DomainUrl);
|
||
Assert.NotNull(credentials.Prefixes);
|
||
Assert.True(credentials.DurationSecond > 0);
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 测试夹具 - 初始化配置
|
||
/// </summary>
|
||
public class TestFixture : IDisposable
|
||
{
|
||
public TestFixture()
|
||
{
|
||
var configuration = new ConfigurationBuilder()
|
||
.SetBasePath(Directory.GetCurrentDirectory())
|
||
.AddJsonFile("appsettings.test.json", optional: false, reloadOnChange: true)
|
||
.Build();
|
||
|
||
// 初始化AppSettings
|
||
new AppSettings(configuration);
|
||
}
|
||
|
||
public void Dispose()
|
||
{
|
||
// 清理资源
|
||
}
|
||
}
|
||
}
|