build-flow.api/tests/BuildFlow.File.Tests/FileEventHandlersTests.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

92 lines
3.0 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 File.Application.Events;
using FluentAssertions;
using Microsoft.Extensions.Logging;
using Moq;
using Xunit;
namespace BuildFlow.File.Tests;
/// <summary>
/// 6 个领域事件处理器测试。这些 Handler(INotificationHandler&lt;TEvent&gt;)仅记录日志,无异常分支,
/// 通过 INotification 触发,断言:正常完成且恰好记录一次 Information 日志。
/// 触发方式:直接 new XxxEventHandler(logger).Handle(event, ct)。
/// </summary>
public class FileEventHandlersTests
{
private static void VerifyLoggedOnce<T>(Mock<ILogger<T>> logger) where T : class
{
logger.Verify(l => l.Log(
LogLevel.Information,
It.IsAny<EventId>(),
It.IsAny<It.IsAnyType>(),
It.IsAny<Exception?>(),
It.IsAny<Func<It.IsAnyType, Exception?, string>>()), Times.Once);
}
[Fact]
public async Task ShareDownloaded_记录日志且不抛异常()
{
var logger = new Mock<ILogger<ShareDownloadedEventHandler>>();
var handler = new ShareDownloadedEventHandler(logger.Object);
await handler.Handle(new ShareDownloadedEvent(Guid.NewGuid(), "token-xyz"), CancellationToken.None);
VerifyLoggedOnce(logger);
}
[Fact]
public async Task FileDeleted_记录日志且不抛异常()
{
var logger = new Mock<ILogger<FileDeletedEventHandler>>();
var handler = new FileDeletedEventHandler(logger.Object);
await handler.Handle(new FileDeletedEvent("bucket", "key"), CancellationToken.None);
VerifyLoggedOnce(logger);
}
[Fact]
public async Task FolderDeleted_记录日志且不抛异常()
{
var logger = new Mock<ILogger<FolderDeletedEventHandler>>();
var handler = new FolderDeletedEventHandler(logger.Object);
await handler.Handle(new FolderDeletedEvent(Guid.NewGuid(), "user-001"), CancellationToken.None);
VerifyLoggedOnce(logger);
}
[Fact]
public async Task FolderCreated_记录日志且不抛异常()
{
var logger = new Mock<ILogger<FolderCreatedEventHandler>>();
var handler = new FolderCreatedEventHandler(logger.Object);
await handler.Handle(new FolderCreatedEvent(Guid.NewGuid(), "user-001"), CancellationToken.None);
VerifyLoggedOnce(logger);
}
[Fact]
public async Task ShareCreated_记录日志且不抛异常()
{
var logger = new Mock<ILogger<ShareCreatedEventHandler>>();
var handler = new ShareCreatedEventHandler(logger.Object);
await handler.Handle(new ShareCreatedEvent(Guid.NewGuid(), "user-001"), CancellationToken.None);
VerifyLoggedOnce(logger);
}
[Fact]
public async Task FileUploaded_记录日志且不抛异常()
{
var logger = new Mock<ILogger<FileUploadedEventHandler>>();
var handler = new FileUploadedEventHandler(logger.Object);
await handler.Handle(new FileUploadedEvent("bucket", "key"), CancellationToken.None);
VerifyLoggedOnce(logger);
}
}