145 lines
4.0 KiB
Markdown
145 lines
4.0 KiB
Markdown
# 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
|