42 lines
1.6 KiB
C#
42 lines
1.6 KiB
C#
using Tiku.Application.PlatformAdmin;
|
|
using Tiku.Domain.Platform;
|
|
|
|
namespace Tiku.UnitTests.PlatformAdmin;
|
|
|
|
public sealed class PlatformApprovalRulesTests
|
|
{
|
|
[Theory]
|
|
[InlineData(4_999_999, false)]
|
|
[InlineData(5_000_000, true)]
|
|
[InlineData(5_000_001, true)]
|
|
public void Financial_threshold_is_fifty_thousand_yuan(int amountCents, bool expected) =>
|
|
Assert.Equal(expected, PlatformApprovalRules.RequiresApproval(true, false, 5_000_000, amountCents));
|
|
|
|
[Fact]
|
|
public void Always_policy_requires_approval_without_amount() =>
|
|
Assert.True(PlatformApprovalRules.RequiresApproval(true, true, null, null));
|
|
|
|
[Fact]
|
|
public void Disabled_policy_executes_immediately() =>
|
|
Assert.False(PlatformApprovalRules.RequiresApproval(false, true, 1, 10));
|
|
|
|
[Fact]
|
|
public void Requester_cannot_approve_own_request()
|
|
{
|
|
var actor = Guid.NewGuid();
|
|
var denial = PlatformApprovalRules.DecisionDenialCode(
|
|
PlatformApprovalRequestStatus.Pending, actor, actor, DateTimeOffset.UtcNow.AddHours(1),
|
|
"platform:tenant:manage", new HashSet<string> { "platform:tenant:manage" }, DateTimeOffset.UtcNow);
|
|
Assert.Equal("approval_maker_checker_required", denial);
|
|
}
|
|
|
|
[Fact]
|
|
public void Approver_must_still_hold_business_permission()
|
|
{
|
|
var denial = PlatformApprovalRules.DecisionDenialCode(
|
|
PlatformApprovalRequestStatus.Pending, Guid.NewGuid(), Guid.NewGuid(), DateTimeOffset.UtcNow.AddHours(1),
|
|
"platform:tenant:manage", new HashSet<string>(), DateTimeOffset.UtcNow);
|
|
Assert.Equal("approval_business_permission_required", denial);
|
|
}
|
|
}
|