using File.Application.Events;
using FluentAssertions;
using Microsoft.Extensions.Logging;
using Moq;
using Xunit;
namespace BuildFlow.File.Tests;
///
/// 6 个领域事件处理器测试。这些 Handler(INotificationHandler<TEvent>)仅记录日志,无异常分支,
/// 通过 INotification 触发,断言:正常完成且恰好记录一次 Information 日志。
/// 触发方式:直接 new XxxEventHandler(logger).Handle(event, ct)。
///
public class FileEventHandlersTests
{
private static void VerifyLoggedOnce(Mock> logger) where T : class
{
logger.Verify(l => l.Log(
LogLevel.Information,
It.IsAny(),
It.IsAny(),
It.IsAny(),
It.IsAny>()), Times.Once);
}
[Fact]
public async Task ShareDownloaded_记录日志且不抛异常()
{
var logger = new Mock>();
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>();
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>();
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>();
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>();
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>();
var handler = new FileUploadedEventHandler(logger.Object);
await handler.Handle(new FileUploadedEvent("bucket", "key"), CancellationToken.None);
VerifyLoggedOnce(logger);
}
}