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

33 lines
1.0 KiB
C#

using IM.Domain.Common;
namespace BuildFlow.IM.Integration.Tests;
/// <summary>
/// 进程内 <see cref="IImNotificationPublisher"/> 替身:记录离线触达调用,供断言"仅离线用户收到站内信"。
/// 真实实现走 gRPC 到 rag-backend 通知中心,测试环境不依赖该服务。
/// </summary>
public sealed class FakeImNotificationPublisher : IImNotificationPublisher
{
public sealed record Call(string Type, string Title, string Content, Guid ConversationId, IReadOnlyList<Guid> Recipients);
public List<Call> Calls { get; } = new();
public Task<int> PublishAsync(
string type,
string title,
string content,
Guid conversationId,
IEnumerable<Guid> recipientUserIds,
CancellationToken ct = default)
{
var list = recipientUserIds.ToList();
lock (Calls)
{
Calls.Add(new Call(type, title, content, conversationId, list));
}
return Task.FromResult(list.Count);
}
public void Reset() { lock (Calls) Calls.Clear(); }
}