67 lines
2.6 KiB
C#
67 lines
2.6 KiB
C#
using BuildFlow.Platform.Application.Users.DTOs;
|
|
using BuildFlow.Platform.Application.Users.Handlers;
|
|
using BuildFlow.Platform.Application.Users.Queries;
|
|
using File.Application.Features.Files.DTOs;
|
|
using File.Application.Features.Files.Queries;
|
|
using MediatR;
|
|
using NSubstitute;
|
|
using Xunit;
|
|
|
|
namespace BuildFlow.Platform.Tests.Users;
|
|
|
|
/// <summary>
|
|
/// 批量用户摘要查询测试。覆盖去重、缺失用户过滤、头像返回和空输入短路。
|
|
/// </summary>
|
|
public class GetUserSummariesQueryHandlerTests
|
|
{
|
|
[Fact]
|
|
public async Task Handle_ShouldReturnDistinctExistingUsersByGuid()
|
|
{
|
|
await using var db = PlatformTestDb.CreateDbContext();
|
|
var aliceId = Guid.NewGuid();
|
|
var bobId = Guid.NewGuid();
|
|
var missingId = Guid.NewGuid();
|
|
var alice = await PlatformTestDb.SeedUserAsync(db, aliceId, "alice");
|
|
var bob = await PlatformTestDb.SeedUserAsync(db, bobId, "bob");
|
|
alice.Avatar = "avatars/alice.png";
|
|
bob.Avatar = null;
|
|
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 GetUserSummariesQueryHandler(db, mediator);
|
|
|
|
var result = await handler.Handle(
|
|
new GetUserSummariesQuery([aliceId, bobId, aliceId, missingId]),
|
|
CancellationToken.None);
|
|
|
|
Assert.Equal(2, result.Count);
|
|
Assert.Equal(new UserSummaryDto(
|
|
aliceId,
|
|
"alice",
|
|
"/api/files/preview?objectKey=avatars%2Falice.png"), result[aliceId]);
|
|
Assert.Equal(new UserSummaryDto(bobId, "bob", null), result[bobId]);
|
|
Assert.False(result.ContainsKey(missingId));
|
|
await mediator.Received(1).Send(
|
|
Arg.Is<ResolveFilePreviewPathsQuery>(query =>
|
|
query.References.SequenceEqual(new string?[] { "avatars/alice.png" })),
|
|
Arg.Any<CancellationToken>());
|
|
}
|
|
|
|
[Fact]
|
|
public async Task Handle_EmptyIds_ShouldReturnEmptyResult()
|
|
{
|
|
await using var db = PlatformTestDb.CreateDbContext();
|
|
var mediator = Substitute.For<IMediator>();
|
|
var handler = new GetUserSummariesQueryHandler(db, mediator);
|
|
|
|
var result = await handler.Handle(new GetUserSummariesQuery([]), CancellationToken.None);
|
|
|
|
Assert.Empty(result);
|
|
Assert.Empty(mediator.ReceivedCalls());
|
|
}
|
|
}
|