Files
Aniworld/Docs/tasks.md
2026-06-21 12:28:35 +02:00

2048 lines
62 KiB
Markdown

### Task INFRA-2: Fix Suite Teardown — Close Browser Keyword Argument Mismatch
- **Failing Step**: `Suite Teardown → Close Browser`
- **Failure Message**: `Keyword 'common.Close Browser' expected 0 arguments, got 1`
- **Files to Check**:
- `tests/robot/__init__.robot`
- `tests/robot/resources/common.resource`
- `tests/robot/resources/ui_keywords.resource`
- **Reference Docs**:
- `Docs/TESTING.md`
- **Expected Behavior**:
- The suite teardown should cleanly close the browser and stop the server without errors.
- **Actual Behavior**:
- The `Close Browser` keyword is being called with an argument (likely `${BROWSER}` or similar), but the keyword definition expects 0 arguments.
- **Suggested Fix**:
- Review `__init__.robot` line: `Close Browser` — remove any passed arguments.
- Or, if a custom wrapper keyword is intended, define it in `ui_keywords.resource` and call that instead.
---
## API Tests — `Robot.Api.Anime` (14 tests, 0 passed, 14 failed)
> **Parent Suite Setup Failed**: `Server did not become healthy within 30 seconds`
### Task API-ANIME-1: Get Anime Library Status
- **Test File**: `tests/robot/api/anime.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/anime.robot`
- `tests/robot/resources/common.resource`
- `tests/robot/resources/api_keywords.resource`
- `src/server/controllers/anime_controller.py` (or equivalent)
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- `GET /api/anime/status` returns HTTP 200 with JSON containing `directory` and `series_count`.
---
### Task API-ANIME-2: Rescan Library
- **Test File**: `tests/robot/api/anime.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/anime.robot`
- `src/server/controllers/anime_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- `POST /api/anime/rescan` returns HTTP 200, triggering a library rescan.
---
### Task API-ANIME-3: Scan Status During Idle
- **Test File**: `tests/robot/api/anime.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/anime.robot`
- `src/server/controllers/anime_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- `GET /api/anime/scan-status` returns HTTP 200 with `in_progress: False` when idle.
---
### Task API-ANIME-4: Search Anime
- **Test File**: `tests/robot/api/anime.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/anime.robot`
- `src/server/controllers/anime_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- `GET /api/anime/search?q=attack` returns HTTP 200 with valid JSON search results.
---
### Task API-ANIME-5: Add New Series
- **Test File**: `tests/robot/api/anime.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/anime.robot`
- `src/server/controllers/anime_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- `POST /api/anime/` with payload `{url, name, year}` returns HTTP 201 and a `key` in the response.
---
### Task API-ANIME-6: Get Series Details
- **Test File**: `tests/robot/api/anime.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/anime.robot`
- `src/server/controllers/anime_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- `GET /api/anime/{key}` returns HTTP 200 with `key`, `name`, `folder`, `episodes`.
---
### Task API-ANIME-7: Update Series Settings
- **Test File**: `tests/robot/api/anime.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/anime.robot`
- `src/server/controllers/anime_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- `PUT /api/anime/{key}/settings` returns HTTP 200 and persists settings like `preferred_language`.
---
### Task API-ANIME-8: Get Series Episodes
- **Test File**: `tests/robot/api/anime.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/anime.robot`
- `src/server/controllers/anime_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- `GET /api/anime/{key}/episodes` returns HTTP 200 with valid JSON episode list.
---
### Task API-ANIME-9: Delete Series
- **Test File**: `tests/robot/api/anime.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/anime.robot`
- `src/server/controllers/anime_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- `DELETE /api/anime/{key}` returns HTTP 200.
- Subsequent `GET /api/anime/{key}` returns HTTP 404.
---
### Task API-ANIME-10: List All Series
- **Test File**: `tests/robot/api/anime.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/anime.robot`
- `src/server/controllers/anime_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- `GET /api/anime/` returns HTTP 200 with valid JSON list.
---
### Task API-ANIME-11: List Missing Episodes Only
- **Test File**: `tests/robot/api/anime.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/anime.robot`
- `src/server/controllers/anime_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- `GET /api/anime/?filter=missing` returns HTTP 200 with series that have missing episodes.
---
### Task API-ANIME-12: List No Episodes
- **Test File**: `tests/robot/api/anime.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/anime.robot`
- `src/server/controllers/anime_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- `GET /api/anime/?filter=no_episodes` returns HTTP 200 with series having zero episodes.
---
### Task API-ANIME-13: Duplicate Folders Detection
- **Test File**: `tests/robot/api/anime.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/anime.robot`
- `src/server/controllers/anime_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- Endpoint returns duplicate folder groups if any exist.
---
### Task API-ANIME-14: Regenerate NFO For Series
- **Test File**: `tests/robot/api/anime.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/anime.robot`
- `src/server/controllers/anime_controller.py`
- `src/server/services/nfo_service.py`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/NFO_GUIDE.md`
- **Expected Behavior**:
- `POST /api/anime/{key}/regenerate-nfo` returns HTTP 200 and triggers NFO regeneration.
---
## API Tests — `Robot.Api.Auth` (12 tests, 0 passed, 12 failed)
> **Parent Suite Setup Failed**: `Server did not become healthy within 30 seconds`
### Task API-AUTH-1: Setup Master Password
- **Test File**: `tests/robot/api/auth.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/auth.robot`
- `tests/robot/resources/common.resource`
- `src/server/controllers/auth_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- `POST /api/auth/setup` with `{master_password, anime_directory, name, ...}` returns HTTP 201.
- Subsequent auth status shows `configured: True`.
---
### Task API-AUTH-2: Setup Rejects Weak Password
- **Test File**: `tests/robot/api/auth.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/auth.robot`
- `src/server/controllers/auth_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- `POST /api/auth/setup` with weak password returns HTTP 400.
---
### Task API-AUTH-3: Setup Rejects Duplicate
- **Test File**: `tests/robot/api/auth.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/auth.robot`
- `src/server/controllers/auth_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- Second `POST /api/auth/setup` returns HTTP 400 when already configured.
---
### Task API-AUTH-4: Login With Valid Password
- **Test File**: `tests/robot/api/auth.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/auth.robot`
- `src/server/controllers/auth_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- `POST /api/auth/login` with correct password returns HTTP 200 and a JWT `access_token`.
---
### Task API-AUTH-5: Login With Invalid Password
- **Test File**: `tests/robot/api/auth.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/auth.robot`
- `src/server/controllers/auth_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- `POST /api/auth/login` with wrong password returns HTTP 401.
---
### Task API-AUTH-6: Login Rate Limiting
- **Test File**: `tests/robot/api/auth.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/auth.robot`
- `src/server/controllers/auth_controller.py`
- `src/server/middleware/rate_limiter.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- After 6 failed login attempts, subsequent attempts return HTTP 429 (or remain 401 depending on implementation).
---
### Task API-AUTH-7: Auth Status Unconfigured
- **Test File**: `tests/robot/api/auth.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/auth.robot`
- `src/server/controllers/auth_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- `GET /api/auth/status` before setup returns `configured: False`.
---
### Task API-AUTH-8: Auth Status Configured Unauthenticated
- **Test File**: `tests/robot/api/auth.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/auth.robot`
- `src/server/controllers/auth_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- `GET /api/auth/status` after setup but without token returns `configured: True`, `authenticated: False`.
---
### Task API-AUTH-9: Auth Status Authenticated
- **Test File**: `tests/robot/api/auth.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/auth.robot`
- `src/server/controllers/auth_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- `GET /api/auth/status` with valid Bearer token returns `authenticated: True`.
---
### Task API-AUTH-10: Logout
- **Test File**: `tests/robot/api/auth.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/auth.robot`
- `src/server/controllers/auth_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- `POST /api/auth/logout` with valid token returns HTTP 200 and invalidates the token.
---
### Task API-AUTH-11: Protected Endpoint Without Auth
- **Test File**: `tests/robot/api/auth.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/auth.robot`
- `src/server/middleware/auth.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- Accessing a protected endpoint without a token returns HTTP 401 or 403.
---
### Task API-AUTH-12: Protected Endpoint With Auth
- **Test File**: `tests/robot/api/auth.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/auth.robot`
- `src/server/middleware/auth.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- Accessing a protected endpoint with a valid Bearer token returns HTTP 200.
---
## API Tests — `Robot.Api.Config` (10 tests, 0 passed, 10 failed)
> **Parent Suite Setup Failed**: `Server did not become healthy within 30 seconds`
### Task API-CONFIG-1: Get Default Config
- **Test File**: `tests/robot/api/config.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/config.robot`
- `src/server/controllers/config_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/CONFIGURATION.md`
- **Expected Behavior**:
- `GET /api/config` returns HTTP 200 with keys: `name`, `data_dir`, `scheduler`, `logging`, `backup`, `nfo`.
---
### Task API-CONFIG-2: Update Config
- **Test File**: `tests/robot/api/config.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/config.robot`
- `src/server/controllers/config_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/CONFIGURATION.md`
- **Expected Behavior**:
- `PUT /api/config` updates fields and returns HTTP 200. Persisted values are reflected on subsequent GET.
---
### Task API-CONFIG-3: Validate Valid Config
- **Test File**: `tests/robot/api/config.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/config.robot`
- `src/server/controllers/config_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/CONFIGURATION.md`
- **Expected Behavior**:
- `POST /api/config/validate` with well-formed config returns HTTP 200 and `valid: True`.
---
### Task API-CONFIG-4: Validate Invalid Config Missing Name
- **Test File**: `tests/robot/api/config.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/config.robot`
- `src/server/controllers/config_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/CONFIGURATION.md`
- **Expected Behavior**:
- `POST /api/config/validate` missing required `name` field returns HTTP 422.
---
### Task API-CONFIG-5: Validate Invalid Schedule Time
- **Test File**: `tests/robot/api/config.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/config.robot`
- `src/server/controllers/config_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/CONFIGURATION.md`
- **Expected Behavior**:
- `POST /api/config/validate` with `schedule_time: 25:00` returns HTTP 422.
---
### Task API-CONFIG-6: Validate Invalid Log Level
- **Test File**: `tests/robot/api/config.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/config.robot`
- `src/server/controllers/config_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/CONFIGURATION.md`
- **Expected Behavior**:
- `POST /api/config/validate` with `logging.level: INVALID` returns HTTP 422.
---
### Task API-CONFIG-7: Config Backup Create
- **Test File**: `tests/robot/api/config.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/config.robot`
- `src/server/controllers/config_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/CONFIGURATION.md`
- **Expected Behavior**:
- `POST /api/config/backup` creates a backup and returns HTTP 200.
---
### Task API-CONFIG-8: Config Backup List
- **Test File**: `tests/robot/api/config.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/config.robot`
- `src/server/controllers/config_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/CONFIGURATION.md`
- **Expected Behavior**:
- `GET /api/config/backups` returns HTTP 200 with a list of backups.
---
### Task API-CONFIG-9: Config Backup Restore
- **Test File**: `tests/robot/api/config.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/config.robot`
- `src/server/controllers/config_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/CONFIGURATION.md`
- **Expected Behavior**:
- `POST /api/config/restore` restores a selected backup and returns HTTP 200.
---
### Task API-CONFIG-10: Config Backup Delete
- **Test File**: `tests/robot/api/config.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/config.robot`
- `src/server/controllers/config_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/CONFIGURATION.md`
- **Expected Behavior**:
- `DELETE /api/config/backup/{id}` removes the backup and returns HTTP 200.
---
## API Tests — `Robot.Api.Download` (12 tests, 0 passed, 12 failed)
> **Parent Suite Setup Failed**: `Server did not become healthy within 30 seconds`
### Task API-DL-1: Get Empty Queue Status
- **Test File**: `tests/robot/api/download.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/download.robot`
- `src/server/controllers/download_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- `GET /api/download/queue` returns HTTP 200 with `status`, `statistics`, and `pending: 0`.
---
### Task API-DL-2: Add Episodes To Queue
- **Test File**: `tests/robot/api/download.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/download.robot`
- `src/server/controllers/download_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- `POST /api/download/queue` with episode list returns HTTP 201 and `item_ids`.
---
### Task API-DL-3: Start Queue
- **Test File**: `tests/robot/api/download.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/download.robot`
- `src/server/controllers/download_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- `POST /api/download/start` returns HTTP 200 and begins processing.
---
### Task API-DL-4: Stop Queue
- **Test File**: `tests/robot/api/download.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/download.robot`
- `src/server/controllers/download_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- `POST /api/download/stop` returns HTTP 200 and halts processing.
---
### Task API-DL-5: Pause Queue
- **Test File**: `tests/robot/api/download.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/download.robot`
- `src/server/controllers/download_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- `POST /api/download/pause` returns HTTP 200 and pauses processing.
---
### Task API-DL-6: Resume Queue
- **Test File**: `tests/robot/api/download.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/download.robot`
- `src/server/controllers/download_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- `POST /api/download/resume` returns HTTP 200 and resumes processing.
---
### Task API-DL-7: Clear Completed Downloads
- **Test File**: `tests/robot/api/download.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/download.robot`
- `src/server/controllers/download_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- `POST /api/download/clear/completed` returns HTTP 200 and removes completed items.
---
### Task API-DL-8: Clear Failed Downloads
- **Test File**: `tests/robot/api/download.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/download.robot`
- `src/server/controllers/download_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- `POST /api/download/clear/failed` returns HTTP 200 and removes failed items.
---
### Task API-DL-9: Clear Pending Downloads
- **Test File**: `tests/robot/api/download.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/download.robot`
- `src/server/controllers/download_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- `POST /api/download/clear/pending` returns HTTP 200 and removes pending items.
---
### Task API-DL-10: Remove Item From Queue
- **Test File**: `tests/robot/api/download.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/download.robot`
- `src/server/controllers/download_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- `DELETE /api/download/queue/{item_id}` returns HTTP 200 and removes the specific item.
---
### Task API-DL-11: Retry Failed Item
- **Test File**: `tests/robot/api/download.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/download.robot`
- `src/server/controllers/download_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- `POST /api/download/retry/{item_id}` returns HTTP 200 and re-queues the failed item.
---
### Task API-DL-12: Queue Statistics Accuracy
- **Test File**: `tests/robot/api/download.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/download.robot`
- `src/server/controllers/download_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- `GET /api/download/queue` statistics reflect the actual state of pending, active, completed, and failed items.
---
## API Tests — `Robot.Api.Health` (2 tests, 0 passed, 2 failed)
> **Parent Suite Setup Failed**: `Server did not become healthy within 30 seconds`
### Task API-HEALTH-1: Basic Health Check
- **Test File**: `tests/robot/api/health.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/health.robot`
- `src/server/controllers/health_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- `GET /health` returns HTTP 200 with `status: healthy`.
---
### Task API-HEALTH-2: Detailed Health Check
- **Test File**: `tests/robot/api/health.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/health.robot`
- `src/server/controllers/health_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- `GET /health/detailed` returns HTTP 200 with `status`, `version`, `uptime`, `memory`, `cpu`.
---
## API Tests — `Robot.Api.Logging` (6 tests, 0 passed, 6 failed)
> **Parent Suite Setup Failed**: `Server did not become healthy within 30 seconds`
### Task API-LOG-1: Get Logging Config
- **Test File**: `tests/robot/api/logging.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/logging.robot`
- `src/server/controllers/logging_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/InstructionsLogging.md`
- **Expected Behavior**:
- `GET /api/logging/config` returns HTTP 200 with `level`, `file`, `max_bytes`, `backup_count`.
---
### Task API-LOG-2: List Log Files
- **Test File**: `tests/robot/api/logging.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/logging.robot`
- `src/server/controllers/logging_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/InstructionsLogging.md`
- **Expected Behavior**:
- `GET /api/logging/files` returns HTTP 200 with a list of available log files.
---
### Task API-LOG-3: Tail Log File
- **Test File**: `tests/robot/api/logging.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/logging.robot`
- `src/server/controllers/logging_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/InstructionsLogging.md`
- **Expected Behavior**:
- `GET /api/logging/tail/{filename}` returns HTTP 200 with the tail contents of the log file.
---
### Task API-LOG-4: Download Log File
- **Test File**: `tests/robot/api/logging.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/logging.robot`
- `src/server/controllers/logging_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/InstructionsLogging.md`
- **Expected Behavior**:
- `GET /api/logging/download/{filename}` returns HTTP 200 with `Content-Type: application/octet-stream`.
---
### Task API-LOG-5: Write Test Log Messages
- **Test File**: `tests/robot/api/logging.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/logging.robot`
- `src/server/controllers/logging_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/InstructionsLogging.md`
- **Expected Behavior**:
- `POST /api/logging/test` writes test messages at various levels and returns HTTP 200.
---
### Task API-LOG-6: Cleanup Old Logs
- **Test File**: `tests/robot/api/logging.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/logging.robot`
- `src/server/controllers/logging_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/InstructionsLogging.md`
- **Expected Behavior**:
- `DELETE /api/logging/cleanup` deletes old log files and returns HTTP 200.
---
## API Tests — `Robot.Api.Nfo` (4 tests, 0 passed, 4 failed)
> **Parent Suite Setup Failed**: `Server did not become healthy within 30 seconds`
### Task API-NFO-1: Get NFO Diagnostics
- **Test File**: `tests/robot/api/nfo.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/nfo.robot`
- `src/server/controllers/nfo_controller.py`
- `src/server/services/nfo_service.py`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/NFO_GUIDE.md`
- **Expected Behavior**:
- `GET /api/nfo/diagnostics/{series_key}` returns HTTP 200 with diagnostic info.
---
### Task API-NFO-2: Repair NFO For Series
- **Test File**: `tests/robot/api/nfo.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/nfo.robot`
- `src/server/controllers/nfo_controller.py`
- `src/server/services/nfo_service.py`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/NFO_GUIDE.md`
- **Expected Behavior**:
- `POST /api/nfo/repair/{series_key}` returns HTTP 200 and regenerates NFO files.
---
### Task API-NFO-3: List Series Needing Repair
- **Test File**: `tests/robot/api/nfo.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/nfo.robot`
- `src/server/controllers/nfo_controller.py`
- `src/server/services/nfo_service.py`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/NFO_GUIDE.md`
- **Expected Behavior**:
- `GET /api/nfo/needs-repair` returns HTTP 200 with `total` and `series` list.
---
### Task API-NFO-4: Run NFO Scan
- **Test File**: `tests/robot/api/nfo.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/nfo.robot`
- `src/server/controllers/nfo_controller.py`
- `src/server/services/nfo_service.py`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/NFO_GUIDE.md`
- **Expected Behavior**:
- `POST /api/nfo/scan` returns HTTP 200 with `total`, `created`, `updated`, `errors_count`, `duration_seconds`.
---
## API Tests — `Robot.Api.Scheduler` (6 tests, 0 passed, 6 failed)
> **Parent Suite Setup Failed**: `Server did not become healthy within 30 seconds`
### Task API-SCHED-1: Get Scheduler Config
- **Test File**: `tests/robot/api/scheduler.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/scheduler.robot`
- `src/server/controllers/scheduler_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/CONFIGURATION.md`
- **Expected Behavior**:
- `GET /api/scheduler/config` returns HTTP 200 with `success`, `config` (enabled, interval_minutes, schedule_time, schedule_days, auto_download_after_rescan), and `status` (is_running, next_run, last_run, scan_in_progress).
---
### Task API-SCHED-2: Update Scheduler Config
- **Test File**: `tests/robot/api/scheduler.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/scheduler.robot`
- `src/server/controllers/scheduler_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/CONFIGURATION.md`
- **Expected Behavior**:
- `PUT /api/scheduler/config` updates settings and returns HTTP 200 with persisted values.
---
### Task API-SCHED-3: Trigger Manual Rescan
- **Test File**: `tests/robot/api/scheduler.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/scheduler.robot`
- `src/server/controllers/scheduler_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/CONFIGURATION.md`
- **Expected Behavior**:
- `POST /api/scheduler/trigger` returns HTTP 200 with `success: True`.
---
### Task API-SCHED-4: Invalid Schedule Time
- **Test File**: `tests/robot/api/scheduler.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/scheduler.robot`
- `src/server/controllers/scheduler_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/CONFIGURATION.md`
- **Expected Behavior**:
- `PUT /api/scheduler/config` with `schedule_time: 25:00` returns HTTP 422.
---
### Task API-SCHED-5: Invalid Schedule Days
- **Test File**: `tests/robot/api/scheduler.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/scheduler.robot`
- `src/server/controllers/scheduler_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/CONFIGURATION.md`
- **Expected Behavior**:
- `PUT /api/scheduler/config` with `schedule_days: ['monday', 'tuesday']` returns HTTP 422.
---
### Task API-SCHED-6: Empty Schedule Days
- **Test File**: `tests/robot/api/scheduler.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/scheduler.robot`
- `src/server/controllers/scheduler_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/CONFIGURATION.md`
- **Expected Behavior**:
- `PUT /api/scheduler/config` with `schedule_days: []` returns HTTP 200 (empty list accepted).
---
## API Tests — `Robot.Api.Setup` (3 tests, 0 passed, 3 failed)
> **Parent Suite Setup Failed**: `Server did not become healthy within 30 seconds`
### Task API-SETUP-1: List Unresolved Folders
- **Test File**: `tests/robot/api/setup.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/setup.robot`
- `src/server/controllers/setup_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- `GET /api/setup/unresolved` returns HTTP 200 with a list of unresolved folders.
---
### Task API-SETUP-2: Get Unresolved Folder Details
- **Test File**: `tests/robot/api/setup.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/setup.robot`
- `src/server/controllers/setup_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- `GET /api/setup/unresolved/{folder}` returns HTTP 200 with folder details.
---
### Task API-SETUP-3: Resolve Folder With Provider Key
- **Test File**: `tests/robot/api/setup.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/setup.robot`
- `src/server/controllers/setup_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- `POST /api/setup/resolve` with `{folder, provider_key}` returns HTTP 200 and maps the folder.
---
## API Tests — `Robot.Api.Websocket` (4 tests, 0 passed, 4 failed)
> **Parent Suite Setup Failed**: `Server did not become healthy within 30 seconds`
### Task API-WS-1: Connect To WebSocket
- **Test File**: `tests/robot/api/websocket.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/websocket.robot`
- `src/server/controllers/websocket_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- `ws://127.0.0.1:8765/ws/connect?token={jwt}` establishes a WebSocket connection.
- **Note**:
- Test currently uses `Pass Execution` placeholder because a custom keyword library is needed for full WebSocket testing.
---
### Task API-WS-2: Subscribe To Rooms
- **Test File**: `tests/robot/api/websocket.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/websocket.robot`
- `src/server/controllers/websocket_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- Client can subscribe to rooms: `downloads`, `queue`, `scan`, `system`.
- **Note**:
- Test currently uses `Pass Execution` placeholder.
---
### Task API-WS-3: Receive Ping Pong
- **Test File**: `tests/robot/api/websocket.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/websocket.robot`
- `src/server/controllers/websocket_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- Server sends periodic ping/pong heartbeat messages.
- **Note**:
- Test currently uses `Pass Execution` placeholder.
---
### Task API-WS-4: Receive System Notification
- **Test File**: `tests/robot/api/websocket.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/api/websocket.robot`
- `src/server/controllers/websocket_controller.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- Triggering an action emits a system message over WebSocket.
- **Note**:
- Test currently uses `Pass Execution` placeholder.
---
## UI Tests — `Robot.Ui.Anime Settings` (3 tests, 0 passed, 3 failed)
> **Parent Suite Setup Failed**: `Server did not become healthy within 30 seconds`
### Task UI-ANIME-1: Anime Settings Page Loads
- **Test File**: `tests/robot/ui/anime_settings.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/anime_settings.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/templates/anime_settings.html` (or equivalent)
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- Navigating to `/anime/settings?key=attack-on-titan` loads the settings form with `regenerate-nfo-btn` and `save-anime-settings-btn` visible.
---
### Task UI-ANIME-2: Regenerate NFO
- **Test File**: `tests/robot/ui/anime_settings.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/anime_settings.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/anime_settings.js`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/NFO_GUIDE.md`
- **Expected Behavior**:
- Clicking `#regenerate-nfo-btn` triggers an API call and displays a toast containing "NFO".
---
### Task UI-ANIME-3: Update Series Settings
- **Test File**: `tests/robot/ui/anime_settings.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/anime_settings.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/anime_settings.js`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/CONFIGURATION.md`
- **Expected Behavior**:
- Changing `preferred-language-select` and `custom-folder-input`, then clicking `#save-anime-settings-btn`, saves settings and shows a toast containing "saved".
---
## UI Tests — `Robot.Ui.Dashboard` (11 tests, 0 passed, 11 failed)
> **Parent Suite Setup Failed**: `Server did not become healthy within 30 seconds`
### Task UI-DASH-1: Dashboard Loads
- **Test File**: `tests/robot/ui/dashboard.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/dashboard.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/templates/index.html`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- Dashboard page title contains "AniWorld" and shows `search-input`, `search-btn`, `rescan-btn`, `theme-toggle`, `config-btn`.
---
### Task UI-DASH-2: Search For Anime
- **Test File**: `tests/robot/ui/dashboard.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/dashboard.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/dashboard.js`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- Typing "attack" in `search-input` and submitting shows `search-results-list`.
---
### Task UI-DASH-3: Clear Search
- **Test File**: `tests/robot/ui/dashboard.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/dashboard.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/dashboard.js`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- Clicking clear search hides `search-results`.
---
### Task UI-DASH-4: Theme Toggle To Dark
- **Test File**: `tests/robot/ui/dashboard.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/dashboard.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/theme.js`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- Clicking `#theme-toggle` switches the theme to `dark`.
---
### Task UI-DASH-5: Theme Toggle To Light
- **Test File**: `tests/robot/ui/dashboard.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/dashboard.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/theme.js`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- Clicking `#theme-toggle` twice returns the theme to `light`.
---
### Task UI-DASH-6: Theme Persists After Reload
- **Test File**: `tests/robot/ui/dashboard.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/dashboard.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/theme.js`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- After toggling to dark and reloading, the theme remains `dark` (persisted in localStorage or cookie).
---
### Task UI-DASH-7: Rescan Button
- **Test File**: `tests/robot/ui/dashboard.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/dashboard.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/dashboard.js`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- Clicking `#rescan-btn` triggers a rescan and shows `#rescan-status .status-dot.scanning`.
---
### Task UI-DASH-8: Show Missing Episodes Only
- **Test File**: `tests/robot/ui/dashboard.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/dashboard.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/dashboard.js`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- Clicking `#show-missing-only` sets `data-active="true"` on the button.
---
### Task UI-DASH-9: Show All Series
- **Test File**: `tests/robot/ui/dashboard.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/dashboard.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/dashboard.js`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- Clicking `#show-all-series` sets `data-active="true"` on the button.
---
### Task UI-DASH-10: Select All Series
- **Test File**: `tests/robot/ui/dashboard.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/dashboard.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/dashboard.js`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- Clicking `#select-all` checks all series checkboxes.
---
### Task UI-DASH-11: Download Selected
- **Test File**: `tests/robot/ui/dashboard.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/dashboard.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/dashboard.js`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- Selecting a series and clicking download-selected triggers a download request.
---
## UI Tests — `Robot.Ui.Login` (6 tests, 0 passed, 6 failed)
> **Parent Suite Setup Failed**: `Server did not become healthy within 30 seconds`
### Task UI-LOGIN-1: Login Page Loads
- **Test File**: `tests/robot/ui/login.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/login.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/templates/login.html`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- `/login` page title contains "Login" and shows `password-input`, `login-submit-btn`, `password-toggle`.
---
### Task UI-LOGIN-2: Login With Valid Password
- **Test File**: `tests/robot/ui/login.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/login.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/login.js`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- Submitting the correct password redirects to the dashboard (title contains "AniWorld", `search-input` visible).
---
### Task UI-LOGIN-3: Login With Invalid Password
- **Test File**: `tests/robot/ui/login.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/login.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/login.js`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- Submitting a wrong password shows `#login-error` containing "invalid".
---
### Task UI-LOGIN-4: Login Rate Limit UI
- **Test File**: `tests/robot/ui/login.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/login.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/login.js`
- `src/server/middleware/rate_limiter.py`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- After 6 failed attempts, the UI shows `#login-error` containing "lockout".
---
### Task UI-LOGIN-5: Password Visibility Toggle
- **Test File**: `tests/robot/ui/login.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/login.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/login.js`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- Clicking `#password-toggle` changes `password-input` type from `password` to `text` and back.
---
### Task UI-LOGIN-6: Logout
- **Test File**: `tests/robot/ui/login.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/login.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/login.js`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- Logging out redirects to `/login` (title contains "Login", `password-input` visible).
---
## UI Tests — `Robot.Ui.Queue Page` (8 tests, 0 passed, 8 failed)
> **Parent Suite Setup Failed**: `Server did not become healthy within 30 seconds`
### Task UI-QUEUE-1: Queue Page Loads
- **Test File**: `tests/robot/ui/queue_page.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/queue_page.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/templates/queue.html`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- `/queue` page title contains "Queue" and shows stat cards (`total-items`, `pending-items`, `completed-items`, `failed-items`) and queue sections (`pending-queue`, `active-downloads`, `completed-downloads`, `failed-downloads`).
---
### Task UI-QUEUE-2: Queue Stats Cards Display Zero Initially
- **Test File**: `tests/robot/ui/queue_page.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/queue_page.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/queue.js`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- When the queue is empty, all stat cards display `0`.
---
### Task UI-QUEUE-3: Start Queue Button
- **Test File**: `tests/robot/ui/queue_page.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/queue_page.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/queue.js`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- Clicking `#start-queue-btn` (when not disabled) changes the UI to show `#stop-queue-btn`.
---
### Task UI-QUEUE-4: Stop Queue Button
- **Test File**: `tests/robot/ui/queue_page.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/queue_page.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/queue.js`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- Clicking `#stop-queue-btn` (when not disabled) changes the UI to show `#start-queue-btn`.
---
### Task UI-QUEUE-5: Clear Completed Confirmation
- **Test File**: `tests/robot/ui/queue_page.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/queue_page.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/queue.js`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- Clicking `#clear-completed-btn` opens `#confirm-modal` containing "clear". Canceling hides the modal.
---
### Task UI-QUEUE-6: Clear Failed Confirmation
- **Test File**: `tests/robot/ui/queue_page.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/queue_page.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/queue.js`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- Clicking `#clear-failed-btn` opens `#confirm-modal` containing "clear". Canceling hides the modal.
---
### Task UI-QUEUE-7: Retry All Failed
- **Test File**: `tests/robot/ui/queue_page.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/queue_page.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/queue.js`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- Clicking `#retry-all-btn` (when not disabled) shows a toast containing "retry".
---
### Task UI-QUEUE-8: Navigation Back To Main
- **Test File**: `tests/robot/ui/queue_page.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/queue_page.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/templates/queue.html`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- Clicking the back button navigates to the main dashboard.
---
## UI Tests — `Robot.Ui.Responsive` (5 tests, 0 passed, 5 failed)
> **Parent Suite Setup Failed**: `Server did not become healthy within 30 seconds`
### Task UI-RESP-1: Mobile Viewport Layout
- **Test File**: `tests/robot/ui/responsive.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/responsive.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/css/responsive.css`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- At mobile viewport (`<= 480px`), layout adapts and `search-input`, `theme-toggle` remain visible.
---
### Task UI-RESP-2: Mobile Menu Accessible
- **Test File**: `tests/robot/ui/responsive.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/responsive.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/css/responsive.css`
- `src/server/web/static/js/responsive.js`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- On mobile, `#mobile-menu-btn` is visible and clicking it shows `#mobile-menu`.
---
### Task UI-RESP-3: Tablet Viewport Layout
- **Test File**: `tests/robot/ui/responsive.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/responsive.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/css/responsive.css`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- At tablet viewport (`>= 768px`), layout adapts and `search-input`, `rescan-btn` remain visible.
---
### Task UI-RESP-4: Touch Buttons Clickable
- **Test File**: `tests/robot/ui/responsive.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/responsive.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/css/responsive.css`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- On mobile viewport, `#theme-toggle` remains clickable and toggles the theme correctly.
---
### Task UI-RESP-5: Desktop Viewport Reset
- **Test File**: `tests/robot/ui/responsive.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/responsive.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/css/responsive.css`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- At desktop viewport (`>= 1280px`), `search-input`, `rescan-btn`, `config-btn` are all visible.
---
## UI Tests — `Robot.Ui.Settings Modal` (15 tests, 0 passed, 15 failed)
> **Parent Suite Setup Failed**: `Server did not become healthy within 30 seconds`
### Task UI-SETTINGS-1: Open Settings Modal
- **Test File**: `tests/robot/ui/settings_modal.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/settings_modal.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/settings_modal.js`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/CONFIGURATION.md`
- **Expected Behavior**:
- Clicking `#config-btn` opens `#config-modal`.
---
### Task UI-SETTINGS-2: Close Settings Modal Via Button
- **Test File**: `tests/robot/ui/settings_modal.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/settings_modal.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/settings_modal.js`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/CONFIGURATION.md`
- **Expected Behavior**:
- Clicking the close button hides `#config-modal`.
---
### Task UI-SETTINGS-3: Close Settings Modal Via Overlay
- **Test File**: `tests/robot/ui/settings_modal.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/settings_modal.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/settings_modal.js`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/CONFIGURATION.md`
- **Expected Behavior**:
- Clicking `#config-modal .modal-overlay` hides `#config-modal`.
---
### Task UI-SETTINGS-4: Close Settings Modal Via Escape
- **Test File**: `tests/robot/ui/settings_modal.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/settings_modal.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/settings_modal.js`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/CONFIGURATION.md`
- **Expected Behavior**:
- Pressing `Escape` while `#config-modal` is focused hides the modal.
---
### Task UI-SETTINGS-5: Edit General Settings
- **Test File**: `tests/robot/ui/settings_modal.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/settings_modal.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/settings_modal.js`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/CONFIGURATION.md`
- **Expected Behavior**:
- Changing app name, data dir, and anime directory, then saving, shows a toast containing "saved".
---
### Task UI-SETTINGS-6: Edit Scheduler Settings
- **Test File**: `tests/robot/ui/settings_modal.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/settings_modal.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/settings_modal.js`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/CONFIGURATION.md`
- **Expected Behavior**:
- Enabling scheduler, setting time to `04:30`, selecting days, and saving shows a toast containing "saved".
---
### Task UI-SETTINGS-7: Disable Scheduler
- **Test File**: `tests/robot/ui/settings_modal.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/settings_modal.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/settings_modal.js`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/CONFIGURATION.md`
- **Expected Behavior**:
- Unchecking `#scheduled-rescan-enabled` and saving shows a toast containing "saved".
---
### Task UI-SETTINGS-8: Edit Logging Settings
- **Test File**: `tests/robot/ui/settings_modal.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/settings_modal.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/settings_modal.js`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/CONFIGURATION.md`
- `Docs/InstructionsLogging.md`
- **Expected Behavior**:
- Changing log level to DEBUG, file path, max bytes, backup count, and saving shows a toast containing "saved".
---
### Task UI-SETTINGS-9: Edit Backup Settings
- **Test File**: `tests/robot/ui/settings_modal.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/settings_modal.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/settings_modal.js`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/CONFIGURATION.md`
- **Expected Behavior**:
- Enabling backup, setting path and retention days, and saving shows a toast containing "saved".
---
### Task UI-SETTINGS-10: Edit NFO Settings
- **Test File**: `tests/robot/ui/settings_modal.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/settings_modal.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/settings_modal.js`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/CONFIGURATION.md`
- `Docs/NFO_GUIDE.md`
- **Expected Behavior**:
- Entering TMDB key, enabling auto-create, poster/logo/fanart downloads, and saving shows a toast containing "saved".
---
### Task UI-SETTINGS-11: Create Config Backup
- **Test File**: `tests/robot/ui/settings_modal.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/settings_modal.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/settings_modal.js`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/CONFIGURATION.md`
- **Expected Behavior**:
- Clicking `#create-backup-btn` shows a toast containing "backup".
---
### Task UI-SETTINGS-12: Restore Config Backup
- **Test File**: `tests/robot/ui/settings_modal.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/settings_modal.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/settings_modal.js`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/CONFIGURATION.md`
- **Expected Behavior**:
- Selecting a `.backup-item` and clicking `#restore-backup-btn` shows a toast containing "restore".
---
### Task UI-SETTINGS-13: Delete Config Backup
- **Test File**: `tests/robot/ui/settings_modal.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/settings_modal.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/settings_modal.js`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/CONFIGURATION.md`
- **Expected Behavior**:
- Selecting a `.backup-item` and clicking `#delete-backup-btn` shows a toast containing "delete".
---
### Task UI-SETTINGS-14: Export Config
- **Test File**: `tests/robot/ui/settings_modal.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/settings_modal.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/settings_modal.js`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/CONFIGURATION.md`
- **Expected Behavior**:
- Clicking `#export-config-btn` triggers a file download event.
---
### Task UI-SETTINGS-15: Import Config
- **Test File**: `tests/robot/ui/settings_modal.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/settings_modal.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/settings_modal.js`
- `tests/robot/fixtures/sample_config.json`
- **Reference Docs**:
- `Docs/API.md`
- `Docs/CONFIGURATION.md`
- **Expected Behavior**:
- Uploading a config file via `#import-config-input` and clicking `#import-config-btn` shows a toast containing "import".
---
## UI Tests — `Robot.Ui.Setup Flow` (8 tests, 0 passed, 8 failed)
> **Parent Suite Setup Failed**: `Server did not become healthy within 30 seconds`
### Task UI-SETUP-1: Setup Page Loads
- **Test File**: `tests/robot/ui/setup_flow.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/setup_flow.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/templates/setup.html`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- `/setup` page title contains "Setup" and shows `setup-form`, `general-section`, `security-section`, `scheduler-section`, `logging-section`, `backup-section`, `nfo-section`.
---
### Task UI-SETUP-2: Password Strength Weak
- **Test File**: `tests/robot/ui/setup_flow.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/setup_flow.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/setup.js`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- Typing "weak" in `#master-password-input` shows `#password-strength` containing "weak".
---
### Task UI-SETUP-3: Password Strength Medium
- **Test File**: `tests/robot/ui/setup_flow.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/setup_flow.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/setup.js`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- Typing "Medium1!" in `#master-password-input` shows `#password-strength` containing "medium".
---
### Task UI-SETUP-4: Password Strength Strong
- **Test File**: `tests/robot/ui/setup_flow.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/setup_flow.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/setup.js`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- Typing a strong password in `#master-password-input` shows `#password-strength` containing "strong".
---
### Task UI-SETUP-5: Setup Form Validation Empty Password
- **Test File**: `tests/robot/ui/setup_flow.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/setup_flow.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/setup.js`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- Submitting setup with empty password shows `#password-error` containing "required".
---
### Task UI-SETUP-6: Setup Form Validation Mismatched Passwords
- **Test File**: `tests/robot/ui/setup_flow.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/setup_flow.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/setup.js`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- Submitting with mismatched password and confirmation shows `#confirm-password-error` containing "match".
---
### Task UI-SETUP-7: Complete Setup Flow
- **Test File**: `tests/robot/ui/setup_flow.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/setup_flow.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/setup.js`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- Filling all fields correctly and submitting redirects to the main page (`search-input` visible, title contains "AniWorld").
---
### Task UI-SETUP-8: Setup Redirects When Already Configured
- **Test File**: `tests/robot/ui/setup_flow.robot`
- **Failing Step**: Parent suite setup (`Wait For Server`)
- **Files to Check**:
- `tests/robot/ui/setup_flow.robot`
- `tests/robot/resources/ui_keywords.resource`
- `src/server/web/static/js/setup.js`
- **Reference Docs**:
- `Docs/API.md`
- **Expected Behavior**:
- After setup is complete, visiting `/setup` redirects to `/` (URL does not contain `/setup`).
---
## Summary
| Category | Suite | Tests | Passed | Failed |
|---|---|---|---|---|
| Infrastructure | Global | — | 0 | 129 (all blocked by suite setup) |
| API | Anime | 14 | 0 | 14 |
| API | Auth | 12 | 0 | 12 |
| API | Config | 10 | 0 | 10 |
| API | Download | 12 | 0 | 12 |
| API | Health | 2 | 0 | 2 |
| API | Logging | 6 | 0 | 6 |
| API | Nfo | 4 | 0 | 4 |
| API | Scheduler | 6 | 0 | 6 |
| API | Setup | 3 | 0 | 3 |
| API | Websocket | 4 | 0 | 4 |
| UI | Anime Settings | 3 | 0 | 3 |
| UI | Dashboard | 11 | 0 | 11 |
| UI | Login | 6 | 0 | 6 |
| UI | Queue Page | 8 | 0 | 8 |
| UI | Responsive | 5 | 0 | 5 |
| UI | Settings Modal | 15 | 0 | 15 |
| UI | Setup Flow | 8 | 0 | 8 |
| **Total** | | **129** | **0** | **129** |
### Recommended Priority Order
1. **INFRA-1** — Fix the server startup environment issue. This is the blocker for all 129 tests.
2. **INFRA-2** — Fix the suite teardown `Close Browser` keyword argument mismatch.
3. Once the server starts correctly, re-run the full Robot Framework suite to identify any individual test logic failures.
4. Address any remaining per-test failures based on the new run results.