49 lines
1.7 KiB
TOML
49 lines
1.7 KiB
TOML
# QA test-suite configuration for the California Legislature Daily File scraper.
|
|
#
|
|
# The standard command `python3 -m pytest` both runs the full suite AND enforces
|
|
# the acceptance-criteria coverage gate (>= 85 % on the parser core) via the
|
|
# `--cov` addopt below. A green `python3 -m pytest` is therefore a green *gate*:
|
|
# a coverage regression below 85 % fails the run.
|
|
#
|
|
# Optional live smoke test (guarded by an env flag so CI does not depend on the
|
|
# external servers being up):
|
|
# CALI_SCRAPER_SMOKE=1 python3 -m pytest -m smoke
|
|
#
|
|
# The parser core (`scraper.parsers` + its `scraper.bill_id` codec) is the
|
|
# subject of the coverage gate, per the task. Import guards for soft deps
|
|
# (http_client/config) are `pragma: no cover`-excluded so the floor measures
|
|
# the real business logic, not try/except shims.
|
|
|
|
[tool.pytest.ini_options]
|
|
minversion = "7.0"
|
|
testpaths = ["tests"]
|
|
# --cov enables measurement + report + fail_under on every run.
|
|
# --cov-report=term produces the visible report the acceptance criteria ask for.
|
|
# --cov-fail-under=85 is the hard gate.
|
|
addopts = "-ra --strict-markers --cov --cov-report=term-missing"
|
|
markers = [
|
|
"smoke: optional live-URL smoke test, skipped unless CALI_SCRAPER_SMOKE is set",
|
|
]
|
|
|
|
[tool.coverage.run]
|
|
# The parser module and its bill-id codec are the coverage subject.
|
|
source = ["scraper.parsers", "scraper.bill_id"]
|
|
omit = [
|
|
"*/tests/*",
|
|
"*/__pycache__/*",
|
|
]
|
|
branch = true
|
|
|
|
[tool.coverage.report]
|
|
# Enforce the acceptance-criteria threshold. A sub-85% run fails pytest.
|
|
fail_under = 85
|
|
show_missing = true
|
|
exclude_lines = [
|
|
"pragma: no cover",
|
|
"pragma: no cover - import guard",
|
|
"if __name__ == .__main__.:",
|
|
"raise NotImplementedError",
|
|
"\\.\\.\\.",
|
|
]
|
|
precision = 1
|