- 添加HNSW向量索引提升检索性能 - 实现Hybrid检索模式支持向量和关键词双路召回 - 采用RRF算法融合多路召回结果 - 支持ParentChild分块模式的上下文回填 - 优化向量写入采用批量SQL操作提升性能 - 添加RAG PostgreSQL连接字符串配置 - 更新部署脚本增加PGVector集成测试 - 修正表名引用从document_chunks到b_document_chunks - 重构RagRetrievalService实现完整的检索流程 - 增加重排策略支持关键词和LLM重排 - 修改服务器部署地址配置
92 lines
3.0 KiB
C#
92 lines
3.0 KiB
C#
using File.Application.Events;
|
||
using FluentAssertions;
|
||
using Microsoft.Extensions.Logging;
|
||
using Moq;
|
||
using Xunit;
|
||
|
||
namespace BuildFlow.File.Tests;
|
||
|
||
/// <summary>
|
||
/// 6 个领域事件处理器测试。这些 Handler(INotificationHandler<TEvent>)仅记录日志,无异常分支,
|
||
/// 通过 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);
|
||
}
|
||
}
|