- 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
154 lines
6.3 KiB
Plaintext
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
|