2048 lines
62 KiB
Markdown
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. |