build-flow.api/tests/BuildFlow.Platform.Tests/Auth/GetCurrentUserQueryHandlerTests.cs
2026-07-24 12:29:06 +08:00

41 lines
1.6 KiB
C#

using BuildFlow.Platform.Application.Auth.Handlers;
using BuildFlow.Platform.Application.Auth.Queries;
using File.Application.Features.Files.DTOs;
using File.Application.Features.Files.Queries;
using MediatR;
using NSubstitute;
using Xunit;
namespace BuildFlow.Platform.Tests.Auth;
/// <summary>
/// 当前用户查询测试。头像引用必须通过 File Application 批量路径查询解析。
/// </summary>
public class GetCurrentUserQueryHandlerTests
{
[Fact]
public async Task Handle_ShouldResolveAvatarThroughFileQueryOnce()
{
await using var db = PlatformTestDb.CreateDbContext();
var userId = Guid.NewGuid();
var user = await PlatformTestDb.SeedUserAsync(db, userId, "alice");
user.Avatar = "avatars/alice.png";
await db.SaveChangesAsync();
var mediator = Substitute.For<IMediator>();
mediator.Send(Arg.Any<ResolveFilePreviewPathsQuery>(), Arg.Any<CancellationToken>())
.Returns(Task.FromResult<IReadOnlyList<FilePreviewPathDto>>(
[
new("avatars/alice.png", "/api/files/preview?objectKey=avatars%2Falice.png")
]));
var handler = new GetCurrentUserQueryHandler(db, mediator);
var result = await handler.Handle(new GetCurrentUserQuery(userId.ToString()), CancellationToken.None);
Assert.Equal("/api/files/preview?objectKey=avatars%2Falice.png", result.Avatar);
await mediator.Received(1).Send(
Arg.Is<ResolveFilePreviewPathsQuery>(query =>
query.References.SequenceEqual(new string?[] { "avatars/alice.png" })),
Arg.Any<CancellationToken>());
}
}