Feat: Enforce PostgreSQL for integration tests; add Docker test stack
- 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>
This commit is contained in:
38
specs/008-postgres-integration-tests/quickstart.md
Normal file
38
specs/008-postgres-integration-tests/quickstart.md
Normal file
@@ -0,0 +1,38 @@
|
||||
# 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://"
|
||||
```
|
||||
Reference in New Issue
Block a user