using Admin.NET.Plugin.AiDOP.DataPlatform.Inbound; using Xunit; namespace Admin.NET.Plugin.AiDOP.Tests.DataPlatform; public class InboundGrantIssuanceTests { private static string NeverCalled() => throw new InvalidOperationException("不应签发新凭据"); [Fact] public void EmptyKey_CreatesIdentity_AndBothTokens() { var plan = InboundGrantIssuance.Plan("", 11, 0, false, () => "key-1", () => "secret-1"); Assert.Equal(InboundGrantIssuanceKind.CreateIdentity, plan.Kind); Assert.Equal("key-1", plan.AccessKey); Assert.Equal("secret-1", plan.AccessSecret); } [Fact] public void SameTenantKey_ReusesIdentity_WithoutNewSecret() { var plan = InboundGrantIssuance.Plan("existing", 11, boundTenantId: 11, identityExists: true, NeverCalled, NeverCalled); Assert.Equal(InboundGrantIssuanceKind.ReuseIdentity, plan.Kind); Assert.Equal("existing", plan.AccessKey); Assert.Equal("", plan.AccessSecret); } [Fact] public void OtherTenantKey_IsRejected() { var plan = InboundGrantIssuance.Plan("existing", 11, boundTenantId: 22, identityExists: true, NeverCalled, NeverCalled); Assert.Equal(InboundGrantIssuanceKind.RejectCrossTenant, plan.Kind); } [Fact] public void UnknownKey_IsRejected() { var plan = InboundGrantIssuance.Plan("missing", 11, boundTenantId: 0, identityExists: false, NeverCalled, NeverCalled); Assert.Equal(InboundGrantIssuanceKind.RejectUnknownKey, plan.Kind); } [Fact] public void Reuse_IsIdempotent_AcrossRepeatedPlans() { var first = InboundGrantIssuance.Plan("existing", 11, 11, true, NeverCalled, NeverCalled); var second = InboundGrantIssuance.Plan("existing", 11, 11, true, NeverCalled, NeverCalled); Assert.Equal(first, second); } }