using BuildFlow.Shared.Domain.Errors; using BuildFlow.Shared.Domain.Exceptions; using FluentAssertions; using IM.Application.Chat.Handlers; using IM.Application.Chat.Queries; using IM.Infrastructure.Persistence; using MediatR; using Moq; using Xunit; namespace BuildFlow.IM.Tests.Chat; /// /// GetMessagesAroundQueryHandler:主路径依赖 MongoDB(DB.Default)。 /// 仅覆盖"依赖调用之前"的鉴权分支——非参与者拒绝(Forbidden)。 /// public class GetMessagesAroundQueryHandlerTests { private static readonly Guid UserId = Guid.Parse("22222222-2222-2222-2222-222222222222"); private static readonly Guid ConvId = Guid.Parse("11111111-1111-1111-1111-111111111111"); [Fact] public async Task Throws_forbidden_when_not_participant() { await using var db = IMTestDb.Create(); var handler = new GetMessagesAroundQueryHandler(db, new Mock().Object); var act = async () => await handler.Handle(new GetMessagesAroundQuery(UserId, ConvId, "abc"), CancellationToken.None); var ex = await act.Should().ThrowAsync(); ex.Which.Code.Should().Be(ErrorCode.Forbidden); } }