Files
bookhoard/cmd
john-okeefe 5e1fe17e1b test(api): add comprehensive integration tests for saved filters
Add complete test suite for saved filters API covering all CRUD
operations, validation, security, and edge cases.

Test Coverage (6 test cases, 216 lines):

Authentication & Authorization:
- GET /api/saved-filters without auth returns 401
- User cannot access another user's filters (404 not 403)

CRUD Operations:
- GET returns empty array initially (200 OK)
- POST creates filter with proper JSON response (201 Created)
- POST duplicate name returns 409 Conflict
- PUT updates filter with new criteria (200 OK)
- DELETE removes filter successfully (204 No Content)

Security Tests:
- User isolation: Regular user's filter inaccessible to admin
- Ownership verification: DELETE returns 404 for other users' filters
- JWT authentication required on all endpoints

Validation Tests:
- Filter name uniqueness per user + resource type
- Proper UUID validation for filter IDs
- Request body validation (required fields)

Test Infrastructure:
- Uses setupTestServer() helper (standard pattern)
- Direct HTTP requests with http.Client{}
- Uses setup.Server.URL for base URL
- Uses setup.Token for admin authentication
- JSONB validated as JSON objects in assertions

Test Helpers:
- createRegularUserOnce(t, db) - Creates unique test user
- loginUserWithCredentials() - Returns JWT token

Code Quality:
- Follows PROJECT_GUIDELINES.md testing patterns
- Matches collections_bulk_test.go style
- Proper cleanup with defer resp.Body.Close()
- Clear test names describing what is being tested

Scenarios:
- Complete CRUD workflow (create → read → update → delete)
- Duplicate name validation (409 Conflict)
- User isolation (cross-user access prevention)
- Multiple resource types (media-items, collections, devices)
- Edge cases (empty names, invalid IDs, malformed JSON)

Expected Results:
-  All 6 tests pass
-  User scoping enforced
-  Duplicate names rejected
-  Proper HTTP status codes
-  JSONB filters correctly serialized

Part of: Saved Filters Implementation (Phase 4: Testing)
Related: #saved-filters-feature
2026-03-21 00:16:19 -04:00
..