diff --git a/src/Application/TakeoutSaaS.Application/App/Tenants/Handlers/CreateTenantAnnouncementCommandHandler.cs b/src/Application/TakeoutSaaS.Application/App/Tenants/Handlers/CreateTenantAnnouncementCommandHandler.cs index 3521ffc..79dbb72 100644 --- a/src/Application/TakeoutSaaS.Application/App/Tenants/Handlers/CreateTenantAnnouncementCommandHandler.cs +++ b/src/Application/TakeoutSaaS.Application/App/Tenants/Handlers/CreateTenantAnnouncementCommandHandler.cs @@ -1,6 +1,7 @@ using MediatR; using TakeoutSaaS.Application.App.Tenants.Commands; using TakeoutSaaS.Application.App.Tenants.Dto; +using TakeoutSaaS.Application.App.Tenants.Targeting; using TakeoutSaaS.Domain.Tenants.Entities; using TakeoutSaaS.Domain.Tenants.Enums; using TakeoutSaaS.Domain.Tenants.Repositories; @@ -57,6 +58,11 @@ public sealed class CreateTenantAnnouncementCommandHandler( { throw new BusinessException(ErrorCodes.ValidationFailed, "目标受众类型不能为空"); } + // 4.1 (空行后) 校验目标受众类型:租户端禁止跨租户目标类型 + if (!TenantAnnouncementTargetTypePolicy.IsAllowed(request.TargetType)) + { + throw new BusinessException(ErrorCodes.ValidationFailed, "租户端不支持该目标受众类型"); + } if (request.EffectiveTo.HasValue && request.EffectiveFrom >= request.EffectiveTo.Value) { @@ -66,6 +72,8 @@ public sealed class CreateTenantAnnouncementCommandHandler( // 5. (空行后) 构建公告实体 var tenantId = currentTenantId; var publisherUserId = currentUserAccessor.UserId == 0 ? (long?)null : currentUserAccessor.UserId; + // 5.1 (空行后) 规范化目标类型,避免写入脏数据 + var normalizedTargetType = TenantAnnouncementTargetTypePolicy.Normalize(request.TargetType); var announcement = new TenantAnnouncement { TenantId = tenantId, @@ -78,7 +86,7 @@ public sealed class CreateTenantAnnouncementCommandHandler( PublisherScope = request.PublisherScope, PublisherUserId = publisherUserId, Status = AnnouncementStatus.Draft, - TargetType = request.TargetType.Trim(), + TargetType = normalizedTargetType, TargetParameters = request.TargetParameters }; diff --git a/src/Application/TakeoutSaaS.Application/App/Tenants/Handlers/GetAnnouncementByIdQueryHandler.cs b/src/Application/TakeoutSaaS.Application/App/Tenants/Handlers/GetAnnouncementByIdQueryHandler.cs index bdf0e81..ac7c4dd 100644 --- a/src/Application/TakeoutSaaS.Application/App/Tenants/Handlers/GetAnnouncementByIdQueryHandler.cs +++ b/src/Application/TakeoutSaaS.Application/App/Tenants/Handlers/GetAnnouncementByIdQueryHandler.cs @@ -31,8 +31,8 @@ public sealed class GetAnnouncementByIdQueryHandler( { var tenantId = tenantProvider.GetCurrentTenantId(); - // 1. 查询公告主体(含平台公告) - var announcement = await announcementRepository.FindByIdInScopeAsync(tenantId, request.AnnouncementId, cancellationToken); + // 1. 查询公告主体 + var announcement = await announcementRepository.FindByIdAsync(tenantId, request.AnnouncementId, cancellationToken); if (announcement == null) { return null; diff --git a/src/Application/TakeoutSaaS.Application/App/Tenants/Handlers/MarkAnnouncementAsReadCommandHandler.cs b/src/Application/TakeoutSaaS.Application/App/Tenants/Handlers/MarkAnnouncementAsReadCommandHandler.cs index 124af7d..caa495c 100644 --- a/src/Application/TakeoutSaaS.Application/App/Tenants/Handlers/MarkAnnouncementAsReadCommandHandler.cs +++ b/src/Application/TakeoutSaaS.Application/App/Tenants/Handlers/MarkAnnouncementAsReadCommandHandler.cs @@ -33,8 +33,8 @@ public sealed class MarkAnnouncementAsReadCommandHandler( { var tenantId = tenantProvider.GetCurrentTenantId(); - // 1. 查询公告(含平台公告) - var announcement = await announcementRepository.FindByIdInScopeAsync(tenantId, request.AnnouncementId, cancellationToken); + // 1. 查询公告 + var announcement = await announcementRepository.FindByIdAsync(tenantId, request.AnnouncementId, cancellationToken); if (announcement == null) { return null; diff --git a/src/Application/TakeoutSaaS.Application/App/Tenants/Handlers/UpdateTenantAnnouncementCommandHandler.cs b/src/Application/TakeoutSaaS.Application/App/Tenants/Handlers/UpdateTenantAnnouncementCommandHandler.cs index 6f34e4e..4df53f2 100644 --- a/src/Application/TakeoutSaaS.Application/App/Tenants/Handlers/UpdateTenantAnnouncementCommandHandler.cs +++ b/src/Application/TakeoutSaaS.Application/App/Tenants/Handlers/UpdateTenantAnnouncementCommandHandler.cs @@ -1,6 +1,7 @@ using MediatR; using TakeoutSaaS.Application.App.Tenants.Commands; using TakeoutSaaS.Application.App.Tenants.Dto; +using TakeoutSaaS.Application.App.Tenants.Targeting; using TakeoutSaaS.Domain.Tenants.Enums; using TakeoutSaaS.Domain.Tenants.Repositories; using TakeoutSaaS.Shared.Abstractions.Constants; @@ -42,6 +43,11 @@ public sealed class UpdateTenantAnnouncementCommandHandler( { throw new BusinessException(ErrorCodes.ValidationFailed, "RowVersion 不能为空"); } + // 3.1 (空行后) 校验目标受众类型:租户端禁止跨租户目标类型 + if (!TenantAnnouncementTargetTypePolicy.IsAllowed(request.TargetType)) + { + throw new BusinessException(ErrorCodes.ValidationFailed, "租户端不支持该目标受众类型"); + } // 4. (空行后) 查询公告 var announcement = await announcementRepository.FindByIdAsync(currentTenantId, request.AnnouncementId, cancellationToken); @@ -63,7 +69,7 @@ public sealed class UpdateTenantAnnouncementCommandHandler( // 5. (空行后) 更新字段 announcement.Title = request.Title.Trim(); announcement.Content = request.Content; - announcement.TargetType = string.IsNullOrWhiteSpace(request.TargetType) ? announcement.TargetType : request.TargetType.Trim(); + announcement.TargetType = TenantAnnouncementTargetTypePolicy.Normalize(request.TargetType); announcement.TargetParameters = request.TargetParameters; announcement.RowVersion = request.RowVersion; diff --git a/src/Application/TakeoutSaaS.Application/App/Tenants/Targeting/TargetTypeFilter.cs b/src/Application/TakeoutSaaS.Application/App/Tenants/Targeting/TargetTypeFilter.cs index 5642549..6b8f43a 100644 --- a/src/Application/TakeoutSaaS.Application/App/Tenants/Targeting/TargetTypeFilter.cs +++ b/src/Application/TakeoutSaaS.Application/App/Tenants/Targeting/TargetTypeFilter.cs @@ -26,6 +26,12 @@ public static class TargetTypeFilter return false; } + // 1. 租户端严格限制:公告必须属于当前租户 + if (announcement.TenantId != context.TenantId) + { + return false; + } + var targetType = announcement.TargetType?.Trim(); if (string.IsNullOrWhiteSpace(targetType)) { @@ -37,13 +43,7 @@ public static class TargetTypeFilter return normalized switch { - "ALL" => announcement.TenantId == 0 - ? ApplyPayloadConstraints(payload, parsed, context, allowEmpty: true) - : announcement.TenantId == context.TenantId - && ApplyPayloadConstraints(payload, parsed, context, allowEmpty: true), - "ALL_TENANTS" => ApplyPayloadConstraints(payload, parsed, context, allowEmpty: true), - "TENANT_ALL" => announcement.TenantId == context.TenantId - && ApplyPayloadConstraints(payload, parsed, context, allowEmpty: true), + "ALL" or "ALL_TENANTS" or "TENANT_ALL" => ApplyPayloadConstraints(payload, parsed, context, allowEmpty: true), "SPECIFIC_TENANTS" => RequireTenantMatch(payload, parsed, context) && ApplyPayloadConstraints(payload, parsed, context, allowEmpty: false), "USERS" or "SPECIFIC_USERS" or "USER_IDS" => RequireUserMatch(payload, parsed, context) diff --git a/src/Application/TakeoutSaaS.Application/App/Tenants/Targeting/TenantAnnouncementTargetTypePolicy.cs b/src/Application/TakeoutSaaS.Application/App/Tenants/Targeting/TenantAnnouncementTargetTypePolicy.cs new file mode 100644 index 0000000..386328e --- /dev/null +++ b/src/Application/TakeoutSaaS.Application/App/Tenants/Targeting/TenantAnnouncementTargetTypePolicy.cs @@ -0,0 +1,49 @@ +using System.Collections.Frozen; + +namespace TakeoutSaaS.Application.App.Tenants.Targeting; + +/// +/// 租户公告目标受众类型策略(租户端)。 +/// +public static class TenantAnnouncementTargetTypePolicy +{ + private static readonly FrozenSet AllowedTargetTypes = FrozenSet.ToFrozenSet( + new[] + { + "ALL", + "TENANT_ALL", + "USERS", + "SPECIFIC_USERS", + "USER_IDS", + "ROLES", + "ROLE", + "PERMISSIONS", + "PERMISSION", + "MERCHANTS", + "MERCHANT_IDS" + }, + StringComparer.Ordinal); + + /// + /// 判断目标受众类型在租户端是否允许。 + /// + /// 目标受众类型。 + /// 允许返回 true,否则 false。 + public static bool IsAllowed(string? targetType) + { + if (string.IsNullOrWhiteSpace(targetType)) + { + return false; + } + + var normalized = Normalize(targetType); + return AllowedTargetTypes.Contains(normalized); + } + + /// + /// 规范化目标受众类型(Trim + UpperInvariant)。 + /// + /// 目标受众类型。 + /// 规范化后的类型。 + public static string Normalize(string targetType) => targetType.Trim().ToUpperInvariant(); +} diff --git a/src/Application/TakeoutSaaS.Application/App/Tenants/Validators/CreateAnnouncementCommandValidator.cs b/src/Application/TakeoutSaaS.Application/App/Tenants/Validators/CreateAnnouncementCommandValidator.cs index 036244c..0a3cb01 100644 --- a/src/Application/TakeoutSaaS.Application/App/Tenants/Validators/CreateAnnouncementCommandValidator.cs +++ b/src/Application/TakeoutSaaS.Application/App/Tenants/Validators/CreateAnnouncementCommandValidator.cs @@ -1,5 +1,6 @@ using FluentValidation; using TakeoutSaaS.Application.App.Tenants.Commands; +using TakeoutSaaS.Application.App.Tenants.Targeting; using TakeoutSaaS.Domain.Tenants.Enums; namespace TakeoutSaaS.Application.App.Tenants.Validators; @@ -23,6 +24,10 @@ public sealed class CreateAnnouncementCommandValidator : AbstractValidator x.TargetType) .NotEmpty(); + // 1. (空行后) 限制租户端目标类型,禁止跨租户目标 + RuleFor(x => x.TargetType) + .Must(TenantAnnouncementTargetTypePolicy.IsAllowed) + .WithMessage("租户端不支持该目标受众类型"); RuleFor(x => x.TenantId) .GreaterThan(0) diff --git a/src/Application/TakeoutSaaS.Application/App/Tenants/Validators/UpdateAnnouncementCommandValidator.cs b/src/Application/TakeoutSaaS.Application/App/Tenants/Validators/UpdateAnnouncementCommandValidator.cs index f0fa6f2..211a5aa 100644 --- a/src/Application/TakeoutSaaS.Application/App/Tenants/Validators/UpdateAnnouncementCommandValidator.cs +++ b/src/Application/TakeoutSaaS.Application/App/Tenants/Validators/UpdateAnnouncementCommandValidator.cs @@ -1,5 +1,6 @@ using FluentValidation; using TakeoutSaaS.Application.App.Tenants.Commands; +using TakeoutSaaS.Application.App.Tenants.Targeting; namespace TakeoutSaaS.Application.App.Tenants.Validators; @@ -20,6 +21,11 @@ public sealed class UpdateAnnouncementCommandValidator : AbstractValidator x.Content) .NotEmpty(); + RuleFor(x => x.TargetType) + .NotEmpty() + .Must(TenantAnnouncementTargetTypePolicy.IsAllowed) + .WithMessage("租户端不支持该目标受众类型"); + RuleFor(x => x.RowVersion) .NotNull() .Must(rowVersion => rowVersion != null && rowVersion.Length > 0) diff --git a/src/Domain/TakeoutSaaS.Domain/Tenants/Repositories/ITenantAnnouncementRepository.cs b/src/Domain/TakeoutSaaS.Domain/Tenants/Repositories/ITenantAnnouncementRepository.cs index 1b926af..dd2deee 100644 --- a/src/Domain/TakeoutSaaS.Domain/Tenants/Repositories/ITenantAnnouncementRepository.cs +++ b/src/Domain/TakeoutSaaS.Domain/Tenants/Repositories/ITenantAnnouncementRepository.cs @@ -9,7 +9,7 @@ namespace TakeoutSaaS.Domain.Tenants.Repositories; public interface ITenantAnnouncementRepository { /// - /// 查询公告列表(包含平台公告 TenantId=0),按类型、状态与生效时间筛选。 + /// 查询公告列表,按类型、状态与生效时间筛选。 /// /// 租户 ID。 /// 关键词(标题/内容)。 @@ -37,16 +37,7 @@ public interface ITenantAnnouncementRepository CancellationToken cancellationToken = default); /// - /// 按 ID 获取公告(包含平台公告 TenantId=0)。 - /// - /// 租户 ID。 - /// 公告 ID。 - /// 取消标记。 - /// 公告实体或 null。 - Task FindByIdInScopeAsync(long tenantId, long announcementId, CancellationToken cancellationToken = default); - - /// - /// 查询未读公告(包含平台公告 TenantId=0)。 + /// 查询未读公告。 /// /// 租户 ID。 /// 用户 ID。 diff --git a/src/Infrastructure/TakeoutSaaS.Infrastructure/App/Repositories/EfTenantAnnouncementRepository.cs b/src/Infrastructure/TakeoutSaaS.Infrastructure/App/Repositories/EfTenantAnnouncementRepository.cs index 9249fd1..75ba5f8 100644 --- a/src/Infrastructure/TakeoutSaaS.Infrastructure/App/Repositories/EfTenantAnnouncementRepository.cs +++ b/src/Infrastructure/TakeoutSaaS.Infrastructure/App/Repositories/EfTenantAnnouncementRepository.cs @@ -25,10 +25,8 @@ public sealed class EfTenantAnnouncementRepository(TakeoutAppDbContext context) int? limit = null, CancellationToken cancellationToken = default) { - var tenantIds = new[] { tenantId, 0L }; var query = context.TenantAnnouncements.AsNoTracking() - .IgnoreQueryFilters() - .Where(x => tenantIds.Contains(x.TenantId)); + .Where(x => x.TenantId == tenantId); if (!string.IsNullOrWhiteSpace(keyword)) { @@ -86,15 +84,6 @@ public sealed class EfTenantAnnouncementRepository(TakeoutAppDbContext context) return await query.ToListAsync(cancellationToken); } - /// - public Task FindByIdInScopeAsync(long tenantId, long announcementId, CancellationToken cancellationToken = default) - { - var tenantIds = new[] { tenantId, 0L }; - return context.TenantAnnouncements.AsNoTracking() - .IgnoreQueryFilters() - .FirstOrDefaultAsync(x => tenantIds.Contains(x.TenantId) && x.Id == announcementId, cancellationToken); - } - /// public async Task> SearchUnreadAsync( long tenantId, @@ -104,10 +93,8 @@ public sealed class EfTenantAnnouncementRepository(TakeoutAppDbContext context) DateTime? effectiveAt, CancellationToken cancellationToken = default) { - var tenantIds = new[] { tenantId, 0L }; var announcementQuery = context.TenantAnnouncements.AsNoTracking() - .IgnoreQueryFilters() - .Where(x => tenantIds.Contains(x.TenantId)); + .Where(x => x.TenantId == tenantId); if (status.HasValue) { @@ -128,7 +115,6 @@ public sealed class EfTenantAnnouncementRepository(TakeoutAppDbContext context) } var readQuery = context.TenantAnnouncementReads.AsNoTracking() - .IgnoreQueryFilters() .Where(x => x.TenantId == tenantId); readQuery = userId.HasValue diff --git a/tests/TakeoutSaaS.Application.Tests/App/Tenants/Handlers/GetAnnouncementByIdQueryHandlerTests.cs b/tests/TakeoutSaaS.Application.Tests/App/Tenants/Handlers/GetAnnouncementByIdQueryHandlerTests.cs index 205bc50..57a6470 100644 --- a/tests/TakeoutSaaS.Application.Tests/App/Tenants/Handlers/GetAnnouncementByIdQueryHandlerTests.cs +++ b/tests/TakeoutSaaS.Application.Tests/App/Tenants/Handlers/GetAnnouncementByIdQueryHandlerTests.cs @@ -21,7 +21,7 @@ public sealed class GetAnnouncementByIdQueryHandlerTests var announcementRepository = new Mock(); announcementRepository - .Setup(x => x.FindByIdInScopeAsync(99, 500, It.IsAny())) + .Setup(x => x.FindByIdAsync(99, 500, It.IsAny())) .ReturnsAsync((TenantAnnouncement?)null); var readRepository = new Mock(); @@ -55,7 +55,7 @@ public sealed class GetAnnouncementByIdQueryHandlerTests var announcementRepository = new Mock(); announcementRepository - .Setup(x => x.FindByIdInScopeAsync(100, 1, It.IsAny())) + .Setup(x => x.FindByIdAsync(100, 1, It.IsAny())) .ReturnsAsync(announcement); var readRepository = new Mock(); @@ -94,7 +94,7 @@ public sealed class GetAnnouncementByIdQueryHandlerTests var announcementRepository = new Mock(); announcementRepository - .Setup(x => x.FindByIdInScopeAsync(200, 10, It.IsAny())) + .Setup(x => x.FindByIdAsync(200, 10, It.IsAny())) .ReturnsAsync(announcement); var readRepository = new Mock(); diff --git a/tests/TakeoutSaaS.Application.Tests/TestUtilities/AnnouncementTestData.cs b/tests/TakeoutSaaS.Application.Tests/TestUtilities/AnnouncementTestData.cs index 6ac7f18..3544770 100644 --- a/tests/TakeoutSaaS.Application.Tests/TestUtilities/AnnouncementTestData.cs +++ b/tests/TakeoutSaaS.Application.Tests/TestUtilities/AnnouncementTestData.cs @@ -17,7 +17,7 @@ public static class AnnouncementTestData EffectiveFrom = DateTime.UtcNow.AddHours(-1), EffectiveTo = DateTime.UtcNow.AddHours(2), PublisherScope = PublisherScope.Tenant, - TargetType = "ALL_TENANTS", + TargetType = "TENANT_ALL", TargetParameters = null }; @@ -28,7 +28,7 @@ public static class AnnouncementTestData AnnouncementId = 9001, Title = "更新公告", Content = "更新内容", - TargetType = "ALL_TENANTS", + TargetType = "TENANT_ALL", TargetParameters = null, RowVersion = new byte[] { 1, 2, 3 } }; diff --git a/tests/TakeoutSaaS.Integration.Tests/App/Tenants/AnnouncementRegressionTests.cs b/tests/TakeoutSaaS.Integration.Tests/App/Tenants/AnnouncementRegressionTests.cs index 4275fec..af0e2c7 100644 --- a/tests/TakeoutSaaS.Integration.Tests/App/Tenants/AnnouncementRegressionTests.cs +++ b/tests/TakeoutSaaS.Integration.Tests/App/Tenants/AnnouncementRegressionTests.cs @@ -65,7 +65,7 @@ public sealed class AnnouncementRegressionTests AnnouncementId = announcement.Id, Title = "更新后的标题", Content = "更新后的内容", - TargetType = "ALL_TENANTS", + TargetType = "TENANT_ALL", RowVersion = announcement.RowVersion }; @@ -92,7 +92,7 @@ public sealed class AnnouncementRegressionTests EffectiveTo = null, PublisherScope = PublisherScope.Tenant, Status = AnnouncementStatus.Draft, - TargetType = "ALL_TENANTS", + TargetType = "TENANT_ALL", TargetParameters = null, RowVersion = new byte[] { 1 } }; diff --git a/tests/TakeoutSaaS.Integration.Tests/App/Tenants/AnnouncementWorkflowTests.cs b/tests/TakeoutSaaS.Integration.Tests/App/Tenants/AnnouncementWorkflowTests.cs index b46cc7e..f545a28 100644 --- a/tests/TakeoutSaaS.Integration.Tests/App/Tenants/AnnouncementWorkflowTests.cs +++ b/tests/TakeoutSaaS.Integration.Tests/App/Tenants/AnnouncementWorkflowTests.cs @@ -146,7 +146,7 @@ public sealed class AnnouncementWorkflowTests AnnouncementId = announcement.Id, Title = "更新标题", Content = "更新内容", - TargetType = "ALL_TENANTS", + TargetType = "TENANT_ALL", RowVersion = announcement.RowVersion }; @@ -185,7 +185,7 @@ public sealed class AnnouncementWorkflowTests AnnouncementId = announcement.Id, Title = "并发更新", Content = "内容", - TargetType = "ALL_TENANTS", + TargetType = "TENANT_ALL", RowVersion = new byte[] { 1 } }; @@ -210,7 +210,7 @@ public sealed class AnnouncementWorkflowTests EffectiveTo = DateTime.UtcNow.AddMinutes(30), PublisherScope = PublisherScope.Tenant, Status = AnnouncementStatus.Draft, - TargetType = "ALL_TENANTS", + TargetType = "TENANT_ALL", TargetParameters = null, RowVersion = new byte[] { 1 } }; diff --git a/tests/TakeoutSaaS.Integration.Tests/App/Tenants/TenantAnnouncementRepositoryScopeTests.cs b/tests/TakeoutSaaS.Integration.Tests/App/Tenants/TenantAnnouncementRepositoryScopeTests.cs index cb7697f..a4f439d 100644 --- a/tests/TakeoutSaaS.Integration.Tests/App/Tenants/TenantAnnouncementRepositoryScopeTests.cs +++ b/tests/TakeoutSaaS.Integration.Tests/App/Tenants/TenantAnnouncementRepositoryScopeTests.cs @@ -9,16 +9,16 @@ namespace TakeoutSaaS.Integration.Tests.App.Tenants; public sealed class TenantAnnouncementRepositoryScopeTests { [Fact] - public async Task GivenTenantAndPlatformAnnouncements_WhenSearchAsync_ThenReturnsBoth() + public async Task GivenDifferentTenantsAnnouncements_WhenSearchAsync_ThenReturnsOnlyCurrentTenant() { // Arrange using var database = new SqliteTestDatabase(); using var context = database.CreateContext(tenantId: 800); var tenantAnnouncement = CreateAnnouncement(tenantId: 800, id: 9200); - var platformAnnouncement = CreateAnnouncement(tenantId: 0, id: 9201); + var otherTenantAnnouncement = CreateAnnouncement(tenantId: 801, id: 9201); - context.TenantAnnouncements.AddRange(tenantAnnouncement, platformAnnouncement); + context.TenantAnnouncements.AddRange(tenantAnnouncement, otherTenantAnnouncement); await context.SaveChangesAsync(); context.ChangeTracker.Clear(); @@ -37,7 +37,8 @@ public sealed class TenantAnnouncementRepositoryScopeTests cancellationToken: CancellationToken.None); // Assert - results.Select(x => x.Id).Should().Contain(new[] { tenantAnnouncement.Id, platformAnnouncement.Id }); + results.Select(x => x.Id).Should().Contain(tenantAnnouncement.Id); + results.Select(x => x.Id).Should().NotContain(otherTenantAnnouncement.Id); } private static TenantAnnouncement CreateAnnouncement(long tenantId, long id) @@ -52,7 +53,7 @@ public sealed class TenantAnnouncementRepositoryScopeTests EffectiveFrom = DateTime.UtcNow.AddMinutes(-5), PublisherScope = PublisherScope.Tenant, Status = AnnouncementStatus.Draft, - TargetType = "ALL_TENANTS", + TargetType = "TENANT_ALL", RowVersion = new byte[] { 1 } }; } diff --git a/tests/TakeoutSaaS.Integration.Tests/Performance/AnnouncementQueryPerformanceTests.cs b/tests/TakeoutSaaS.Integration.Tests/Performance/AnnouncementQueryPerformanceTests.cs index bc742af..0293fea 100644 --- a/tests/TakeoutSaaS.Integration.Tests/Performance/AnnouncementQueryPerformanceTests.cs +++ b/tests/TakeoutSaaS.Integration.Tests/Performance/AnnouncementQueryPerformanceTests.cs @@ -21,8 +21,8 @@ public sealed class AnnouncementQueryPerformanceTests var announcements = new List(); for (var i = 0; i < 1000; i++) { - var tenantId = i % 2 == 0 ? 900 : 0; - var targetType = i % 10 == 0 ? "ROLES" : "ALL_TENANTS"; + var tenantId = 900; + var targetType = i % 10 == 0 ? "ROLES" : "TENANT_ALL"; var targetParameters = i % 10 == 0 ? "{\"roles\":[\"ops\"]}" : null; announcements.Add(new TenantAnnouncement @@ -34,7 +34,7 @@ public sealed class AnnouncementQueryPerformanceTests AnnouncementType = TenantAnnouncementType.System, Priority = i % 5, EffectiveFrom = DateTime.UtcNow.AddDays(-1), - PublisherScope = tenantId == 0 ? PublisherScope.Platform : PublisherScope.Tenant, + PublisherScope = PublisherScope.Tenant, Status = AnnouncementStatus.Published, TargetType = targetType, TargetParameters = targetParameters,