# 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