33 lines
1.0 KiB
C#
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(); }
|
|
}
|