Files
hms-licht-ton/backend/test_report.md
T

84 lines
3.1 KiB
Markdown
Raw Normal View History

# Test Report T03 Backend Core
## Task
T03: Backend Core FastAPI + DB Models + Equipment API + Redis Cache + Health
## Date
2026-07-09
## Test Commands Run
### 1. pytest (all tests)
```
cd backend && python -m pytest tests/ -v --cov=app --cov-report=term-missing
```
### 2. App import check
```
cd backend && python -c 'from app.main import app; print(app.title)'
```
Output: `HMS Licht & Ton API`
## Test Results
**28 tests, all passed, 0 warnings**
| Test File | Tests | Status |
|----------|-------|--------|
| test_cache.py | 8 | ALL PASS |
| test_contact_router.py | 5 | ALL PASS |
| test_equipment_router.py | 9 | ALL PASS |
| test_health.py | 1 | ALL PASS |
| test_models.py | 5 | ALL PASS |
## Coverage Report
```
Name Stmts Miss Cover Missing
------------------------------------------------------------
app/__init__.py 0 0 100%
app/cache.py 62 13 79%
app/config.py 19 0 100%
app/database.py 11 2 82%
app/main.py 18 3 83%
app/models/__init__.py 6 0 100%
app/models/admin_user.py 10 0 100%
app/models/contact.py 14 0 100%
app/models/equipment.py 22 0 100%
app/models/rental_request.py 40 0 100%
app/models/sync_log.py 15 0 100%
app/routers/__init__.py 0 0 100%
app/routers/contact.py 17 1 94%
app/routers/equipment.py 60 15 75%
app/routers/health.py 17 3 82%
app/schemas/__init__.py 3 0 100%
app/schemas/contact.py 16 0 100%
app/schemas/equipment.py 33 0 100%
------------------------------------------------------------
TOTAL 363 37 90%
```
**Overall coverage: 90% (target: 80%)**
## Acceptance Criteria Verification
1. ✅ GET /api/health returns 200 with status, db, redis fields
2. ✅ GET /api/equipment returns 200 with paginated response (items, total, page, page_size, total_pages)
3. ✅ GET /api/equipment?search=K2 returns only matching items
4. ✅ GET /api/equipment?category=Lautsprecher returns only matching items
5. ✅ GET /api/equipment?sort=name_desc returns items sorted descending
6. ✅ GET /api/equipment/categories returns 200 with array of category strings
7. ✅ GET /api/equipment/{id} returns 200 with full equipment detail for valid ID
8. ✅ GET /api/equipment/999999 returns 404
9. ✅ Redis caches equipment list (via fakeredis test)
10. ✅ All 6 DB models defined with correct columns and indexes
11. ✅ POST /api/contact returns 201 with valid data
12. ✅ POST /api/contact returns 422 with invalid email
13. ✅ POST /api/contact returns 422 with privacy_consent=False
14. ✅ Rate limiting active (6th request returns 429)
## Smoke Test
- App starts: `python -c 'from app.main import app; print(app.title)'` → "HMS Licht & Ton API"
- All endpoints tested via ASGITransport with in-memory SQLite + fakeredis
- No real Redis or PostgreSQL needed for tests