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; /// /// 当前用户查询测试。头像引用必须通过 File Application 批量路径查询解析。 /// 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(); mediator.Send(Arg.Any(), Arg.Any()) .Returns(Task.FromResult>( [ 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(query => query.References.SequenceEqual(new string?[] { "avatars/alice.png" })), Arg.Any()); } }