Created complete test coverage for risk assessment endpoints:
- 25 test cases covering all 3 endpoints
- POST /risk-assessments (11 tests)
- GET /risk-assessments (5 tests)
- GET /risk-assessments/{id} (5 tests)
- Edge cases and error handling (4 tests)
Test features:
✅ Access control (guardian, psychologist, administrator)
✅ Ollama integration (mocked with AsyncMock)
✅ Fallback mechanisms
✅ Pagination and filtering
✅ Error handling and edge cases
✅ Data validation
Dependencies and fixes:
- Updated httpx (0.26.0 → 0.27.2) for pytest-httpx compatibility
- Fixed JWT imports (import jwt → from jose import jwt)
- Fixed Pydantic v2 field_validator syntax
- Fixed model import conflicts (removed duplicate User model)
- Updated backend/models/__init__.py to import left_behind_children models
- Added missing auth exports (blacklist_token, is_token_blacklisted, can_access_risk_assessment)
Known issue (⚠️ BLOCKING):
- SQLite UUID type incompatibility preventing tests from running
- Error: SQLiteTypeCompiler can't render UUID type
- Need to implement UUID-to-String adapter for SQLite in tests
- All 25 tests fail at setup phase
Files created/modified:
- tests/unit/test_api_risk_assessments.py (NEW - 700+ lines)
- requirements.txt (updated httpx, commented safety)
- backend/auth/__init__.py (added exports)
- backend/auth/utils.py (fixed JWT import)
- backend/auth/dependencies.py (fixed JWT import)
- backend/api/data.py (fixed Pydantic validator)
- backend/models/__init__.py (switched to left_behind_children models)
Next steps:
1. Fix UUID/SQLite compatibility (use String(36) or UUID adapter)
2. Run tests successfully
3. Achieve >95% coverage target
Progress: Issue #37 - 70% complete (tests written, need execution)
Related: #38, #39, #40, #41, #42
🤖 Generated with Claude Code
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
35 lines
878 B
YAML
35 lines
878 B
YAML
# Spectral OpenAPI Linting Rules
|
|
# https://stoplight.io/open-source/spectral
|
|
|
|
extends:
|
|
- spectral:oas
|
|
|
|
rules:
|
|
# Disable some overly strict built-in rules
|
|
oas3-unused-component: warn
|
|
|
|
# Custom rules for observability
|
|
require-health-endpoint:
|
|
severity: error
|
|
message: "API must expose /health endpoint"
|
|
given: "$.paths"
|
|
then:
|
|
field: "/health"
|
|
function: truthy
|
|
|
|
require-metrics-endpoint:
|
|
severity: warn
|
|
message: "API should expose /metrics endpoint for Prometheus"
|
|
given: "$.paths"
|
|
then:
|
|
field: "/metrics"
|
|
function: truthy
|
|
|
|
require-trace-id-in-errors:
|
|
severity: warn
|
|
message: "Error responses should include trace_id field for distributed tracing"
|
|
given: "$..responses[?(@property.match(/^[45]/))].content.application/json.schema"
|
|
then:
|
|
field: "properties.trace_id"
|
|
function: truthy
|