using BuildFlow.Domain.Interfaces;
namespace BuildFlow.Rag.Tests.Stub;
///
/// Stub IChatMessageCache:内存字典模拟 Redis cache,验证双写一致性。
///
public sealed class StubChatMessageCache : IChatMessageCache
{
private readonly Dictionary> _store = new();
public Task?> GetMessagesAsync(Guid conversationId, CancellationToken ct = default)
{
_store.TryGetValue(conversationId, out var list);
return Task.FromResult(list);
}
public Task SetMessagesAsync(Guid conversationId, List messages, CancellationToken ct = default)
{
_store[conversationId] = messages.ToList();
return Task.CompletedTask;
}
public Task AppendMessageAsync(Guid conversationId, CachedChatMessage message, CancellationToken ct = default)
{
if (!_store.TryGetValue(conversationId, out var list))
{
list = [];
_store[conversationId] = list;
}
list.Add(message);
return Task.CompletedTask;
}
public Task RemoveAsync(Guid conversationId, CancellationToken ct = default)
{
_store.Remove(conversationId);
return Task.CompletedTask;
}
/// 测试辅助:获取某会话缓存消息数。
public int Count(Guid conversationId)
=> _store.TryGetValue(conversationId, out var list) ? list.Count : 0;
}