nomyo-router/test/test.md

61 lines
1.8 KiB
Markdown
Raw Normal View History

2026-05-15 16:43:12 +02:00
# Testing nomyo-router
## Setup
Install test dependencies (from the project root):
```bash
pip install -r test/requirements_test.txt
```
## Running tests
All commands run from the `test/` directory:
```bash
cd test
```
**All non-integration tests** (no backend required):
```bash
pytest -m "not integration" -v
```
**Integration tests only** (requires backend at `192.168.0.51:12434`):
```bash
pytest -m integration -v
```
**Everything:**
```bash
pytest -v
```
## Test structure
| File | What it covers | Backend needed |
|---|---|---|
| `test_unit_helpers.py` | Pure helper functions (`_mask_secrets`, `_is_fresh`, `ep2base`, etc.) | No |
| `test_unit_transforms.py` | Message transform functions (tool calls, image stripping, etc.) | No |
| `test_unit_context.py` | Context window trimming logic | No |
| `test_fetch.py` | `fetch.available_models` / `fetch.loaded_models` with mocked HTTP | No |
| `test_choose_endpoint.py` | `choose_endpoint` routing logic with mocked fetch layer | No |
| `test_api_validation.py` | HTTP 400/401/403 validation and auth middleware (in-process app) | No |
| `test_api_integration.py` | Full request/response against a real Ollama/llama-server backend | **Yes** |
## Integration test backend
Integration tests start the router in-process via `startup_event()` and route traffic
through `httpx.ASGITransport` — no separately running router instance is needed.
They do require a reachable Ollama or llama-server backend. Override the defaults via
environment variables:
```bash
export NOMYO_TEST_OLLAMA=http://192.168.0.51:12434
export NOMYO_TEST_EMBED_MODEL=nomic-embed-text # optional, auto-discovered otherwise
export NOMYO_TEST_MODEL_CHAT=llama3.2 # optional, auto-discovered otherwise
```
If the backend is unreachable, integration tests are automatically skipped.