build-flow.api/tests/BuildFlow.IM.Tests/Chat/GetUnreadCountQueryHandlerTests.cs
xiangning 3b13099378 refactor(domain): 重构领域实体结构并更新枚举命名
- 将通用 Entities 命名空间拆分为具体业务实体子目录
- 更新所有实体类型引用为具体的 Entity 后缀类型
- 将 ModelType、ModelProvider、GroupMemberRole 等枚举重命名为 Enum 后缀
- 重构 AiModel 相关配置和映射逻辑适配新的实体结构
- 更新测试代码中的实体类型引用和枚举使用
- 调整应用层处理器中的实体创建和查询逻辑
- 修改 appsettings.json 中的基础设施主机配置为动态占位符模式
2026-07-19 14:02:32 +08:00

58 lines
2.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using IM.Application.Chat.Handlers;
using IM.Application.Chat.Queries;
using IM.Domain.Common;
using IM.Domain.Enums;
using IM.Infrastructure.Persistence;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Moq;
using Xunit;
namespace BuildFlow.IM.Tests.Chat;
/// <summary>
/// GetUnreadCountQueryHandler 的读扩散断言:Redis 命中必须能独立驱动未读汇总。
/// </summary>
public class GetUnreadCountQueryHandlerTests
{
private static readonly Guid UserId = Guid.Parse("22222222-2222-2222-2222-222222222222");
private static readonly Guid OtherUserId = Guid.Parse("33333333-3333-3333-3333-333333333333");
private static readonly Guid ConversationId = Guid.Parse("11111111-1111-1111-1111-111111111111");
[Fact]
public async Task Returns_redis_unread_even_when_pg_cold_backup_is_zero()
{
await using var db = BuildInMemoryDb();
db.Conversations.Add(ImTestData.BuildConversation(
ConversationId,
ConversationTypeEnum.Private,
(UserId, 0),
(OtherUserId, 0)));
await db.SaveChangesAsync();
var unreadCounter = new Mock<IUnreadCounter>();
unreadCounter
.Setup(c => c.GetByUserAsync(
UserId,
It.Is<IEnumerable<Guid>>(ids => ids.SequenceEqual(new[] { ConversationId })),
It.IsAny<CancellationToken>()))
.ReturnsAsync(new Dictionary<Guid, int> { [ConversationId] = 3 });
var handler = new GetUnreadCountQueryHandler(db, unreadCounter.Object);
var result = await handler.Handle(new GetUnreadCountQuery(UserId), CancellationToken.None);
Assert.Equal(3, result.Total);
var item = Assert.Single(result.Items);
Assert.Equal(ConversationId, item.ConversationId);
Assert.Equal(3, item.UnreadCount);
}
private static ImDbContext BuildInMemoryDb()
{
var services = new ServiceCollection();
services.AddDbContext<ImDbContext>(o => o.UseInMemoryDatabase($"im-unread-{Guid.NewGuid()}"));
return services.BuildServiceProvider().GetRequiredService<ImDbContext>();
}
}