Files
Aniworld/Docs/tasks.md
Lukas 8fb24ff46a docs: remove completed Task 6 from tasks.md
Task 6 (Config Backup Restore API Test fix) already resolved. Clean up
dead task entry.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-06-26 18:00:34 +02:00

11 KiB

Task 7: Fix Config Backup Delete API Test

Test Result: FAIL — Expected status: 200, got 201 (caused by preceding POST returning 200 instead of 201) File: tests/robot/api/config.robot and src/server/api/config.py Instructions: Same root cause as Task 4. The test first calls POST /api/config/backups expecting 201, but gets 200. Fix create_backup in src/server/api/config.py to return status 201. Once that is fixed, this test will pass.


Task 8: Fix Get Empty Queue Status API Test

Test Result: FAIL — List '${values}' has no item in index 0. File: tests/robot/api/download.robot Instructions: The test expects the queue status response to contain $.statistics.pending, but the JSON path extraction fails. Open src/server/api/download.py and inspect the get_queue_status endpoint. Check the QueueStatusResponse model in src/server/models/download.py. The response structure may use statistics.pending_count instead of statistics.pending, or the statistics object may be missing. Update the Robot test JSON path or fix the API response structure so they match.


Task 9: Fix Add Episodes To Queue API Test

Test Result: FAIL — Expected status: 201, got 422 File: tests/robot/api/download.robot Instructions: The test POSTs to /api/queue/add with a payload containing serie_id, serie_folder, serie_name, episodes, and priority. The server returns 422. Open src/server/models/download.py and inspect the DownloadRequest Pydantic model. Compare the model fields with the Robot test payload. The field names or types may mismatch (e.g., episodes list structure, priority enum values). Update either the model or the test payload so validation passes and the endpoint returns 201.


Task 10: Fix Start Queue API Test

Test Result: FAIL — Expected status: 200, got 400 (No pending downloads in queue) File: tests/robot/api/download.robot Instructions: The test calls POST /api/queue/start without first adding items to the queue. The endpoint returns 400 because the queue is empty. Update the test to first add episodes to the queue (using Add To Queue) before calling Start Queue. Alternatively, modify the endpoint in src/server/api/download.py to return 200 with a message when the queue is empty instead of 400. The test expectation should be aligned with the API behavior.


Task 11: Fix Resume Queue API Test

Test Result: FAIL — Expected status: 200, got 405 (Method Not Allowed) File: tests/robot/api/download.robot and src/server/api/download.py Instructions: The test calls POST /api/queue/resume, but this endpoint does not exist. Open src/server/api/download.py. There is /queue/start, /queue/stop, and /queue/pause, but no /queue/resume. Either add a POST /queue/resume endpoint that aliases to start_queue, or update the Robot test to call /queue/start instead of /queue/resume. Ensure the test and API agree.


Task 12: Fix Remove Item From Queue API Test

Test Result: FAIL — Expected status: 201, got 422 (caused by Add To Queue failing) File: tests/robot/api/download.robot Instructions: This test depends on Add To Queue working first. Fix Task 9 (Add Episodes To Queue) so items can be added. Then verify that the DELETE /api/queue/item/{item_id} endpoint in src/server/api/download.py works correctly and returns 200.


Task 13: Fix Retry Failed Item API Test

Test Result: FAIL — Expected status: 200, got 400 File: tests/robot/api/download.robot Instructions: The test adds an item and then immediately retries it, but there are no failed items to retry. The POST /api/queue/retry endpoint returns 400 when no failed items exist. Update the test to first add an item, simulate a failure (or mock it), and then retry. Alternatively, modify the endpoint to return 200 with retried_count: 0 when there are no failed items instead of 400.


Task 14: Fix Queue Statistics Accuracy API Test

Test Result: FAIL — Expected status: 200, got 400 (No pending downloads in queue) File: tests/robot/api/download.robot Instructions: The test calls Clear Pending and then Add To Queue, but Add To Queue fails with 422 (see Task 9). Fix Task 9 first. Then verify that after adding 2 items, Get Queue Status returns statistics.pending (or statistics.pending_count) equal to 2. Update the JSON path in the test if the response field name differs.


Task 15: Fix Connect To WebSocket API Test

Test Result: FAIL — Evaluate keyword syntax error / requires custom keyword library File: tests/robot/api/websocket.robot Instructions: The test tries to evaluate __import__('asyncio').run(__import__('websockets').connect(...)) inline, which is unreliable in Robot Framework. Create a small Python keyword library (e.g., tests/robot/resources/websocket_keywords.py) that wraps WebSocket connection logic using the websockets library. Import this library in websocket.robot and replace the inline Evaluate with a proper keyword like Connect To WebSocket. Ensure the library handles token-based authentication.


UI Tests


Task 16: Fix Login Page Loads UI Test

