Add frontend integration tests
This commit is contained in:
144
tests/frontend/README.md
Normal file
144
tests/frontend/README.md
Normal file
@@ -0,0 +1,144 @@
|
||||
# Frontend Integration Tests
|
||||
|
||||
This directory contains integration tests for the existing JavaScript frontend (app.js, websocket_client.js, queue.js) with the FastAPI backend.
|
||||
|
||||
## Test Coverage
|
||||
|
||||
### `test_existing_ui_integration.py`
|
||||
|
||||
Comprehensive test suite for frontend-backend integration:
|
||||
|
||||
#### Authentication Tests (`TestFrontendAuthentication`)
|
||||
|
||||
- Auth status endpoint behavior (configured/not configured/authenticated states)
|
||||
- JWT token login flow
|
||||
- Logout functionality
|
||||
- Unauthorized request handling (401 responses)
|
||||
- Authenticated request success
|
||||
|
||||
#### Anime API Tests (`TestFrontendAnimeAPI`)
|
||||
|
||||
- GET /api/v1/anime - anime list retrieval
|
||||
- POST /api/v1/anime/search - search functionality
|
||||
- POST /api/v1/anime/rescan - trigger library rescan
|
||||
|
||||
#### Download API Tests (`TestFrontendDownloadAPI`)
|
||||
|
||||
- Adding episodes to download queue
|
||||
- Getting queue status
|
||||
- Starting/pausing/stopping download queue
|
||||
|
||||
#### WebSocket Integration Tests (`TestFrontendWebSocketIntegration`)
|
||||
|
||||
- WebSocket connection establishment with JWT token
|
||||
- Queue update broadcasts
|
||||
- Download progress updates
|
||||
|
||||
#### Configuration API Tests (`TestFrontendConfigAPI`)
|
||||
|
||||
- GET /api/config - configuration retrieval
|
||||
- POST /api/config - configuration updates
|
||||
|
||||
#### JavaScript Integration Tests (`TestFrontendJavaScriptIntegration`)
|
||||
|
||||
- Bearer token authentication pattern (makeAuthenticatedRequest)
|
||||
- 401 error handling
|
||||
- Queue operations compatibility
|
||||
|
||||
#### Error Handling Tests (`TestFrontendErrorHandling`)
|
||||
|
||||
- JSON error responses
|
||||
- Validation error handling (400/422)
|
||||
|
||||
#### Real-Time Update Tests (`TestFrontendRealTimeUpdates`)
|
||||
|
||||
- download_started notifications
|
||||
- download_completed notifications
|
||||
- Multiple clients receiving broadcasts
|
||||
|
||||
#### Data Format Tests (`TestFrontendDataFormats`)
|
||||
|
||||
- Anime list format validation
|
||||
- Queue status format validation
|
||||
- WebSocket message format validation
|
||||
|
||||
## Running the Tests
|
||||
|
||||
Run all frontend integration tests:
|
||||
|
||||
```bash
|
||||
pytest tests/frontend/test_existing_ui_integration.py -v
|
||||
```
|
||||
|
||||
Run specific test class:
|
||||
|
||||
```bash
|
||||
pytest tests/frontend/test_existing_ui_integration.py::TestFrontendAuthentication -v
|
||||
```
|
||||
|
||||
Run single test:
|
||||
|
||||
```bash
|
||||
pytest tests/frontend/test_existing_ui_integration.py::TestFrontendAuthentication::test_login_returns_jwt_token -v
|
||||
```
|
||||
|
||||
## Key Test Patterns
|
||||
|
||||
### Authenticated Client Fixture
|
||||
|
||||
Most tests use the `authenticated_client` fixture which:
|
||||
|
||||
1. Sets up master password
|
||||
2. Logs in to get JWT token
|
||||
3. Adds Authorization header to all requests
|
||||
|
||||
### WebSocket Testing
|
||||
|
||||
WebSocket tests use async context managers to establish connections:
|
||||
|
||||
```python
|
||||
async with authenticated_client.websocket_connect(
|
||||
f"/ws/connect?token={token}"
|
||||
) as websocket:
|
||||
message = await websocket.receive_json()
|
||||
# Test message format
|
||||
```
|
||||
|
||||
### API Mocking
|
||||
|
||||
Service layer is mocked to isolate frontend-backend integration:
|
||||
|
||||
```python
|
||||
with patch("src.server.api.anime.get_anime_service") as mock:
|
||||
mock_service = AsyncMock()
|
||||
mock_service.get_all_series = AsyncMock(return_value=[...])
|
||||
mock.return_value = mock_service
|
||||
```
|
||||
|
||||
## Frontend JavaScript Files Tested
|
||||
|
||||
- **app.js**: Main application logic, authentication, anime management
|
||||
- **websocket_client.js**: WebSocket client wrapper, connection management
|
||||
- **queue.js**: Download queue management, real-time updates
|
||||
|
||||
## Integration Points Verified
|
||||
|
||||
1. **Authentication Flow**: JWT token generation, validation, and usage
|
||||
2. **API Endpoints**: All REST API endpoints used by frontend
|
||||
3. **WebSocket Communication**: Real-time event broadcasting
|
||||
4. **Data Formats**: Response formats match frontend expectations
|
||||
5. **Error Handling**: Proper error responses for frontend consumption
|
||||
|
||||
## Dependencies
|
||||
|
||||
- pytest
|
||||
- pytest-asyncio
|
||||
- httpx (for async HTTP testing)
|
||||
- FastAPI test client with WebSocket support
|
||||
|
||||
## Notes
|
||||
|
||||
- Tests use in-memory state, no database persistence
|
||||
- Auth service is reset before each test
|
||||
- WebSocket service singleton is reused across tests
|
||||
- Fixtures are scoped appropriately to avoid test pollution
|
||||
Reference in New Issue
Block a user