< Summary

Information
Class: AsiBackbone.Core.Constraints.GovernanceEvaluationContext
Assembly: AsiBackbone.Core
File(s): /home/runner/work/AsiBackbone/AsiBackbone/src/AsiBackbone.Core/Constraints/GovernanceEvaluationContext.cs
Line coverage
100%
Covered lines: 21
Uncovered lines: 0
Coverable lines: 21
Total lines: 73
Line coverage: 100%
Branch coverage
100%
Covered branches: 16
Total branches: 16
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
.cctor()100%11100%
get_HasMetadata()100%11100%
NormalizeOptional(...)100%22100%
NormalizeMetadata(...)100%1414100%

File(s)

/home/runner/work/AsiBackbone/AsiBackbone/src/AsiBackbone.Core/Constraints/GovernanceEvaluationContext.cs

#LineLine coverage
 1using System.Collections.ObjectModel;
 2
 3namespace AsiBackbone.Core.Constraints;
 4
 5/// <summary>
 6/// Default framework-neutral context value used during constraint evaluation.
 7/// </summary>
 8/// <remarks>
 9/// Initializes a new instance of the <see cref="GovernanceEvaluationContext"/> class.
 10/// </remarks>
 11/// <param name="correlationId">Optional correlation identifier.</param>
 12/// <param name="policyVersion">Optional policy version.</param>
 13/// <param name="policyHash">Optional policy hash.</param>
 14/// <param name="metadata">Optional host-provided metadata.</param>
 9415public sealed class GovernanceEvaluationContext(
 9416    string? correlationId = null,
 9417    string? policyVersion = null,
 9418    string? policyHash = null,
 9419    IReadOnlyDictionary<string, string>? metadata = null) : IGovernanceEvaluationContext
 20{
 321    private static readonly IReadOnlyDictionary<string, string> EmptyMetadata =
 322        new ReadOnlyDictionary<string, string>(
 323            new Dictionary<string, string>(StringComparer.Ordinal));
 24
 25    /// <inheritdoc />
 26    public string? CorrelationId { get; } = NormalizeOptional(correlationId);
 27
 28    /// <inheritdoc />
 29    public string? PolicyVersion { get; } = NormalizeOptional(policyVersion);
 30
 31    /// <inheritdoc />
 32    public string? PolicyHash { get; } = NormalizeOptional(policyHash);
 33
 34    /// <inheritdoc />
 35    public IReadOnlyDictionary<string, string> Metadata { get; } = NormalizeMetadata(metadata);
 36
 37    /// <summary>
 38    /// Gets a value indicating whether this context contains metadata.
 39    /// </summary>
 940    public bool HasMetadata => Metadata.Count > 0;
 41
 42    private static string? NormalizeOptional(string? value)
 43    {
 28244        return string.IsNullOrWhiteSpace(value)
 28245            ? null
 28246            : value.Trim();
 47    }
 48
 49    private static IReadOnlyDictionary<string, string> NormalizeMetadata(
 50        IReadOnlyDictionary<string, string>? metadata)
 51    {
 9452        if (metadata is null || metadata.Count == 0)
 53        {
 4054            return EmptyMetadata;
 55        }
 56
 5457        Dictionary<string, string> normalizedMetadata = new(StringComparer.Ordinal);
 58
 61859        foreach (KeyValuePair<string, string> item in metadata)
 60        {
 25561            if (string.IsNullOrWhiteSpace(item.Key))
 62            {
 63                continue;
 64            }
 65
 25166            normalizedMetadata[item.Key.Trim()] = item.Value?.Trim() ?? string.Empty;
 67        }
 68
 5469        return normalizedMetadata.Count == 0
 5470            ? EmptyMetadata
 5471            : new ReadOnlyDictionary<string, string>(normalizedMetadata);
 72    }
 73}