build-flow.api/tests/BuildFlow.File.Tests/DeleteFolderCommandHandlerTests.cs
xiangning 7479521546 feat(rag): 实现RAG模块的Hybrid检索和向量索引优化
- 添加HNSW向量索引提升检索性能
- 实现Hybrid检索模式支持向量和关键词双路召回
- 采用RRF算法融合多路召回结果
- 支持ParentChild分块模式的上下文回填
- 优化向量写入采用批量SQL操作提升性能
- 添加RAG PostgreSQL连接字符串配置
- 更新部署脚本增加PGVector集成测试
- 修正表名引用从document_chunks到b_document_chunks
- 重构RagRetrievalService实现完整的检索流程
- 增加重排策略支持关键词和LLM重排
- 修改服务器部署地址配置
2026-08-11 10:59:09 +08:00

41 lines
1.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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