< Summary - Kestrun — Combined Coverage

Information
Class: Kestrun.Claims.ClaimPolicyBuilder
Assembly: Kestrun
File(s): /home/runner/work/Kestrun/Kestrun/src/CSharp/Kestrun/Claims/ClaimPolicyBuilder.cs
Tag: Kestrun/Kestrun@0d738bf294e6281b936d031e1979d928007495ff
Line coverage
84%
Covered lines: 22
Uncovered lines: 4
Coverable lines: 26
Total lines: 96
Line coverage: 84.6%
Branch coverage
90%
Covered branches: 9
Total branches: 10
Branch coverage: 90%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Coverage history

Coverage history 0 25 50 75 100 08/26/2025 - 14:53:17 Line coverage: 100% (21/21) Branch coverage: 100% (8/8) Total lines: 74 Tag: Kestrun/Kestrun@78d1e497d8ba989d121b57aa39aa3c6b22de743112/12/2025 - 17:27:19 Line coverage: 84.6% (22/26) Branch coverage: 90% (9/10) Total lines: 96 Tag: Kestrun/Kestrun@826bf9dcf9db118c5de4c78a3259bce9549f0dcd 08/26/2025 - 14:53:17 Line coverage: 100% (21/21) Branch coverage: 100% (8/8) Total lines: 74 Tag: Kestrun/Kestrun@78d1e497d8ba989d121b57aa39aa3c6b22de743112/12/2025 - 17:27:19 Line coverage: 84.6% (22/26) Branch coverage: 90% (9/10) Total lines: 96 Tag: Kestrun/Kestrun@826bf9dcf9db118c5de4c78a3259bce9549f0dcd

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor()100%11100%
AddPolicy(...)100%44100%
AddPolicy(...)100%44100%
AddPolicy(...)50%2283.33%
get_Policies()100%11100%
Build()100%11100%
ToString()100%210%
Clear()100%210%
Create()100%210%

File(s)

/home/runner/work/Kestrun/Kestrun/src/CSharp/Kestrun/Claims/ClaimPolicyBuilder.cs

#LineLine coverage
 1namespace Kestrun.Claims;
 2
 3/// <summary>
 4/// Builder for defining claim-based authorization policies.
 5/// </summary>
 6public sealed class ClaimPolicyBuilder
 7{
 158    private readonly Dictionary<string, ClaimRule> _policies = new(StringComparer.OrdinalIgnoreCase);
 9
 10    /// <summary>
 11    /// Adds a new policy with a required claim rule.
 12    /// </summary>
 13    /// <param name="policyName">The name of the policy.</param>
 14    /// <param name="claimType">The required claim type.</param>
 15    /// <param name="description">Description of the claim rule.</param>
 16    /// <param name="allowedValues">Allowed values for the claim.</param>
 17    /// <returns>The current builder instance.</returns>
 18    public ClaimPolicyBuilder AddPolicy(string policyName, string claimType, string description, params string[] allowed
 19    {
 1720        ArgumentException.ThrowIfNullOrWhiteSpace(policyName);
 1521        ArgumentException.ThrowIfNullOrWhiteSpace(claimType);
 1322        if (allowedValues is null || allowedValues.Length == 0)
 23        {
 224            throw new ArgumentException("At least one allowed value must be specified.", nameof(allowedValues));
 25        }
 26
 1127        _policies[policyName] = new ClaimRule(claimType, description, allowedValues);
 1128        return this;
 29    }
 30
 31    /// <summary>
 32    /// Adds a new policy with a required claim rule using a <see cref="UserIdentityClaim"/>.
 33    /// </summary>
 34    /// <param name="policyName">The name of the policy.</param>
 35    /// <param name="claimType">The required <see cref="UserIdentityClaim"/> type.</param>
 36    /// <param name="description">Description of the claim rule.</param>
 37    /// <param name="allowedValues">Allowed values for the claim.</param>
 38    /// <returns>The current builder instance.</returns>
 39    public ClaimPolicyBuilder AddPolicy(string policyName, UserIdentityClaim claimType, string? description, params stri
 40    {
 441        ArgumentException.ThrowIfNullOrWhiteSpace(policyName);
 442        if (allowedValues is null || allowedValues.Length == 0)
 43        {
 244            throw new ArgumentException("At least one allowed value must be specified.", nameof(allowedValues));
 45        }
 46
 247        _policies[policyName] = new ClaimRule(claimType.ToClaimUri(), description, allowedValues);
 248        return this;
 49    }
 50    /// <summary>
 51    /// Adds a prebuilt claim rule under a policy name.
 52    /// </summary>
 53    /// <param name="policyName">The name of the policy.</param>
 54    /// <param name="rule">The claim rule to associate with the policy.</param>
 55    /// <param name="description">Description of the claim rule.</param>
 56    /// <returns>The current builder instance.</returns>
 57    public ClaimPolicyBuilder AddPolicy(string policyName, ClaimRule rule, string? description = null)
 58    {
 459        ArgumentException.ThrowIfNullOrWhiteSpace(policyName);
 260        ArgumentNullException.ThrowIfNull(rule);
 161        if (description is not null)
 62        {
 063            rule.Description = description;
 64        }
 165        _policies[policyName] = rule;
 166        return this;
 67    }
 68
 69    /// <summary>
 70    /// Gets the dictionary of all configured policies.
 71    /// </summary>
 872    public IReadOnlyDictionary<string, ClaimRule> Policies => _policies;
 73
 74    /// <summary>
 75    /// Builds the configuration object.
 76    /// </summary>
 477    public ClaimPolicyConfig Build() => new()
 478    {
 479        Policies = new Dictionary<string, ClaimRule>(_policies, StringComparer.OrdinalIgnoreCase)
 480    };
 81    /// <summary>
 82    /// Returns a string representation of the builder.
 83    /// </summary>
 84    /// <returns></returns>
 085    public override string ToString() => $"ClaimPolicyBuilder: {_policies.Count} policies defined.";
 86    /// <summary>
 87    /// Clears all defined policies from the builder.
 88    /// </summary>
 089    public void Clear() => _policies.Clear();
 90
 91    /// <summary>
 92    /// Creates a new instance of the <see cref="ClaimPolicyBuilder"/>.
 93    /// </summary>
 94    /// <returns>A new instance of <see cref="ClaimPolicyBuilder"/>.</returns>
 095    public static ClaimPolicyBuilder Create() => new();
 96}