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();
}
}