39 lines
1.5 KiB
Markdown
39 lines
1.5 KiB
Markdown
# Backend tests
|
|||
|
|
|
||
|
|
```bash
|
||
|
|
cd backend && ./venv/bin/python -m pytest tests/ -v
|
||
|
|
```
|
||
|
|
|
||
|
|
Use the **project venv** (`./venv/bin/python`), not a system or conda Python —
|
||
|
|
dependencies from `requirements.txt` such as `paramiko` are only installed
|
||
|
|
there, and a wrong interpreter shows up as unrelated `ModuleNotFoundError`
|
||
|
|
failures.
|
||
|
|
|
||
|
|
## Matching CI locally: `NO_ENTERPRISE=1`
|
||
|
|
|
||
|
|
CI checks out with `actions/checkout@v3` and **no `submodules: recursive`**, so
|
||
|
|
`app/enterprise` is empty there and the app runs in community mode. A local
|
||
|
|
checkout usually has the submodule populated, which switches on plan and
|
||
|
|
subscription gating — and around 30 API tests then return a `403` they never
|
||
|
|
see in CI.
|
||
|
|
|
||
|
|
Those failures are environmental, not real. To get a result comparable to CI:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
cd backend && NO_ENTERPRISE=1 ./venv/bin/python -m pytest tests/ -v
|
||
|
|
```
|
||
|
|
|
||
|
|
This installs an import blocker (see the top of `conftest.py`) that makes
|
||
|
|
`app.enterprise` raise `ModuleNotFoundError`, exactly as an un-checked-out
|
||
|
|
submodule does, so the `try: import app.enterprise` guards and
|
||
|
|
`pytest.importorskip` fall back to community mode the same way.
|
||
|
|
|
||
|
|
Run **without** the flag when you are working on enterprise code and want the
|
||
|
|
gating active.
|
||
|
|
|
||
|
|
## Live agent tests
|
||
|
|
|
||
|
|
`tests_live/` runs the chat agent against the real model and local Postgres to
|
||
|
|
catch prompt-effectiveness regressions the unit suite cannot see. It sits
|
||
|
|
outside `testpaths`, so it is never collected here or in CI. See
|
||
|
|
[tests_live/README.md](../tests_live/README.md).
|