Test Result: FAIL — TimeoutError: locator.waitFor: Timeout 5000ms exceeded. Call log: waiting for locator('id=password-input') to be visible File: tests/robot/ui/login.robot and src/server/web/templates/login.html Instructions: The Robot test looks for id=password-input, but the HTML template uses id=password. Open src/server/web/templates/login.html and change the password input element's id from password to password-input. Also check id=login-submit-btn — the template uses id=login-button. Change it to id=login-submit-btn. Ensure all referenced element IDs in the Robot tests match the actual HTML.


Task 17: Fix Login With Valid Password UI Test

Test Result: FAIL — Same as Task 16 (id=password-input not found) File: tests/robot/ui/login.robot and src/server/web/templates/login.html Instructions: Fix the element ID mismatches in login.html as described in Task 16. The Perform Login keyword in tests/robot/resources/ui_keywords.resource fills id=password-input and clicks id=login-submit-btn. Update the HTML template IDs to match.


Task 18: Fix Login With Invalid Password UI Test

Test Result: FAIL — Same as Task 16 File: tests/robot/ui/login.robot and src/server/web/templates/login.html Instructions: Fix the element ID mismatches in login.html as described in Task 16. Also verify that the error message element id=login-error exists in the template and is shown when login fails.


Task 19: Fix Login Rate Limit UI UI Test

Test Result: FAIL — Same as Task 16 File: tests/robot/ui/login.robot and src/server/web/templates/login.html Instructions: Fix the element ID mismatches in login.html as described in Task 16. Also verify that after 5 failed attempts, the login form shows a lockout message containing the word "lockout" and the id=login-error element displays it.


Task 20: Fix Password Visibility Toggle UI Test

Test Result: FAIL — Same as Task 16 File: tests/robot/ui/login.robot and src/server/web/templates/login.html Instructions: Fix the element ID mismatches in login.html as described in Task 16. The test clicks id=password-toggle — verify this ID exists in the template (it may be id=password-toggle already, but confirm). Ensure the toggle button changes the input type attribute between password and text.


Task 21: Fix Logout UI Test

Test Result: FAIL — Same as Task 16 File: tests/robot/ui/login.robot and src/server/web/templates/login.html Instructions: Fix the element ID mismatches in login.html as described in Task 16. The Perform Logout keyword clicks id=logout-btn. Verify this button exists in the dashboard/index template and redirects to /login after logout.


Task 22: Fix All Dashboard UI Tests

Test Result: FAIL — All 11 tests fail with TimeoutError: locator.fill: Timeout 10000ms exceeded. Call log: waiting for locator('id=password-input') File: tests/robot/ui/dashboard.robot and src/server/web/templates/login.html Instructions: All dashboard tests depend on logging in first. The login step fails because of the id=password-input mismatch. Fix Task 16 first. Then verify that after login, the dashboard page loads and contains the elements referenced in the tests: id=search-input, theme toggle, rescan button, missing episodes filter, etc. Update element IDs in the dashboard HTML or Robot tests as needed.


Task 23: Fix All Anime Settings UI Tests

Test Result: FAIL — All 3 tests fail with the same login timeout File: tests/robot/ui/anime_settings.robot Instructions: Fix Task 16 first. Then verify that the anime settings page loads after login and contains the elements expected by the Robot tests. Update IDs in the HTML or tests as needed.


Task 24: Fix All Queue Page UI Tests

Test Result: FAIL — All 6 tests fail with the same login timeout File: tests/robot/ui/queue_page.robot Instructions: Fix Task 16 first. Then verify that the queue page loads after login and contains the elements expected by the Robot tests. Update IDs in the HTML or tests as needed.


Task 25: Fix All Settings Modal UI Tests

Test Result: FAIL — All tests fail with the same login timeout File: tests/robot/ui/settings_modal.robot Instructions: Fix Task 16 first. Then verify that the settings modal opens from the dashboard and contains the expected form elements. Update IDs in the HTML or tests as needed.


Task 26: Fix All Setup Flow UI Tests

Test Result: FAIL — All tests fail with the same login timeout File: tests/robot/ui/setup_flow.robot Instructions: Fix Task 16 first. The setup flow tests may need to run before the app is configured. Verify that tests/robot/start_server.sh correctly removes data/config.json so the app starts unconfigured. Ensure the setup page elements match the Robot test selectors.


Task 27: Fix All Responsive UI Tests

Test Result: FAIL — All tests fail with the same login timeout File: tests/robot/ui/responsive.robot Instructions: Fix Task 16 first. Then verify that responsive layout tests check for viewport-specific elements that actually exist in the HTML.


Summary of Root Causes

  1. Config APIPOST /api/config/backups returns 200 instead of 201. ConfigUpdate model may reject other field. LoggingConfig may reject None for file/max_bytes.
  2. Download Queue APIDownloadRequest model validation fails on the test payload. GET /queue/status response field names may differ from test expectations. POST /queue/resume endpoint is missing. Start Queue returns 400 on empty queue.
  3. WebSocket API — Inline Evaluate with asyncio is unreliable; needs a proper Python keyword library.
  4. UI Login Page — HTML element IDs (password, login-button) do not match Robot test selectors (password-input, login-submit-btn).
  5. All Other UI Tests — Fail because they cannot log in due to the ID mismatch above.