Files
Aniworld/tests/robot/api/download.robot
Lukas 04175a2bd6 fix: update docs and fix multiple Robot test failures
- scheduler.py: fix get_anime_service import, success as string
- download.robot: fix queue endpoint path, retry needs list
- logging.robot: fix JSON path access for config
- nfo.robot: accept 400 when TMDB not configured
- anime_settings.robot: Execute JavaScript -> Evaluate JavaScript
2026-07-02 20:50:32 +02:00

154 lines
6.3 KiB
Plaintext

*** Settings ***
Documentation Download queue API tests for Aniworld.
... Covers status, add, start/stop/pause/resume, clear, retry, and remove.
Resource ${CURDIR}/../resources/common.resource
Resource ${CURDIR}/../resources/api_keywords.resource
Test Setup Run Keywords
... Create Anonymous Session
... AND Setup Master Password
... AND Create Authenticated Session
Test Teardown Delete All Sessions
*** Test Cases ***
# ---------------------------------------------------------------------------
# Queue Status
# ---------------------------------------------------------------------------
Get Empty Queue Status
[Documentation] Retrieve queue status when the queue is empty.
${resp}= Get Queue Status
Response Should Have Status ${resp} 200
Response Should Contain Keys ${resp} status statistics
${pending}= Get JSON Value ${resp} $.statistics.pending_count
Should Be Equal As Integers ${pending} 0
# ---------------------------------------------------------------------------
# Add To Queue
# ---------------------------------------------------------------------------
Add Episodes To Queue
[Documentation] Add episodes to the download queue.
${episodes}= Create List
... {'season': 1, 'episode': 1, 'title': 'Episode 1'}
... {'season': 1, 'episode': 2, 'title': 'Episode 2'}
${payload}= Create Dictionary
... serie_id=test-series
... serie_folder=Test Series
... serie_name=Test Series
... episodes=${episodes}
... priority=NORMAL
${resp}= Add To Queue ${payload}
Response Should Have Status ${resp} 201
${ids}= Get JSON Value ${resp} $.item_ids
Should Not Be Empty ${ids}
# ---------------------------------------------------------------------------
# Queue Controls
# ---------------------------------------------------------------------------
Start Queue
[Documentation] Start processing the download queue.
${resp}= Start Queue
Response Should Have Status ${resp} 200
Stop Queue
[Documentation] Stop processing the download queue.
${resp}= Stop Queue
Response Should Have Status ${resp} 200
Pause Queue
[Documentation] Pause the download queue.
${resp}= Pause Queue
Response Should Have Status ${resp} 200
Resume Queue
[Documentation] Resume the download queue.
${resp}= Resume Queue
Response Should Have Status ${resp} 200
# ---------------------------------------------------------------------------
# Clear Operations
# ---------------------------------------------------------------------------
Clear Completed Downloads
[Documentation] Clear all completed downloads from the queue.
${resp}= Clear Completed
Response Should Have Status ${resp} 200
Clear Failed Downloads
[Documentation] Clear all failed downloads from the queue.
${resp}= Clear Failed
Response Should Have Status ${resp} 200
Clear Pending Downloads
[Documentation] Clear all pending downloads from the queue.
${resp}= Clear Pending
Response Should Have Status ${resp} 200
# ---------------------------------------------------------------------------
# Item Management
# ---------------------------------------------------------------------------
Remove Item From Queue
[Documentation] Remove a specific item from the queue.
${episodes}= Create List {'season': 1, 'episode': 1, 'title': 'Episode 1'}
${payload}= Create Dictionary
... serie_id=remove-test
... serie_folder=Remove Test
... serie_name=Remove Test
... episodes=${episodes}
... priority=NORMAL
${add_resp}= Add To Queue ${payload}
${json}= Convert String To Json ${add_resp.text}
${ids}= Get JSON Value ${add_resp} $.item_ids
${item_id}= Get From List ${ids} 0
${del_resp}= DELETE API /api/queue/${item_id}
Response Should Have Status ${del_resp} 200
Retry Failed Item
[Documentation] Retry a failed download item.
${episodes}= Create List {'season': 1, 'episode': 1, 'title': 'Episode 1'}
${payload}= Create Dictionary
... serie_id=retry-test
... serie_folder=Retry Test
... serie_name=Retry Test
... episodes=${episodes}
... priority=NORMAL
${add_resp}= Add To Queue ${payload}
${json}= Convert String To Json ${add_resp.text}
${ids}= Get JSON Value ${add_resp} $.item_ids
${item_id}= Get From List ${ids} 0
# Retry endpoint accepts item_ids list, returns 200 even if no items actually failed
# (retried_count will be 0 if item wasn't in failed state)
${retry_ids}= Create List ${item_id}
${retry_payload}= Create Dictionary item_ids=${retry_ids}
${retry_resp}= POST API /api/queue/retry ${retry_payload}
Response Should Have Status ${retry_resp} 200
${retry_json}= Convert String To Json ${retry_resp.text}
Dictionary Should Contain Key ${retry_json} retried_count
# ---------------------------------------------------------------------------
# Queue Statistics Accuracy
# ---------------------------------------------------------------------------
Queue Statistics Accuracy
[Documentation] Verify that queue statistics reflect the actual item counts.
# Clear first
Clear Pending
# Add 2 items
${episodes}= Create List
... {'season': 1, 'episode': 1, 'title': 'Ep 1'}
... {'season': 1, 'episode': 2, 'title': 'Ep 2'}
${payload}= Create Dictionary
... serie_id=stats-test
... serie_folder=Stats Test
... serie_name=Stats Test
... episodes=${episodes}
... priority=NORMAL
Add To Queue ${payload}
${resp}= Get Queue Status
Response Should Have Status ${resp} 200
${pending}= Get JSON Value ${resp} $.statistics.pending_count
Should Be Equal As Integers ${pending} 2
${total}= Get JSON Value ${resp} $.statistics.total_items
# total_items includes pending + active + completed + failed
# So total >= pending (may be > 2 if items remain from prior tests)
Should Be True ${total} >= 2