- conftest.py: pytest_configure guard rejects non-postgresql+asyncpg:// URLs before any test collects (per constitution §2.5/§5.2 v1.3.0) - docker-compose.test.yml: isolated postgres-test (5433) + minio-test (9002) + api-test runner; one command runs the full suite against real PostgreSQL - Makefile: test-unit and test-integration targets - .env.test.example: documents variables needed to run tests outside Docker - Fix pre-existing test bug: integration tests using client fixture (NoOpAuthProvider) for write operations (upload/delete/patch) now use authed_client with Bearer token — these were never caught because tests never ran against a live stack Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
39 lines
959 B
Markdown
39 lines
959 B
Markdown
# Quickstart: Integration Test Infrastructure
|
|
|
|
## Run the full integration test suite (Docker, recommended)
|
|
|
|
```bash
|
|
docker compose -f docker-compose.test.yml run --rm api-test
|
|
```
|
|
|
|
Test services start automatically. The command exits with pytest's return code.
|
|
|
|
## Run unit tests only (no Docker required)
|
|
|
|
```bash
|
|
make test-unit
|
|
# or directly:
|
|
cd api && python -m pytest tests/unit/ -v
|
|
```
|
|
|
|
## Run integration tests from the host (test services must be running)
|
|
|
|
```bash
|
|
# Start test services
|
|
docker compose -f docker-compose.test.yml up -d postgres-test minio-test minio-init-test
|
|
|
|
# Copy and source test env vars
|
|
cp .env.test.example .env.test
|
|
export $(cat .env.test | xargs)
|
|
|
|
# Run tests
|
|
cd api && python -m pytest tests/integration/ -v
|
|
```
|
|
|
|
## Validate the guard works
|
|
|
|
```bash
|
|
TEST_DATABASE_URL=sqlite+aiosqlite:///test.db python -m pytest api/tests/integration/
|
|
# Expected: exits immediately with "Integration tests require postgresql+asyncpg://"
|
|
```
|