< Summary

Information
Class: AsiBackbone.Testing.Contracts.AsiBackbonePolicyEvaluatorContract<T>
Assembly: AsiBackbone.Testing
File(s): /home/runner/work/AsiBackbone/AsiBackbone/src/AsiBackbone.Testing/Contracts/AsiBackbonePolicyEvaluatorContract.cs
Line coverage
100%
Covered lines: 15
Uncovered lines: 0
Coverable lines: 15
Total lines: 58
Line coverage: 100%
Branch coverage
100%
Covered branches: 4
Total branches: 4
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
VerifyEvaluatorReturnsSafeDecisionAsync()100%44100%

File(s)

/home/runner/work/AsiBackbone/AsiBackbone/src/AsiBackbone.Testing/Contracts/AsiBackbonePolicyEvaluatorContract.cs

#LineLine coverage
 1using AsiBackbone.Core.Constraints;
 2using AsiBackbone.Core.Decisions;
 3using AsiBackbone.Core.Evaluation;
 4
 5namespace AsiBackbone.Testing.Contracts;
 6
 7/// <summary>
 8/// Reusable contract fixture for <see cref="IAsiBackbonePolicyEvaluator{TContext}" /> implementations.
 9/// </summary>
 10/// <typeparam name="TContext">The framework-neutral evaluation context type.</typeparam>
 11public abstract class AsiBackbonePolicyEvaluatorContract<TContext>
 12    where TContext : IAsiBackboneConstraintEvaluationContext
 13{
 14    /// <summary>
 15    /// Creates the evaluator implementation under test.
 16    /// </summary>
 17    /// <returns>The evaluator implementation to validate.</returns>
 18    protected abstract IAsiBackbonePolicyEvaluator<TContext> CreateEvaluator();
 19
 20    /// <summary>
 21    /// Creates the context supplied to the evaluator implementation under test.
 22    /// </summary>
 23    /// <returns>The evaluation context to validate with.</returns>
 24    protected abstract TContext CreateEvaluationContext();
 25
 26    /// <summary>
 27    /// Verifies that the evaluator returns a safe, non-null decision and preserves supplied decision telemetry.
 28    /// </summary>
 29    /// <param name="cancellationToken">A token that can cancel the contract validation.</param>
 30    /// <returns>The verified governance decision.</returns>
 31    public async ValueTask<GovernanceDecision> VerifyEvaluatorReturnsSafeDecisionAsync(CancellationToken cancellationTok
 32    {
 1433        IAsiBackbonePolicyEvaluator<TContext> evaluator = CreateEvaluator()
 1434            ?? throw new AsiBackboneContractViolationException("Policy evaluator contract must provide an evaluator inst
 1235        TContext context = CreateEvaluationContext()
 1236            ?? throw new AsiBackboneContractViolationException("Policy evaluator contract must provide an evaluation con
 37
 38        try
 39        {
 1040            GovernanceDecision decision = await evaluator.EvaluateAsync(context, cancellationToken).ConfigureAwait(false
 441            return AsiBackboneDecisionContract.VerifyTelemetryFromContext(decision, context, "Policy evaluator decision"
 42        }
 243        catch (OperationCanceledException)
 44        {
 245            throw;
 46        }
 447        catch (AsiBackboneContractViolationException)
 48        {
 449            throw;
 50        }
 251        catch (Exception exception)
 52        {
 253            throw new AsiBackboneContractViolationException(
 254                "Policy evaluator implementations must not fail open or bypass the policy pipeline by throwing during no
 255                exception);
 56        }
 257    }
 58}