
brunoandClaude Sonnet 4.5
9b7a0f6ec2
test: add comprehensive risk assessments API test suite (Issue #37)
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>
2026-01-01 14:23:55 +08:00
..
2026-01-01 14:23:55 +08:00
2026-01-01 14:23:55 +08:00
2025-12-30 06:27:10 +08:00
2025-12-30 06:27:10 +08:00
2025-12-30 06:27:10 +08:00
2025-12-30 06:27:10 +08:00
2025-12-30 06:21:25 +08:00
2025-12-30 12:10:29 +08:00
2025-12-30 21:45:42 +08:00
2025-12-30 20:55:37 +08:00
2025-12-30 12:10:29 +08:00
2025-12-31 23:25:52 +08:00
2026-01-01 14:23:55 +08:00
2026-01-01 14:23:55 +08:00
2025-12-31 22:48:54 +08:00
2026-01-01 14:23:55 +08:00
2025-12-31 22:48:54 +08:00
2025-12-31 22:48:54 +08:00
2025-12-31 22:48:54 +08:00
2025-12-31 22:48:54 +08:00
2026-01-01 14:23:55 +08:00
2025-12-30 20:55:37 +08:00
2025-12-31 22:48:54 +08:00
2025-12-31 22:48:54 +08:00
2025-12-31 22:48:54 +08:00
2025-12-31 22:48:54 +08:00
2025-12-31 22:48:54 +08:00
2025-12-31 22:48:54 +08:00
2026-01-01 14:23:55 +08:00