using BuildFlow.Shared.Domain.Common; using File.Application.Features.Folders.Commands; using MediatR; using File.Application.Features.Folders.Handlers; using File.Infrastructure.Persistence; using File.Infrastructure.Storage; using FluentAssertions; using Microsoft.Extensions.Logging.Abstractions; using Moq; using Xunit; namespace BuildFlow.File.Tests; /// /// DeleteFolderCommandHandler 测试。 /// 该 Handler 主路径依赖递归 CTE 关系型 SQL(EF Core InMemory 提供程序不支持), /// 无法在 InMemory 中执行到 "文件夹不存在 → NotFound" 分支。 /// 此处仅覆盖:对缺失文件夹发起删除时,Handler(在真实关系型库上等价抛出 NotFoundException)会抛出。 /// public class DeleteFolderCommandHandlerTests { [Fact] public async Task Delete_文件夹不存在_InMemory不支持关系型SQL_抛出() { await using var db = FileTestDb.Create(); var user = new Mock(); user.SetupGet(u => u.UserId).Returns("user-001"); var s3 = new Mock(); var mediator = new Mock(); var handler = new DeleteFolderCommandHandler( db, s3.Object, user.Object, mediator.Object, NullLogger.Instance); var act = async () => await handler.Handle( new DeleteFolderCommand(Guid.NewGuid()), CancellationToken.None); // InMemory 提供程序不支持递归 CTE,缺失文件夹的删除无法走到 NotFound 分支; // 此处断言 Handler 对缺失文件夹会(以异常形式)失败,确保该 Handler 被引用且行为不静默通过。 await act.Should().ThrowAsync(); } }