build-flow.api/tests/BuildFlow.IM.Integration.Tests/InMemoryUserSummaryQueryHandler.cs

33 lines
1.1 KiB
C#

using BuildFlow.Platform.Application.Users.DTOs;
using BuildFlow.Platform.Application.Users.Queries;
using MediatR;
namespace BuildFlow.IM.Integration.Tests;
/// <summary>
/// 进程内用户摘要查询处理器。测试前可预置用户展示名和头像,由 MediatR 按用户 ID 批量返回。
/// </summary>
public sealed class InMemoryUserSummaryQueryHandler
: IRequestHandler<GetUserSummariesQuery, IReadOnlyDictionary<Guid, UserSummaryDto>>
{
private readonly Dictionary<Guid, UserSummaryDto> _users = new();
/// <summary>
/// 预置一个用户摘要。
/// </summary>
public void SetUser(Guid userId, string username, string? avatar = null) =>
_users[userId] = new UserSummaryDto(userId, username, avatar);
public Task<IReadOnlyDictionary<Guid, UserSummaryDto>> Handle(
GetUserSummariesQuery request,
CancellationToken ct)
{
IReadOnlyDictionary<Guid, UserSummaryDto> result = request.UserIds
.Distinct()
.Where(_users.ContainsKey)
.ToDictionary(userId => userId, userId => _users[userId]);
return Task.FromResult(result);
}
}