< Summary

Information
Class: AsiBackbone.Core.Constraints.AsiBackboneConstraintEvaluationContext
Assembly: AsiBackbone.Core
File(s): /home/runner/work/AsiBackbone/AsiBackbone/src/AsiBackbone.Core/Constraints/AsiBackboneConstraintEvaluationContext.cs
Line coverage
100%
Covered lines: 25
Uncovered lines: 0
Coverable lines: 25
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_CorrelationId()100%11100%
get_PolicyVersion()100%11100%
get_PolicyHash()100%11100%
get_Metadata()100%11100%
get_HasMetadata()100%11100%
NormalizeOptional(...)100%22100%
NormalizeMetadata(...)100%1414100%

File(s)

/home/runner/work/AsiBackbone/AsiBackbone/src/AsiBackbone.Core/Constraints/AsiBackboneConstraintEvaluationContext.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="AsiBackboneConstraintEvaluationContext"/> 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>
 15915public sealed class AsiBackboneConstraintEvaluationContext(
 15916    string? correlationId = null,
 15917    string? policyVersion = null,
 15918    string? policyHash = null,
 15919    IReadOnlyDictionary<string, string>? metadata = null) : IAsiBackboneConstraintEvaluationContext
 20{
 521    private static readonly IReadOnlyDictionary<string, string> EmptyMetadata =
 522        new ReadOnlyDictionary<string, string>(
 523            new Dictionary<string, string>(StringComparer.Ordinal));
 24
 25    /// <inheritdoc />
 27726    public string? CorrelationId { get; } = NormalizeOptional(correlationId);
 27
 28    /// <inheritdoc />
 27529    public string? PolicyVersion { get; } = NormalizeOptional(policyVersion);
 30
 31    /// <inheritdoc />
 27332    public string? PolicyHash { get; } = NormalizeOptional(policyHash);
 33
 34    /// <inheritdoc />
 27635    public IReadOnlyDictionary<string, string> Metadata { get; } = NormalizeMetadata(metadata);
 36
 37    /// <summary>
 38    /// Gets a value indicating whether this context contains metadata.
 39    /// </summary>
 1840    public bool HasMetadata => Metadata.Count > 0;
 41
 42    private static string? NormalizeOptional(string? value)
 43    {
 47744        return string.IsNullOrWhiteSpace(value)
 47745            ? null
 47746            : value.Trim();
 47    }
 48
 49    private static IReadOnlyDictionary<string, string> NormalizeMetadata(
 50        IReadOnlyDictionary<string, string>? metadata)
 51    {
 15952        if (metadata is null || metadata.Count == 0)
 53        {
 7854            return EmptyMetadata;
 55        }
 56
 8157        Dictionary<string, string> normalizedMetadata = new(StringComparer.Ordinal);
 58
 92859        foreach (KeyValuePair<string, string> item in metadata)
 60        {
 38361            if (string.IsNullOrWhiteSpace(item.Key))
 62            {
 63                continue;
 64            }
 65
 37566            normalizedMetadata[item.Key.Trim()] = item.Value?.Trim() ?? string.Empty;
 67        }
 68
 8169        return normalizedMetadata.Count == 0
 8170            ? EmptyMetadata
 8171            : new ReadOnlyDictionary<string, string>(normalizedMetadata);
 72    }
 73}