using FluentAssertions; using IM.Application.Chat.Handlers; using IM.Application.Chat.Queries; using IM.Domain.Enums; using IM.Infrastructure.Persistence; using Xunit; namespace BuildFlow.IM.Tests.Chat; /// /// GetUserConversationIdsQueryHandler 成功路径:按用户聚合其参与的会话 ID。无鉴权分支,仅覆盖正常/空结果。 /// public class GetUserConversationIdsQueryHandlerTests { private static readonly Guid UserId = Guid.Parse("22222222-2222-2222-2222-222222222222"); private static readonly Guid ConvA = Guid.Parse("11111111-1111-1111-1111-111111111111"); private static readonly Guid ConvB = Guid.Parse("33333333-3333-3333-3333-333333333333"); [Fact] public async Task Returns_all_conversation_ids_for_user() { await using var db = IMTestDb.Create(); db.Conversations.Add(ImTestData.BuildConversation(ConvA, ConversationTypeEnum.Private, (UserId, 0))); db.Conversations.Add(ImTestData.BuildConversation(ConvB, ConversationTypeEnum.Group, (UserId, 0))); await db.SaveChangesAsync(); var handler = new GetUserConversationIdsQueryHandler(db); var result = await handler.Handle(new GetUserConversationIdsQuery(UserId), CancellationToken.None); result.Should().BeEquivalentTo(new[] { ConvA, ConvB }); } [Fact] public async Task Returns_empty_when_user_has_no_conversations() { await using var db = IMTestDb.Create(); var handler = new GetUserConversationIdsQueryHandler(db); var result = await handler.Handle(new GetUserConversationIdsQuery(UserId), CancellationToken.None); result.Should().BeEmpty(); } }