b499834c0f
CI / lint (pull_request) Successful in 42s
CI / typecheck (pull_request) Successful in 55s
CI / quality (pull_request) Successful in 59s
CI / security (pull_request) Successful in 1m16s
CI / helm (pull_request) Successful in 40s
CI / build (pull_request) Successful in 43s
CI / push-validation (pull_request) Successful in 20s
CI / unit_tests (pull_request) Successful in 4m26s
CI / docker (pull_request) Successful in 1m25s
CI / coverage (pull_request) Successful in 9m34s
CI / integration_tests (pull_request) Failing after 21m41s
CI / status-check (pull_request) Failing after 3s
The coverage_report noxfile session now delegates COVERAGE_THRESHOLD to the pyproject single source (`COVERAGE_THRESHOLD = _read_coverage_fail_under()`), so the AST value is a Call, not a Constant. The coverage_threshold_enforcement.feature step "I parse the COVERAGE_THRESHOLD constant from noxfile.py" raised ValueError (errored scenario) because it only handled a literal constant — this was the missed third WS5 step file (the config + consolidated steps were already reconciled). Add the same pyproject `[tool.coverage.report].fail_under` fallback used by coverage_threshold_config_steps.py, and fix the phantom-97 in the feature description prose. Verified: the four coverage feature files now pass (136 scenarios, 0 errored); previously unit_tests errored on coverage_threshold_enforcement.feature:7. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
61 lines
2.7 KiB
Gherkin
61 lines
2.7 KiB
Gherkin
Feature: Coverage threshold enforcement
|
|
The project enforces a minimum 96.5% code coverage threshold.
|
|
This feature validates that the coverage configuration and nox session
|
|
are properly set up to enforce this requirement.
|
|
|
|
@tdd_issue @tdd_issue_4227
|
|
Scenario: Coverage threshold is configured at 96.5% in noxfile
|
|
Given the noxfile.py exists
|
|
When I parse the COVERAGE_THRESHOLD constant from noxfile.py
|
|
Then the coverage threshold should be 96.5
|
|
|
|
Scenario: Coverage report session uses fail-under flag
|
|
Given the noxfile.py exists
|
|
When I read the coverage_report session source from noxfile.py
|
|
Then the session should contain a fail-under argument matching the threshold
|
|
|
|
Scenario: Coverage run configuration has branch coverage enabled
|
|
Given the pyproject.toml exists
|
|
When I parse the coverage run configuration from pyproject.toml
|
|
Then branch coverage should be enabled
|
|
|
|
Scenario: Coverage run configuration measures src directory
|
|
Given the pyproject.toml exists
|
|
When I parse the coverage run configuration from pyproject.toml
|
|
Then the source list should include "src"
|
|
|
|
Scenario: Coverage data file is stored under build directory
|
|
Given the pyproject.toml exists
|
|
When I parse the coverage run configuration from pyproject.toml
|
|
Then the data file should be under the build directory
|
|
|
|
Scenario: Coverage HTML report directory is under build
|
|
Given the pyproject.toml exists
|
|
When I parse the coverage html configuration from pyproject.toml
|
|
Then the html directory should be under the build directory
|
|
|
|
Scenario: Coverage XML report path is under build
|
|
Given the pyproject.toml exists
|
|
When I parse the coverage xml configuration from pyproject.toml
|
|
Then the xml output should be under the build directory
|
|
|
|
Scenario: CI workflow coverage job references nox session
|
|
Given the CI workflow file exists
|
|
When I parse the coverage job from the CI workflow
|
|
Then the coverage job should run nox -s coverage_report
|
|
|
|
Scenario: CI workflow coverage job depends on lint and typecheck
|
|
Given the CI workflow file exists
|
|
When I parse the coverage job from the CI workflow
|
|
Then the coverage job should depend on lint and typecheck
|
|
|
|
Scenario: Coverage report session emits CI-parseable summary on success
|
|
Given the noxfile.py exists
|
|
When I read the coverage_report session source from noxfile.py
|
|
Then the session should emit a COVERAGE OK summary line
|
|
|
|
Scenario: Coverage report session emits CI-parseable summary on failure
|
|
Given the noxfile.py exists
|
|
When I read the coverage_report session source from noxfile.py
|
|
Then the session should emit a COVERAGE FAILED summary line
|