# Tests

Every test here is a bug that actually shipped. The collectors integrate with nine
retailer websites nobody controls, so the same misreading tends to recur on a
different store months later — these are the tripwires that make it fail loudly
instead of quietly publishing a wrong price.

Scope is deliberately the **pure logic**: parsing, matching, normalising, robots
evaluation. No network, no database, seconds not minutes. The account suites
(`test_accounts_*.py`, `test_access.py`, and the vendored conformance pack under `kit/`)
run the real routes in-process against an in-memory SQLite holding the auth tables
(`kit/_env.py`), still no server and no network. The layers not covered here (query
shaping, ingest against a live database, the frontend) are verified by `check.sh`'s
typecheck and by hand.

Run: `../.venv-dev/bin/pytest tests -q` — or just `./check.sh`, which runs them.
