Creating Session using : alias=anon, url=http://127.0.0.1:8765, headers={}, cookies={}, auth=None, timeout=None, proxies=None, verify=False, debug=0 anon ${BASE_URL} Create Session: create a HTTP session to a server Create an unauthenticated HTTP session. ${payload} = {'master_password': 'TestPass123!', 'anime_directory': '/tmp/aniworld_test_anime', 'name': 'AniworldTest', 'data_dir': 'data', 'scheduler_enabled': 'False', 'logging_level': 'INFO', 'backup_enabled': ... ${payload} master_password=${SETUP_PASSWORD} anime_directory=/tmp/aniworld_test_anime name=AniworldTest data_dir=data scheduler_enabled=False logging_level=INFO backup_enabled=False Creates and returns a dictionary based on the given ``items``. POST Request : url=http://127.0.0.1:8765/api/auth/setup path_url=/api/auth/setup headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '208', 'Content-Type': 'application/json'} body=b'{"master_password": "TestPass123!", "anime_directory": "/tmp/aniworld_test_anime", "name": "AniworldTest", "data_dir": "data", "scheduler_enabled": "False", "logging_level": "INFO", "backup_enabled": "False"}' POST Response : url=http://127.0.0.1:8765/api/auth/setup status=400, reason=Bad Request headers={'date': 'Sat, 27 Jun 2026 13:40:14 GMT', 'server': 'uvicorn', 'content-length': '47', 'content-type': 'application/json'} body={"detail":"Master password already configured"} ${resp} = <Response [400]> ${resp} anon /api/auth/setup json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. 45s Pauses the test executed for the given time. ${resp} anon /api/auth/setup json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. 45s Pauses the test executed for the given time. ${resp} anon /api/auth/setup json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. ${json} = {'detail': 'Master password already configured'} ${json} ${resp.text} Convert String to JSON object ${detail} = ['Master password already configured'] ${detail} ${json} $.detail Get Value From JSON using JSONPath Setup failed with 400: ${detail} Fails the test with the given message and optionally alters its tags. ${resp.status_code} 201 Fails if objects are unequal after converting them to integers. Unexpected status ${resp.status_code} from /api/auth/setup Fails the test with the given message and optionally alters its tags. Configure the master password via the setup endpoint. Creating Session using : alias=anon, url=http://127.0.0.1:8765, headers={}, cookies={}, auth=None, timeout=None, proxies=None, verify=False, debug=0 anon ${BASE_URL} Create Session: create a HTTP session to a server Create an unauthenticated HTTP session. GET Request : url=http://127.0.0.1:8765/api/auth/status path_url=/api/auth/status headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive'} body=None GET Response : url=http://127.0.0.1:8765/api/auth/status status=200, reason=OK headers={'date': 'Sat, 27 Jun 2026 13:40:14 GMT', 'server': 'uvicorn', 'content-length': '41', 'content-type': 'application/json'} body={"configured":true,"authenticated":false} ${resp} = <Response [200]> ${resp} anon /api/auth/status expected_status=200 Sends a GET request on a previously created HTTP Session. ${json} = {'configured': True, 'authenticated': False} ${json} ${resp.text} Convert String to JSON object ${configured} = [True] ${configured} ${json} $.configured Get Value From JSON using JSONPath ${configured_val} = True ${configured_val} ${configured}[0] Returns the given values which can then be assigned to a variables. ${configured_val} ${configured} = True ${configured} Check if the master password has already been configured. Configure the master password via the setup endpoint. ${token} Log in with the master password and return the JWT access token. auth ${BASE_URL} headers={'Authorization': 'Bearer ${token}'} Create Session: create a HTTP session to a server ${payload} = {'password': 'TestPass123!'} ${payload} password=${SETUP_PASSWORD} Creates and returns a dictionary based on the given ``items``. POST Request : url=http://127.0.0.1:8765/api/auth/login path_url=/api/auth/login headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '28', 'Content-Type': 'application/json'} body=b'{"password": "TestPass123!"}' POST Response : url=http://127.0.0.1:8765/api/auth/login status=401, reason=Unauthorized headers={'date': 'Sat, 27 Jun 2026 13:40:14 GMT', 'server': 'uvicorn', 'content-length': '32', 'content-type': 'application/json'} body={"detail":"invalid credentials"} ${resp} = <Response [401]> ${resp} anon /api/auth/login json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. 6s Pauses the test executed for the given time. ${resp} anon /api/auth/login json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. ${json} = {'detail': 'invalid credentials'} ${json} ${resp.text} Convert String to JSON object ${detail} = ['invalid credentials'] ${detail} ${json} $.detail Get Value From JSON using JSONPath ${detail_val} = invalid credentials ${detail_val} ${detail}[0] Returns the given values which can then be assigned to a variables. Login failed with 401: invalid credentials Login failed with ${resp.status_code}: ${detail_val} Fails the test with the given message and optionally alters its tags. Login failed with 401: invalid credentials Login failed with 401: invalid credentials Login failed with 401: invalid credentials ${json} ${resp.text} Convert String to JSON object ${token} ${json} $.access_token Get Value From JSON using JSONPath ${token_str} ${token}[0] Returns the given values which can then be assigned to a variables. ${TOKEN} ${token_str} Makes a variable available everywhere within the scope of the current suite. ${token_str} ${token} Log in with the master password and return the JWT access token. Login failed with 401: invalid credentials auth ${BASE_URL} headers={'Authorization': 'Bearer ${token}'} Create Session: create a HTTP session to a server Login failed with 401: invalid credentials auth ${BASE_URL} headers={'Authorization': 'Bearer ${TOKEN}'} Create Session: create a HTTP session to a server Login failed with 401: invalid credentials Create an authenticated HTTP session. Performs setup if needed, then logs in. Skips setup/login if already authenticated (suite-level setup done). Login failed with 401: invalid credentials Create Anonymous Session AND Setup Master Password AND Create Authenticated Session Executes all the given keywords in a sequence. Login failed with 401: invalid credentials Deleting All Sessions Removes all the session objects Starting Browser process /home/lukas/miniconda3/lib/python3.13/site-packages/Browser/wrapper/index.js using at 127.0.0.1:53873 Retrieve the current scheduler configuration and runtime status. Setup failed: Login failed with 401: invalid credentials Creating Session using : alias=anon, url=http://127.0.0.1:8765, headers={}, cookies={}, auth=None, timeout=None, proxies=None, verify=False, debug=0 anon ${BASE_URL} Create Session: create a HTTP session to a server Create an unauthenticated HTTP session. ${payload} = {'master_password': 'TestPass123!', 'anime_directory': '/tmp/aniworld_test_anime', 'name': 'AniworldTest', 'data_dir': 'data', 'scheduler_enabled': 'False', 'logging_level': 'INFO', 'backup_enabled': ... ${payload} master_password=${SETUP_PASSWORD} anime_directory=/tmp/aniworld_test_anime name=AniworldTest data_dir=data scheduler_enabled=False logging_level=INFO backup_enabled=False Creates and returns a dictionary based on the given ``items``. POST Request : url=http://127.0.0.1:8765/api/auth/setup path_url=/api/auth/setup headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '208', 'Content-Type': 'application/json'} body=b'{"master_password": "TestPass123!", "anime_directory": "/tmp/aniworld_test_anime", "name": "AniworldTest", "data_dir": "data", "scheduler_enabled": "False", "logging_level": "INFO", "backup_enabled": "False"}' POST Response : url=http://127.0.0.1:8765/api/auth/setup status=400, reason=Bad Request headers={'date': 'Sat, 27 Jun 2026 13:40:14 GMT', 'server': 'uvicorn', 'content-length': '47', 'content-type': 'application/json'} body={"detail":"Master password already configured"} ${resp} = <Response [400]> ${resp} anon /api/auth/setup json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. 45s Pauses the test executed for the given time. ${resp} anon /api/auth/setup json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. 45s Pauses the test executed for the given time. ${resp} anon /api/auth/setup json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. ${json} = {'detail': 'Master password already configured'} ${json} ${resp.text} Convert String to JSON object ${detail} = ['Master password already configured'] ${detail} ${json} $.detail Get Value From JSON using JSONPath Setup failed with 400: ${detail} Fails the test with the given message and optionally alters its tags. ${resp.status_code} 201 Fails if objects are unequal after converting them to integers. Unexpected status ${resp.status_code} from /api/auth/setup Fails the test with the given message and optionally alters its tags. Configure the master password via the setup endpoint. Creating Session using : alias=anon, url=http://127.0.0.1:8765, headers={}, cookies={}, auth=None, timeout=None, proxies=None, verify=False, debug=0 anon ${BASE_URL} Create Session: create a HTTP session to a server Create an unauthenticated HTTP session. GET Request : url=http://127.0.0.1:8765/api/auth/status path_url=/api/auth/status headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive'} body=None GET Response : url=http://127.0.0.1:8765/api/auth/status status=200, reason=OK headers={'date': 'Sat, 27 Jun 2026 13:40:14 GMT', 'server': 'uvicorn', 'content-length': '41', 'content-type': 'application/json'} body={"configured":true,"authenticated":false} ${resp} = <Response [200]> ${resp} anon /api/auth/status expected_status=200 Sends a GET request on a previously created HTTP Session. ${json} = {'configured': True, 'authenticated': False} ${json} ${resp.text} Convert String to JSON object ${configured} = [True] ${configured} ${json} $.configured Get Value From JSON using JSONPath ${configured_val} = True ${configured_val} ${configured}[0] Returns the given values which can then be assigned to a variables. ${configured_val} ${configured} = True ${configured} Check if the master password has already been configured. Configure the master password via the setup endpoint. ${token} Log in with the master password and return the JWT access token. auth ${BASE_URL} headers={'Authorization': 'Bearer ${token}'} Create Session: create a HTTP session to a server ${payload} = {'password': 'TestPass123!'} ${payload} password=${SETUP_PASSWORD} Creates and returns a dictionary based on the given ``items``. POST Request : url=http://127.0.0.1:8765/api/auth/login path_url=/api/auth/login headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '28', 'Content-Type': 'application/json'} body=b'{"password": "TestPass123!"}' POST Response : url=http://127.0.0.1:8765/api/auth/login status=429, reason=Too Many Requests headers={'date': 'Sat, 27 Jun 2026 13:40:14 GMT', 'server': 'uvicorn', 'content-length': '62', 'content-type': 'application/json'} body={"detail":"Too many failed attempts - temporarily locked out"} ${resp} = <Response [429]> ${resp} anon /api/auth/login json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. Slept 6 seconds. 6s Pauses the test executed for the given time. POST Request : url=http://127.0.0.1:8765/api/auth/login path_url=/api/auth/login headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '28', 'Content-Type': 'application/json'} body=b'{"password": "TestPass123!"}' POST Response : url=http://127.0.0.1:8765/api/auth/login status=429, reason=Too Many Requests headers={'date': 'Sat, 27 Jun 2026 13:40:20 GMT', 'server': 'uvicorn', 'content-length': '62', 'content-type': 'application/json'} body={"detail":"Too many failed attempts - temporarily locked out"} ${resp} = <Response [429]> ${resp} anon /api/auth/login json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. ${json} = {'detail': 'Too many failed attempts - temporarily locked out'} ${json} ${resp.text} Convert String to JSON object ${detail} = ['Too many failed attempts - temporarily locked out'] ${detail} ${json} $.detail Get Value From JSON using JSONPath ${detail_val} = Too many failed attempts - temporarily locked out ${detail_val} ${detail}[0] Returns the given values which can then be assigned to a variables. Login failed with 429: Too many failed attempts - temporarily locked out Login failed with ${resp.status_code}: ${detail_val} Fails the test with the given message and optionally alters its tags. Login failed with 429: Too many failed attempts - temporarily locked out Login failed with 429: Too many failed attempts - temporarily locked out Login failed with 429: Too many failed attempts - temporarily locked out ${json} ${resp.text} Convert String to JSON object ${token} ${json} $.access_token Get Value From JSON using JSONPath ${token_str} ${token}[0] Returns the given values which can then be assigned to a variables. ${TOKEN} ${token_str} Makes a variable available everywhere within the scope of the current suite. ${token_str} ${token} Log in with the master password and return the JWT access token. Login failed with 429: Too many failed attempts - temporarily locked out auth ${BASE_URL} headers={'Authorization': 'Bearer ${token}'} Create Session: create a HTTP session to a server Login failed with 429: Too many failed attempts - temporarily locked out auth ${BASE_URL} headers={'Authorization': 'Bearer ${TOKEN}'} Create Session: create a HTTP session to a server Login failed with 429: Too many failed attempts - temporarily locked out Create an authenticated HTTP session. Performs setup if needed, then logs in. Skips setup/login if already authenticated (suite-level setup done). Login failed with 429: Too many failed attempts - temporarily locked out Create Anonymous Session AND Setup Master Password AND Create Authenticated Session Executes all the given keywords in a sequence. Login failed with 429: Too many failed attempts - temporarily locked out Deleting All Sessions Removes all the session objects Update scheduler settings and verify they are persisted. Setup failed: Login failed with 429: Too many failed attempts - temporarily locked out Creating Session using : alias=anon, url=http://127.0.0.1:8765, headers={}, cookies={}, auth=None, timeout=None, proxies=None, verify=False, debug=0 anon ${BASE_URL} Create Session: create a HTTP session to a server Create an unauthenticated HTTP session. ${payload} = {'master_password': 'TestPass123!', 'anime_directory': '/tmp/aniworld_test_anime', 'name': 'AniworldTest', 'data_dir': 'data', 'scheduler_enabled': 'False', 'logging_level': 'INFO', 'backup_enabled': ... ${payload} master_password=${SETUP_PASSWORD} anime_directory=/tmp/aniworld_test_anime name=AniworldTest data_dir=data scheduler_enabled=False logging_level=INFO backup_enabled=False Creates and returns a dictionary based on the given ``items``. POST Request : url=http://127.0.0.1:8765/api/auth/setup path_url=/api/auth/setup headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '208', 'Content-Type': 'application/json'} body=b'{"master_password": "TestPass123!", "anime_directory": "/tmp/aniworld_test_anime", "name": "AniworldTest", "data_dir": "data", "scheduler_enabled": "False", "logging_level": "INFO", "backup_enabled": "False"}' POST Response : url=http://127.0.0.1:8765/api/auth/setup status=429, reason=Too Many Requests headers={'date': 'Sat, 27 Jun 2026 13:40:20 GMT', 'server': 'uvicorn', 'content-length': '74', 'content-type': 'application/json'} body={"detail":"Too many authentication attempts, try again later. IP lockout"} ${resp} = <Response [429]> ${resp} anon /api/auth/setup json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. Slept 45 seconds. 45s Pauses the test executed for the given time. POST Request : url=http://127.0.0.1:8765/api/auth/setup path_url=/api/auth/setup headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '208', 'Content-Type': 'application/json'} body=b'{"master_password": "TestPass123!", "anime_directory": "/tmp/aniworld_test_anime", "name": "AniworldTest", "data_dir": "data", "scheduler_enabled": "False", "logging_level": "INFO", "backup_enabled": "False"}' POST Response : url=http://127.0.0.1:8765/api/auth/setup status=429, reason=Too Many Requests headers={'date': 'Sat, 27 Jun 2026 13:41:05 GMT', 'server': 'uvicorn', 'content-length': '74', 'content-type': 'application/json'} body={"detail":"Too many authentication attempts, try again later. IP lockout"} ${resp} = <Response [429]> ${resp} anon /api/auth/setup json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. Slept 45 seconds. 45s Pauses the test executed for the given time. POST Request : url=http://127.0.0.1:8765/api/auth/setup path_url=/api/auth/setup headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '208', 'Content-Type': 'application/json'} body=b'{"master_password": "TestPass123!", "anime_directory": "/tmp/aniworld_test_anime", "name": "AniworldTest", "data_dir": "data", "scheduler_enabled": "False", "logging_level": "INFO", "backup_enabled": "False"}' POST Response : url=http://127.0.0.1:8765/api/auth/setup status=400, reason=Bad Request headers={'date': 'Sat, 27 Jun 2026 13:41:51 GMT', 'server': 'uvicorn', 'content-length': '47', 'content-type': 'application/json'} body={"detail":"Master password already configured"} ${resp} = <Response [400]> ${resp} anon /api/auth/setup json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. ${json} = {'detail': 'Master password already configured'} ${json} ${resp.text} Convert String to JSON object ${detail} = ['Master password already configured'] ${detail} ${json} $.detail Get Value From JSON using JSONPath Setup failed with 400: ${detail} Fails the test with the given message and optionally alters its tags. ${resp.status_code} 201 Fails if objects are unequal after converting them to integers. Unexpected status ${resp.status_code} from /api/auth/setup Fails the test with the given message and optionally alters its tags. Configure the master password via the setup endpoint. Creating Session using : alias=anon, url=http://127.0.0.1:8765, headers={}, cookies={}, auth=None, timeout=None, proxies=None, verify=False, debug=0 anon ${BASE_URL} Create Session: create a HTTP session to a server Create an unauthenticated HTTP session. GET Request : url=http://127.0.0.1:8765/api/auth/status path_url=/api/auth/status headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive'} body=None GET Response : url=http://127.0.0.1:8765/api/auth/status status=200, reason=OK headers={'date': 'Sat, 27 Jun 2026 13:41:51 GMT', 'server': 'uvicorn', 'content-length': '41', 'content-type': 'application/json'} body={"configured":true,"authenticated":false} ${resp} = <Response [200]> ${resp} anon /api/auth/status expected_status=200 Sends a GET request on a previously created HTTP Session. ${json} = {'configured': True, 'authenticated': False} ${json} ${resp.text} Convert String to JSON object ${configured} = [True] ${configured} ${json} $.configured Get Value From JSON using JSONPath ${configured_val} = True ${configured_val} ${configured}[0] Returns the given values which can then be assigned to a variables. ${configured_val} ${configured} = True ${configured} Check if the master password has already been configured. Configure the master password via the setup endpoint. ${token} Log in with the master password and return the JWT access token. auth ${BASE_URL} headers={'Authorization': 'Bearer ${token}'} Create Session: create a HTTP session to a server ${payload} = {'password': 'TestPass123!'} ${payload} password=${SETUP_PASSWORD} Creates and returns a dictionary based on the given ``items``. POST Request : url=http://127.0.0.1:8765/api/auth/login path_url=/api/auth/login headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '28', 'Content-Type': 'application/json'} body=b'{"password": "TestPass123!"}' POST Response : url=http://127.0.0.1:8765/api/auth/login status=429, reason=Too Many Requests headers={'date': 'Sat, 27 Jun 2026 13:41:51 GMT', 'server': 'uvicorn', 'content-length': '62', 'content-type': 'application/json'} body={"detail":"Too many failed attempts - temporarily locked out"} ${resp} = <Response [429]> ${resp} anon /api/auth/login json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. Slept 6 seconds. 6s Pauses the test executed for the given time. POST Request : url=http://127.0.0.1:8765/api/auth/login path_url=/api/auth/login headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '28', 'Content-Type': 'application/json'} body=b'{"password": "TestPass123!"}' POST Response : url=http://127.0.0.1:8765/api/auth/login status=429, reason=Too Many Requests headers={'date': 'Sat, 27 Jun 2026 13:41:57 GMT', 'server': 'uvicorn', 'content-length': '62', 'content-type': 'application/json'} body={"detail":"Too many failed attempts - temporarily locked out"} ${resp} = <Response [429]> ${resp} anon /api/auth/login json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. ${json} = {'detail': 'Too many failed attempts - temporarily locked out'} ${json} ${resp.text} Convert String to JSON object ${detail} = ['Too many failed attempts - temporarily locked out'] ${detail} ${json} $.detail Get Value From JSON using JSONPath ${detail_val} = Too many failed attempts - temporarily locked out ${detail_val} ${detail}[0] Returns the given values which can then be assigned to a variables. Login failed with 429: Too many failed attempts - temporarily locked out Login failed with ${resp.status_code}: ${detail_val} Fails the test with the given message and optionally alters its tags. Login failed with 429: Too many failed attempts - temporarily locked out Login failed with 429: Too many failed attempts - temporarily locked out Login failed with 429: Too many failed attempts - temporarily locked out ${json} ${resp.text} Convert String to JSON object ${token} ${json} $.access_token Get Value From JSON using JSONPath ${token_str} ${token}[0] Returns the given values which can then be assigned to a variables. ${TOKEN} ${token_str} Makes a variable available everywhere within the scope of the current suite. ${token_str} ${token} Log in with the master password and return the JWT access token. Login failed with 429: Too many failed attempts - temporarily locked out auth ${BASE_URL} headers={'Authorization': 'Bearer ${token}'} Create Session: create a HTTP session to a server Login failed with 429: Too many failed attempts - temporarily locked out auth ${BASE_URL} headers={'Authorization': 'Bearer ${TOKEN}'} Create Session: create a HTTP session to a server Login failed with 429: Too many failed attempts - temporarily locked out Create an authenticated HTTP session. Performs setup if needed, then logs in. Skips setup/login if already authenticated (suite-level setup done). Login failed with 429: Too many failed attempts - temporarily locked out Create Anonymous Session AND Setup Master Password AND Create Authenticated Session Executes all the given keywords in a sequence. Login failed with 429: Too many failed attempts - temporarily locked out Deleting All Sessions Removes all the session objects Manually trigger a scheduled rescan. Setup failed: Login failed with 429: Too many failed attempts - temporarily locked out Creating Session using : alias=anon, url=http://127.0.0.1:8765, headers={}, cookies={}, auth=None, timeout=None, proxies=None, verify=False, debug=0 anon ${BASE_URL} Create Session: create a HTTP session to a server Create an unauthenticated HTTP session. ${payload} = {'master_password': 'TestPass123!', 'anime_directory': '/tmp/aniworld_test_anime', 'name': 'AniworldTest', 'data_dir': 'data', 'scheduler_enabled': 'False', 'logging_level': 'INFO', 'backup_enabled': ... ${payload} master_password=${SETUP_PASSWORD} anime_directory=/tmp/aniworld_test_anime name=AniworldTest data_dir=data scheduler_enabled=False logging_level=INFO backup_enabled=False Creates and returns a dictionary based on the given ``items``. POST Request : url=http://127.0.0.1:8765/api/auth/setup path_url=/api/auth/setup headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '208', 'Content-Type': 'application/json'} body=b'{"master_password": "TestPass123!", "anime_directory": "/tmp/aniworld_test_anime", "name": "AniworldTest", "data_dir": "data", "scheduler_enabled": "False", "logging_level": "INFO", "backup_enabled": "False"}' POST Response : url=http://127.0.0.1:8765/api/auth/setup status=400, reason=Bad Request headers={'date': 'Sat, 27 Jun 2026 13:41:57 GMT', 'server': 'uvicorn', 'content-length': '47', 'content-type': 'application/json'} body={"detail":"Master password already configured"} ${resp} = <Response [400]> ${resp} anon /api/auth/setup json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. 45s Pauses the test executed for the given time. ${resp} anon /api/auth/setup json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. 45s Pauses the test executed for the given time. ${resp} anon /api/auth/setup json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. ${json} = {'detail': 'Master password already configured'} ${json} ${resp.text} Convert String to JSON object ${detail} = ['Master password already configured'] ${detail} ${json} $.detail Get Value From JSON using JSONPath Setup failed with 400: ${detail} Fails the test with the given message and optionally alters its tags. ${resp.status_code} 201 Fails if objects are unequal after converting them to integers. Unexpected status ${resp.status_code} from /api/auth/setup Fails the test with the given message and optionally alters its tags. Configure the master password via the setup endpoint. Creating Session using : alias=anon, url=http://127.0.0.1:8765, headers={}, cookies={}, auth=None, timeout=None, proxies=None, verify=False, debug=0 anon ${BASE_URL} Create Session: create a HTTP session to a server Create an unauthenticated HTTP session. GET Request : url=http://127.0.0.1:8765/api/auth/status path_url=/api/auth/status headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive'} body=None GET Response : url=http://127.0.0.1:8765/api/auth/status status=200, reason=OK headers={'date': 'Sat, 27 Jun 2026 13:41:57 GMT', 'server': 'uvicorn', 'content-length': '41', 'content-type': 'application/json'} body={"configured":true,"authenticated":false} ${resp} = <Response [200]> ${resp} anon /api/auth/status expected_status=200 Sends a GET request on a previously created HTTP Session. ${json} = {'configured': True, 'authenticated': False} ${json} ${resp.text} Convert String to JSON object ${configured} = [True] ${configured} ${json} $.configured Get Value From JSON using JSONPath ${configured_val} = True ${configured_val} ${configured}[0] Returns the given values which can then be assigned to a variables. ${configured_val} ${configured} = True ${configured} Check if the master password has already been configured. Configure the master password via the setup endpoint. ${token} Log in with the master password and return the JWT access token. auth ${BASE_URL} headers={'Authorization': 'Bearer ${token}'} Create Session: create a HTTP session to a server ${payload} = {'password': 'TestPass123!'} ${payload} password=${SETUP_PASSWORD} Creates and returns a dictionary based on the given ``items``. POST Request : url=http://127.0.0.1:8765/api/auth/login path_url=/api/auth/login headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '28', 'Content-Type': 'application/json'} body=b'{"password": "TestPass123!"}' POST Response : url=http://127.0.0.1:8765/api/auth/login status=429, reason=Too Many Requests headers={'date': 'Sat, 27 Jun 2026 13:41:57 GMT', 'server': 'uvicorn', 'content-length': '62', 'content-type': 'application/json'} body={"detail":"Too many failed attempts - temporarily locked out"} ${resp} = <Response [429]> ${resp} anon /api/auth/login json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. Slept 6 seconds. 6s Pauses the test executed for the given time. POST Request : url=http://127.0.0.1:8765/api/auth/login path_url=/api/auth/login headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '28', 'Content-Type': 'application/json'} body=b'{"password": "TestPass123!"}' POST Response : url=http://127.0.0.1:8765/api/auth/login status=429, reason=Too Many Requests headers={'date': 'Sat, 27 Jun 2026 13:42:03 GMT', 'server': 'uvicorn', 'content-length': '74', 'content-type': 'application/json'} body={"detail":"Too many authentication attempts, try again later. IP lockout"} ${resp} = <Response [429]> ${resp} anon /api/auth/login json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. ${json} = {'detail': 'Too many authentication attempts, try again later. IP lockout'} ${json} ${resp.text} Convert String to JSON object ${detail} = ['Too many authentication attempts, try again later. IP lockout'] ${detail} ${json} $.detail Get Value From JSON using JSONPath ${detail_val} = Too many authentication attempts, try again later. IP lockout ${detail_val} ${detail}[0] Returns the given values which can then be assigned to a variables. Login failed with 429: Too many authentication attempts, try again later. IP lockout Login failed with ${resp.status_code}: ${detail_val} Fails the test with the given message and optionally alters its tags. Login failed with 429: Too many authentication attempts, try again later. IP lockout Login failed with 429: Too many authentication attempts, try again later. IP lockout Login failed with 429: Too many authentication attempts, try again later. IP lockout ${json} ${resp.text} Convert String to JSON object ${token} ${json} $.access_token Get Value From JSON using JSONPath ${token_str} ${token}[0] Returns the given values which can then be assigned to a variables. ${TOKEN} ${token_str} Makes a variable available everywhere within the scope of the current suite. ${token_str} ${token} Log in with the master password and return the JWT access token. Login failed with 429: Too many authentication attempts, try again later. IP lockout auth ${BASE_URL} headers={'Authorization': 'Bearer ${token}'} Create Session: create a HTTP session to a server Login failed with 429: Too many authentication attempts, try again later. IP lockout auth ${BASE_URL} headers={'Authorization': 'Bearer ${TOKEN}'} Create Session: create a HTTP session to a server Login failed with 429: Too many authentication attempts, try again later. IP lockout Create an authenticated HTTP session. Performs setup if needed, then logs in. Skips setup/login if already authenticated (suite-level setup done). Login failed with 429: Too many authentication attempts, try again later. IP lockout Create Anonymous Session AND Setup Master Password AND Create Authenticated Session Executes all the given keywords in a sequence. Login failed with 429: Too many authentication attempts, try again later. IP lockout Deleting All Sessions Removes all the session objects Verify that malformed schedule_time is rejected. Setup failed: Login failed with 429: Too many authentication attempts, try again later. IP lockout Creating Session using : alias=anon, url=http://127.0.0.1:8765, headers={}, cookies={}, auth=None, timeout=None, proxies=None, verify=False, debug=0 anon ${BASE_URL} Create Session: create a HTTP session to a server Create an unauthenticated HTTP session. ${payload} = {'master_password': 'TestPass123!', 'anime_directory': '/tmp/aniworld_test_anime', 'name': 'AniworldTest', 'data_dir': 'data', 'scheduler_enabled': 'False', 'logging_level': 'INFO', 'backup_enabled': ... ${payload} master_password=${SETUP_PASSWORD} anime_directory=/tmp/aniworld_test_anime name=AniworldTest data_dir=data scheduler_enabled=False logging_level=INFO backup_enabled=False Creates and returns a dictionary based on the given ``items``. POST Request : url=http://127.0.0.1:8765/api/auth/setup path_url=/api/auth/setup headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '208', 'Content-Type': 'application/json'} body=b'{"master_password": "TestPass123!", "anime_directory": "/tmp/aniworld_test_anime", "name": "AniworldTest", "data_dir": "data", "scheduler_enabled": "False", "logging_level": "INFO", "backup_enabled": "False"}' POST Response : url=http://127.0.0.1:8765/api/auth/setup status=429, reason=Too Many Requests headers={'date': 'Sat, 27 Jun 2026 13:42:03 GMT', 'server': 'uvicorn', 'content-length': '74', 'content-type': 'application/json'} body={"detail":"Too many authentication attempts, try again later. IP lockout"} ${resp} = <Response [429]> ${resp} anon /api/auth/setup json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. Slept 45 seconds. 45s Pauses the test executed for the given time. POST Request : url=http://127.0.0.1:8765/api/auth/setup path_url=/api/auth/setup headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '208', 'Content-Type': 'application/json'} body=b'{"master_password": "TestPass123!", "anime_directory": "/tmp/aniworld_test_anime", "name": "AniworldTest", "data_dir": "data", "scheduler_enabled": "False", "logging_level": "INFO", "backup_enabled": "False"}' POST Response : url=http://127.0.0.1:8765/api/auth/setup status=429, reason=Too Many Requests headers={'date': 'Sat, 27 Jun 2026 13:42:48 GMT', 'server': 'uvicorn', 'content-length': '74', 'content-type': 'application/json'} body={"detail":"Too many authentication attempts, try again later. IP lockout"} ${resp} = <Response [429]> ${resp} anon /api/auth/setup json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. Slept 45 seconds. 45s Pauses the test executed for the given time. POST Request : url=http://127.0.0.1:8765/api/auth/setup path_url=/api/auth/setup headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '208', 'Content-Type': 'application/json'} body=b'{"master_password": "TestPass123!", "anime_directory": "/tmp/aniworld_test_anime", "name": "AniworldTest", "data_dir": "data", "scheduler_enabled": "False", "logging_level": "INFO", "backup_enabled": "False"}' POST Response : url=http://127.0.0.1:8765/api/auth/setup status=400, reason=Bad Request headers={'date': 'Sat, 27 Jun 2026 13:43:33 GMT', 'server': 'uvicorn', 'content-length': '47', 'content-type': 'application/json'} body={"detail":"Master password already configured"} ${resp} = <Response [400]> ${resp} anon /api/auth/setup json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. ${json} = {'detail': 'Master password already configured'} ${json} ${resp.text} Convert String to JSON object ${detail} = ['Master password already configured'] ${detail} ${json} $.detail Get Value From JSON using JSONPath Setup failed with 400: ${detail} Fails the test with the given message and optionally alters its tags. ${resp.status_code} 201 Fails if objects are unequal after converting them to integers. Unexpected status ${resp.status_code} from /api/auth/setup Fails the test with the given message and optionally alters its tags. Configure the master password via the setup endpoint. Creating Session using : alias=anon, url=http://127.0.0.1:8765, headers={}, cookies={}, auth=None, timeout=None, proxies=None, verify=False, debug=0 anon ${BASE_URL} Create Session: create a HTTP session to a server Create an unauthenticated HTTP session. GET Request : url=http://127.0.0.1:8765/api/auth/status path_url=/api/auth/status headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive'} body=None GET Response : url=http://127.0.0.1:8765/api/auth/status status=200, reason=OK headers={'date': 'Sat, 27 Jun 2026 13:43:33 GMT', 'server': 'uvicorn', 'content-length': '41', 'content-type': 'application/json'} body={"configured":true,"authenticated":false} ${resp} = <Response [200]> ${resp} anon /api/auth/status expected_status=200 Sends a GET request on a previously created HTTP Session. ${json} = {'configured': True, 'authenticated': False} ${json} ${resp.text} Convert String to JSON object ${configured} = [True] ${configured} ${json} $.configured Get Value From JSON using JSONPath ${configured_val} = True ${configured_val} ${configured}[0] Returns the given values which can then be assigned to a variables. ${configured_val} ${configured} = True ${configured} Check if the master password has already been configured. Configure the master password via the setup endpoint. ${token} Log in with the master password and return the JWT access token. auth ${BASE_URL} headers={'Authorization': 'Bearer ${token}'} Create Session: create a HTTP session to a server ${payload} = {'password': 'TestPass123!'} ${payload} password=${SETUP_PASSWORD} Creates and returns a dictionary based on the given ``items``. POST Request : url=http://127.0.0.1:8765/api/auth/login path_url=/api/auth/login headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '28', 'Content-Type': 'application/json'} body=b'{"password": "TestPass123!"}' POST Response : url=http://127.0.0.1:8765/api/auth/login status=429, reason=Too Many Requests headers={'date': 'Sat, 27 Jun 2026 13:43:33 GMT', 'server': 'uvicorn', 'content-length': '62', 'content-type': 'application/json'} body={"detail":"Too many failed attempts - temporarily locked out"} ${resp} = <Response [429]> ${resp} anon /api/auth/login json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. Slept 6 seconds. 6s Pauses the test executed for the given time. POST Request : url=http://127.0.0.1:8765/api/auth/login path_url=/api/auth/login headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '28', 'Content-Type': 'application/json'} body=b'{"password": "TestPass123!"}' POST Response : url=http://127.0.0.1:8765/api/auth/login status=429, reason=Too Many Requests headers={'date': 'Sat, 27 Jun 2026 13:43:39 GMT', 'server': 'uvicorn', 'content-length': '62', 'content-type': 'application/json'} body={"detail":"Too many failed attempts - temporarily locked out"} ${resp} = <Response [429]> ${resp} anon /api/auth/login json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. ${json} = {'detail': 'Too many failed attempts - temporarily locked out'} ${json} ${resp.text} Convert String to JSON object ${detail} = ['Too many failed attempts - temporarily locked out'] ${detail} ${json} $.detail Get Value From JSON using JSONPath ${detail_val} = Too many failed attempts - temporarily locked out ${detail_val} ${detail}[0] Returns the given values which can then be assigned to a variables. Login failed with 429: Too many failed attempts - temporarily locked out Login failed with ${resp.status_code}: ${detail_val} Fails the test with the given message and optionally alters its tags. Login failed with 429: Too many failed attempts - temporarily locked out Login failed with 429: Too many failed attempts - temporarily locked out Login failed with 429: Too many failed attempts - temporarily locked out ${json} ${resp.text} Convert String to JSON object ${token} ${json} $.access_token Get Value From JSON using JSONPath ${token_str} ${token}[0] Returns the given values which can then be assigned to a variables. ${TOKEN} ${token_str} Makes a variable available everywhere within the scope of the current suite. ${token_str} ${token} Log in with the master password and return the JWT access token. Login failed with 429: Too many failed attempts - temporarily locked out auth ${BASE_URL} headers={'Authorization': 'Bearer ${token}'} Create Session: create a HTTP session to a server Login failed with 429: Too many failed attempts - temporarily locked out auth ${BASE_URL} headers={'Authorization': 'Bearer ${TOKEN}'} Create Session: create a HTTP session to a server Login failed with 429: Too many failed attempts - temporarily locked out Create an authenticated HTTP session. Performs setup if needed, then logs in. Skips setup/login if already authenticated (suite-level setup done). Login failed with 429: Too many failed attempts - temporarily locked out Create Anonymous Session AND Setup Master Password AND Create Authenticated Session Executes all the given keywords in a sequence. Login failed with 429: Too many failed attempts - temporarily locked out Deleting All Sessions Removes all the session objects Verify that invalid day abbreviations are rejected. Setup failed: Login failed with 429: Too many failed attempts - temporarily locked out Creating Session using : alias=anon, url=http://127.0.0.1:8765, headers={}, cookies={}, auth=None, timeout=None, proxies=None, verify=False, debug=0 anon ${BASE_URL} Create Session: create a HTTP session to a server Create an unauthenticated HTTP session. ${payload} = {'master_password': 'TestPass123!', 'anime_directory': '/tmp/aniworld_test_anime', 'name': 'AniworldTest', 'data_dir': 'data', 'scheduler_enabled': 'False', 'logging_level': 'INFO', 'backup_enabled': ... ${payload} master_password=${SETUP_PASSWORD} anime_directory=/tmp/aniworld_test_anime name=AniworldTest data_dir=data scheduler_enabled=False logging_level=INFO backup_enabled=False Creates and returns a dictionary based on the given ``items``. POST Request : url=http://127.0.0.1:8765/api/auth/setup path_url=/api/auth/setup headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '208', 'Content-Type': 'application/json'} body=b'{"master_password": "TestPass123!", "anime_directory": "/tmp/aniworld_test_anime", "name": "AniworldTest", "data_dir": "data", "scheduler_enabled": "False", "logging_level": "INFO", "backup_enabled": "False"}' POST Response : url=http://127.0.0.1:8765/api/auth/setup status=400, reason=Bad Request headers={'date': 'Sat, 27 Jun 2026 13:43:39 GMT', 'server': 'uvicorn', 'content-length': '47', 'content-type': 'application/json'} body={"detail":"Master password already configured"} ${resp} = <Response [400]> ${resp} anon /api/auth/setup json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. 45s Pauses the test executed for the given time. ${resp} anon /api/auth/setup json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. 45s Pauses the test executed for the given time. ${resp} anon /api/auth/setup json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. ${json} = {'detail': 'Master password already configured'} ${json} ${resp.text} Convert String to JSON object ${detail} = ['Master password already configured'] ${detail} ${json} $.detail Get Value From JSON using JSONPath Setup failed with 400: ${detail} Fails the test with the given message and optionally alters its tags. ${resp.status_code} 201 Fails if objects are unequal after converting them to integers. Unexpected status ${resp.status_code} from /api/auth/setup Fails the test with the given message and optionally alters its tags. Configure the master password via the setup endpoint. Creating Session using : alias=anon, url=http://127.0.0.1:8765, headers={}, cookies={}, auth=None, timeout=None, proxies=None, verify=False, debug=0 anon ${BASE_URL} Create Session: create a HTTP session to a server Create an unauthenticated HTTP session. GET Request : url=http://127.0.0.1:8765/api/auth/status path_url=/api/auth/status headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive'} body=None GET Response : url=http://127.0.0.1:8765/api/auth/status status=200, reason=OK headers={'date': 'Sat, 27 Jun 2026 13:43:39 GMT', 'server': 'uvicorn', 'content-length': '41', 'content-type': 'application/json'} body={"configured":true,"authenticated":false} ${resp} = <Response [200]> ${resp} anon /api/auth/status expected_status=200 Sends a GET request on a previously created HTTP Session. ${json} = {'configured': True, 'authenticated': False} ${json} ${resp.text} Convert String to JSON object ${configured} = [True] ${configured} ${json} $.configured Get Value From JSON using JSONPath ${configured_val} = True ${configured_val} ${configured}[0] Returns the given values which can then be assigned to a variables. ${configured_val} ${configured} = True ${configured} Check if the master password has already been configured. Configure the master password via the setup endpoint. ${token} Log in with the master password and return the JWT access token. auth ${BASE_URL} headers={'Authorization': 'Bearer ${token}'} Create Session: create a HTTP session to a server ${payload} = {'password': 'TestPass123!'} ${payload} password=${SETUP_PASSWORD} Creates and returns a dictionary based on the given ``items``. POST Request : url=http://127.0.0.1:8765/api/auth/login path_url=/api/auth/login headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '28', 'Content-Type': 'application/json'} body=b'{"password": "TestPass123!"}' POST Response : url=http://127.0.0.1:8765/api/auth/login status=429, reason=Too Many Requests headers={'date': 'Sat, 27 Jun 2026 13:43:39 GMT', 'server': 'uvicorn', 'content-length': '62', 'content-type': 'application/json'} body={"detail":"Too many failed attempts - temporarily locked out"} ${resp} = <Response [429]> ${resp} anon /api/auth/login json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. Slept 6 seconds. 6s Pauses the test executed for the given time. POST Request : url=http://127.0.0.1:8765/api/auth/login path_url=/api/auth/login headers={'User-Agent': 'python-requests/2.33.1', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '28', 'Content-Type': 'application/json'} body=b'{"password": "TestPass123!"}' POST Response : url=http://127.0.0.1:8765/api/auth/login status=429, reason=Too Many Requests headers={'date': 'Sat, 27 Jun 2026 13:43:45 GMT', 'server': 'uvicorn', 'content-length': '74', 'content-type': 'application/json'} body={"detail":"Too many authentication attempts, try again later. IP lockout"} ${resp} = <Response [429]> ${resp} anon /api/auth/login json=${payload} expected_status=any Sends a POST request on a previously created HTTP Session. ${json} = {'detail': 'Too many authentication attempts, try again later. IP lockout'} ${json} ${resp.text} Convert String to JSON object ${detail} = ['Too many authentication attempts, try again later. IP lockout'] ${detail} ${json} $.detail Get Value From JSON using JSONPath ${detail_val} = Too many authentication attempts, try again later. IP lockout ${detail_val} ${detail}[0] Returns the given values which can then be assigned to a variables. Login failed with 429: Too many authentication attempts, try again later. IP lockout Login failed with ${resp.status_code}: ${detail_val} Fails the test with the given message and optionally alters its tags. Login failed with 429: Too many authentication attempts, try again later. IP lockout Login failed with 429: Too many authentication attempts, try again later. IP lockout Login failed with 429: Too many authentication attempts, try again later. IP lockout ${json} ${resp.text} Convert String to JSON object ${token} ${json} $.access_token Get Value From JSON using JSONPath ${token_str} ${token}[0] Returns the given values which can then be assigned to a variables. ${TOKEN} ${token_str} Makes a variable available everywhere within the scope of the current suite. ${token_str} ${token} Log in with the master password and return the JWT access token. Login failed with 429: Too many authentication attempts, try again later. IP lockout auth ${BASE_URL} headers={'Authorization': 'Bearer ${token}'} Create Session: create a HTTP session to a server Login failed with 429: Too many authentication attempts, try again later. IP lockout auth ${BASE_URL} headers={'Authorization': 'Bearer ${TOKEN}'} Create Session: create a HTTP session to a server Login failed with 429: Too many authentication attempts, try again later. IP lockout Create an authenticated HTTP session. Performs setup if needed, then logs in. Skips setup/login if already authenticated (suite-level setup done). Login failed with 429: Too many authentication attempts, try again later. IP lockout Create Anonymous Session AND Setup Master Password AND Create Authenticated Session Executes all the given keywords in a sequence. Login failed with 429: Too many authentication attempts, try again later. IP lockout Deleting All Sessions Removes all the session objects Verify that empty schedule_days is handled. Setup failed: Login failed with 429: Too many authentication attempts, try again later. IP lockout Scheduler API tests for Aniworld. Covers get config, update config, trigger rescan, and validation. All Tests Scheduler