using Infrastructure; using Microsoft.Extensions.Configuration; using Xunit; using ZR.Common; using ZR.Model.Business.Dto; namespace ZR.Tests { /// /// CosService 单元测试 /// public class CosServiceTests : IClassFixture { public CosServiceTests(TestFixture fixture) { // 确保配置已初始化 } /// /// 测试URL生成逻辑 - 验证返回的图片数量与请求数量一致 /// [Fact] public void GetUploadUrls_ReturnsCorrectImageCount() { // Arrange var request = new CosUploadUrlsRequest { RecordTime = DateTime.Now, DeptName = "测试部门", Content = "测试内容", Workers = new List { "张三", "李四" }, FileExt = ".jpg", ImageCount = 3 }; // Act var response = CosService.GetUploadUrls(request); // Assert Assert.NotNull(response); Assert.NotNull(response.Images); Assert.Equal(3, response.Images.Count); } /// /// 测试URL生成逻辑 - 验证每张图片都有完整的URL结构 /// [Fact] public void GetUploadUrls_ReturnsCompleteUrlStructure() { // Arrange var request = new CosUploadUrlsRequest { RecordTime = DateTime.Now, DeptName = "测试部门", Content = "测试内容", Workers = new List { "张三", "李四" }, 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); } /// /// 测试目录路径格式 - 验证路径包含正确的日期格式 /// [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 { "张三" }, 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); } /// /// 测试目录路径格式 - 验证路径包含正确的分类目录 /// [Fact] public void GetUploadUrls_PathContainsCorrectCategories() { // Arrange var request = new CosUploadUrlsRequest { RecordTime = DateTime.Now, DeptName = "测试部门", Content = "测试内容", Workers = new List { "张三" }, FileExt = ".jpg", ImageCount = 1 }; // Act var response = CosService.GetUploadUrls(request); // Assert Assert.NotNull(response); var image = response.Images[0]; // 验证AccessUrl包含当日照片目录 Assert.Contains("/当日照片/", image.AccessUrl); } /// /// 测试文件名格式 - 验证文件名包含时间戳和扩展名 /// [Fact] public void GetUploadUrls_FileNameHasCorrectFormat() { // Arrange var request = new CosUploadUrlsRequest { RecordTime = DateTime.Now, DeptName = "测试部门", Content = "测试内容", Workers = new List { "张三" }, 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); } /// /// 测试空Workers列表 /// [Fact] public void GetUploadUrls_WithEmptyWorkers_ReturnsEmptyWorkersUrls() { // Arrange var request = new CosUploadUrlsRequest { RecordTime = DateTime.Now, DeptName = "测试部门", Content = "测试内容", Workers = new List(), 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); } /// /// 测试COS URL验证 - 有效URL /// [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); } /// /// 测试COS URL验证 - 无效URL /// [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); } /// /// 测试COS URL验证 - 空URL /// [Fact] public void IsValidCosUrl_WithEmptyUrl_ReturnsFalse() { // Act var result = CosService.IsValidCosUrl(""); // Assert Assert.False(result); } /// /// 测试获取临时密钥 /// [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); } } /// /// 测试夹具 - 初始化配置 /// 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() { // 清理资源 } } }