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,