30, 'baselineSource' => 'measured-current-suite', 'enforcement' => 'warn', 'lifecycleState' => 'documented', ]); $hardFailBudget = TestLaneBudget::fromArray([ 'thresholdSeconds' => 30, 'baselineSource' => 'measured-current-suite', 'enforcement' => 'hard-fail', 'lifecycleState' => 'documented', ]); expect($warnBudget->evaluate(24.5)['budgetStatus'])->toBe('within-budget') ->and($warnBudget->evaluate(31.2)['budgetStatus'])->toBe('warning') ->and($hardFailBudget->evaluate(31.2)['budgetStatus'])->toBe('over-budget'); }); it('evaluates initial family thresholds from matched file durations', function (): void { $evaluations = TestLaneBudget::evaluateFamilyBudgets( TestLaneManifest::familyBudgets(), [ 'tests/Feature/OpsUx/OperateHubShellTest.php' => 18.4, 'tests/Feature/Guards/ActionSurfaceContractTest.php' => 7.8, 'tests/Browser/Spec198MonitoringPageStateSmokeTest.php' => 14.2, ], ); expect($evaluations)->not->toBeEmpty() ->and($evaluations[0])->toHaveKeys([ 'familyId', 'thresholdSeconds', 'baselineSource', 'enforcement', 'lifecycleState', 'measuredSeconds', 'budgetStatus', 'matchedSelectors', ]); });