using FluentAssertions; using Moq; using TakeoutSaaS.Application.App.Tenants.Handlers; using TakeoutSaaS.Application.App.Tenants.Queries; using TakeoutSaaS.Application.Tests.TestUtilities; using TakeoutSaaS.Domain.Tenants.Entities; using TakeoutSaaS.Domain.Tenants.Repositories; namespace TakeoutSaaS.Application.Tests.App.Tenants.Handlers; /// /// 单元测试。 /// public sealed class GetAnnouncementByIdQueryHandlerTests { [Fact] public async Task GivenAnnouncementMissing_WhenHandle_ThenReturnsNull() { // 1. 准备 var announcementRepository = new Mock(); announcementRepository .Setup(x => x.FindByIdAsync(99, 500, It.IsAny())) .ReturnsAsync((TenantAnnouncement?)null); // 2. (空行后) 执行 var handler = new GetAnnouncementByIdQueryHandler(announcementRepository.Object); var result = await handler.Handle(new GetAnnouncementByIdQuery { TenantId = 99, AnnouncementId = 500 }, CancellationToken.None); // 3. (空行后) 断言 result.Should().BeNull(); } [Fact] public async Task GivenAnnouncementExists_WhenHandle_ThenReturnsDtoWithoutReadState() { // 1. 准备 var announcement = AnnouncementTestData.CreateAnnouncement(10, 200, 1, DateTime.UtcNow); var announcementRepository = new Mock(); announcementRepository .Setup(x => x.FindByIdAsync(200, 10, It.IsAny())) .ReturnsAsync(announcement); // 2. (空行后) 执行 var handler = new GetAnnouncementByIdQueryHandler(announcementRepository.Object); var result = await handler.Handle(new GetAnnouncementByIdQuery { TenantId = 200, AnnouncementId = 10 }, CancellationToken.None); // 3. (空行后) 断言 result.Should().NotBeNull(); result!.Id.Should().Be(announcement.Id); result.TenantId.Should().Be(announcement.TenantId); result.IsRead.Should().BeFalse(); result.ReadAt.Should().BeNull(); } }