Files
Aniworld/output.xml
Lukas c6d9615731 fix tests: simplify anime URL key, increase timeout to 10s
- Change attack-on-titan-2013 → attack-on-titan in UI tests
- Increase wait timeout 5s → 10s for settings-section
- Remove completed task entries from Docs/tasks.md
2026-06-28 17:08:30 +02:00

2334 lines
92 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<robot generator="Robot 7.4.2 (Python 3.13.5 on linux)" generated="2026-06-28T17:03:42.506501" rpa="false" schemaversion="5">
<suite id="s1" name="Websocket" source="/home/lukas/Volume/repo/Aniworld/tests/robot/api/websocket.robot">
<test id="s1-t1" name="Connect To WebSocket" line="21">
<kw name="Run Keywords" owner="BuiltIn" type="SETUP">
<kw name="Create Anonymous Session" owner="common">
<kw name="Create Session" owner="RequestsLibrary">
<arg>anon</arg>
<arg>${BASE_URL}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.724865" elapsed="0.000115"/>
</kw>
<doc>Create an unauthenticated HTTP session.</doc>
<status status="PASS" start="2026-06-28T17:03:42.724603" elapsed="0.000452"/>
</kw>
<kw name="Setup Master Password" owner="common">
<kw name="Create Dictionary" owner="BuiltIn">
<var>${payload}</var>
<arg>master_password=${SETUP_PASSWORD}</arg>
<arg>anime_directory=/tmp/aniworld_test_anime</arg>
<arg>name=AniworldTest</arg>
<arg>data_dir=data</arg>
<arg>scheduler_enabled=False</arg>
<arg>logging_level=INFO</arg>
<arg>backup_enabled=False</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.725512" elapsed="0.000207"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/setup</arg>
<arg>json=${payload}</arg>
<arg>expected_status=any</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.725819" elapsed="0.000100"/>
</kw>
<if>
<branch type="IF" condition="'${resp.status_code}' == '429'">
<kw name="Sleep" owner="BuiltIn">
<arg>45s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.726127" elapsed="0.000180"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/setup</arg>
<arg>json=${payload}</arg>
<arg>expected_status=any</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.726394" elapsed="0.000087"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:42.726008" elapsed="0.000511"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:42.725987" elapsed="0.000567"/>
</if>
<if>
<branch type="IF" condition="'${resp.status_code}' == '429'">
<kw name="Sleep" owner="BuiltIn">
<arg>45s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.726717" elapsed="0.000164"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/setup</arg>
<arg>json=${payload}</arg>
<arg>expected_status=any</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.726960" elapsed="0.000083"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:42.726607" elapsed="0.000473"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:42.726594" elapsed="0.000515"/>
</if>
<if>
<branch type="IF" condition="'${resp.status_code}' == '400'">
<kw name="Convert String To Json" owner="JSONLibrary">
<var>${json}</var>
<arg>${resp.text}</arg>
<doc>Convert String to JSON object</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.727254" elapsed="0.000061"/>
</kw>
<kw name="Get Value From Json" owner="JSONLibrary">
<var>${detail}</var>
<arg>${json}</arg>
<arg>$.detail</arg>
<doc>Get Value From JSON using JSONPath</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.727389" elapsed="0.000086"/>
</kw>
<if>
<branch type="IF" condition="'${detail}[0]' == 'Master password already configured'">
<return>
<status status="PASS" start="2026-06-28T17:03:42.727629" elapsed="0.000047"/>
</return>
<status status="PASS" start="2026-06-28T17:03:42.727558" elapsed="0.000155"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:42.727543" elapsed="0.000195"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Setup failed with 400: ${detail}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.727802" elapsed="0.000206"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:42.727156" elapsed="0.000882"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:42.727145" elapsed="0.000916"/>
</if>
<if>
<branch type="IF" condition="'${resp.status_code}' == '201'">
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${resp.status_code}</arg>
<arg>201</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.728266" elapsed="0.000126"/>
</kw>
<return>
<status status="PASS" start="2026-06-28T17:03:42.728428" elapsed="0.000038"/>
</return>
<status status="PASS" start="2026-06-28T17:03:42.728099" elapsed="0.000392"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:42.728089" elapsed="0.000422"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Unexpected status ${resp.status_code} from /api/auth/setup</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.728565" elapsed="0.000115"/>
</kw>
<doc>Configure the master password via the setup endpoint.</doc>
<status status="PASS" start="2026-06-28T17:03:42.725292" elapsed="0.003432"/>
</kw>
<kw name="Create Authenticated Session" owner="common">
<kw name="Create Anonymous Session" owner="common">
<kw name="Create Session" owner="RequestsLibrary">
<arg>anon</arg>
<arg>${BASE_URL}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.729244" elapsed="0.000081"/>
</kw>
<doc>Create an unauthenticated HTTP session.</doc>
<status status="PASS" start="2026-06-28T17:03:42.729088" elapsed="0.000279"/>
</kw>
<kw name="Is Auth Configured" owner="common">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/status</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.729606" elapsed="0.000066"/>
</kw>
<kw name="Convert String To Json" owner="JSONLibrary">
<var>${json}</var>
<arg>${resp.text}</arg>
<doc>Convert String to JSON object</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.729764" elapsed="0.000051"/>
</kw>
<kw name="Get Value From Json" owner="JSONLibrary">
<var>${configured}</var>
<arg>${json}</arg>
<arg>$.configured</arg>
<doc>Get Value From JSON using JSONPath</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.729877" elapsed="0.000060"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${configured_val}</var>
<arg>${configured}[0]</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.730002" elapsed="0.000123"/>
</kw>
<return>
<value>${configured_val}</value>
<status status="PASS" start="2026-06-28T17:03:42.730161" elapsed="0.000039"/>
</return>
<var>${configured}</var>
<doc>Check if the master password has already been configured.</doc>
<status status="PASS" start="2026-06-28T17:03:42.729465" elapsed="0.000767"/>
</kw>
<if>
<branch type="IF" condition="not ${configured}">
<kw name="Setup Master Password" owner="common">
<kw name="Create Dictionary" owner="BuiltIn">
<var>${payload}</var>
<arg>master_password=${SETUP_PASSWORD}</arg>
<arg>anime_directory=/tmp/aniworld_test_anime</arg>
<arg>name=AniworldTest</arg>
<arg>data_dir=data</arg>
<arg>scheduler_enabled=False</arg>
<arg>logging_level=INFO</arg>
<arg>backup_enabled=False</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.730610" elapsed="0.000180"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/setup</arg>
<arg>json=${payload}</arg>
<arg>expected_status=any</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.730876" elapsed="0.000071"/>
</kw>
<if>
<branch type="IF" condition="'${resp.status_code}' == '429'">
<kw name="Sleep" owner="BuiltIn">
<arg>45s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.731217" elapsed="0.000154"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/setup</arg>
<arg>json=${payload}</arg>
<arg>expected_status=any</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.731452" elapsed="0.000101"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:42.731123" elapsed="0.000466"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:42.731111" elapsed="0.000506"/>
</if>
<if>
<branch type="IF" condition="'${resp.status_code}' == '429'">
<kw name="Sleep" owner="BuiltIn">
<arg>45s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.731763" elapsed="0.000139"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/setup</arg>
<arg>json=${payload}</arg>
<arg>expected_status=any</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.731972" elapsed="0.000073"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:42.731659" elapsed="0.000418"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:42.731649" elapsed="0.000452"/>
</if>
<if>
<branch type="IF" condition="'${resp.status_code}' == '400'">
<kw name="Convert String To Json" owner="JSONLibrary">
<var>${json}</var>
<arg>${resp.text}</arg>
<doc>Convert String to JSON object</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.732221" elapsed="0.000048"/>
</kw>
<kw name="Get Value From Json" owner="JSONLibrary">
<var>${detail}</var>
<arg>${json}</arg>
<arg>$.detail</arg>
<doc>Get Value From JSON using JSONPath</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.732333" elapsed="0.000056"/>
</kw>
<if>
<branch type="IF" condition="'${detail}[0]' == 'Master password already configured'">
<return>
<status status="PASS" start="2026-06-28T17:03:42.732481" elapsed="0.000031"/>
</return>
<status status="PASS" start="2026-06-28T17:03:42.732437" elapsed="0.000098"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:42.732428" elapsed="0.000126"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Setup failed with 400: ${detail}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.732604" elapsed="0.000126"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:42.732140" elapsed="0.000625"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:42.732131" elapsed="0.000664"/>
</if>
<if>
<branch type="IF" condition="'${resp.status_code}' == '201'">
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${resp.status_code}</arg>
<arg>201</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.732924" elapsed="0.000136"/>
</kw>
<return>
<status status="PASS" start="2026-06-28T17:03:42.733101" elapsed="0.000040"/>
</return>
<status status="PASS" start="2026-06-28T17:03:42.732834" elapsed="0.000337"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:42.732825" elapsed="0.000370"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Unexpected status ${resp.status_code} from /api/auth/setup</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.733258" elapsed="0.000127"/>
</kw>
<doc>Configure the master password via the setup endpoint.</doc>
<status status="PASS" start="2026-06-28T17:03:42.730466" elapsed="0.002956"/>
</kw>
<kw name="Login And Get Token" owner="common">
<kw name="Create Dictionary" owner="BuiltIn">
<var>${payload}</var>
<arg>password=${SETUP_PASSWORD}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.733759" elapsed="0.000132"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/login</arg>
<arg>json=${payload}</arg>
<arg>expected_status=any</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.733968" elapsed="0.000075"/>
</kw>
<if>
<branch type="IF" condition="'${resp.status_code}' == '429'">
<kw name="Sleep" owner="BuiltIn">
<arg>6s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.734191" elapsed="0.000146"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/login</arg>
<arg>json=${payload}</arg>
<arg>expected_status=any</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.734416" elapsed="0.000077"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:42.734103" elapsed="0.000425"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:42.734092" elapsed="0.000464"/>
</if>
<if>
<branch type="IF" condition="'${resp.status_code}' != '200'">
<kw name="Convert String To Json" owner="JSONLibrary">
<var>${json}</var>
<arg>${resp.text}</arg>
<doc>Convert String to JSON object</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.734690" elapsed="0.000065"/>
</kw>
<kw name="Get Value From Json" owner="JSONLibrary">
<var>${detail}</var>
<arg>${json}</arg>
<arg>$.detail</arg>
<doc>Get Value From JSON using JSONPath</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.734826" elapsed="0.000063"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${detail_val}</var>
<arg>${detail}[0]</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.734963" elapsed="0.000125"/>
</kw>
<kw name="Fail" owner="BuiltIn">
<arg>Login failed with ${resp.status_code}: ${detail_val}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.735159" elapsed="0.000138"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:42.734599" elapsed="0.000727"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:42.734588" elapsed="0.000765"/>
</if>
<kw name="Convert String To Json" owner="JSONLibrary">
<var>${json}</var>
<arg>${resp.text}</arg>
<doc>Convert String to JSON object</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.735410" elapsed="0.000053"/>
</kw>
<kw name="Get Value From Json" owner="JSONLibrary">
<var>${token}</var>
<arg>${json}</arg>
<arg>$.access_token</arg>
<doc>Get Value From JSON using JSONPath</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.735530" elapsed="0.000083"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${token_str}</var>
<arg>${token}[0]</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.735681" elapsed="0.000122"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${TOKEN}</arg>
<arg>${token_str}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.735880" elapsed="0.000136"/>
</kw>
<return>
<value>${token_str}</value>
<status status="PASS" start="2026-06-28T17:03:42.736057" elapsed="0.000053"/>
</return>
<var>${token}</var>
<doc>Log in with the master password and return the JWT access token.</doc>
<status status="PASS" start="2026-06-28T17:03:42.733573" elapsed="0.002580"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<arg>auth</arg>
<arg>${BASE_URL}</arg>
<arg>headers={'Authorization': 'Bearer ${token}'}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.736228" elapsed="0.000090"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:42.730281" elapsed="0.006073"/>
</branch>
<branch type="ELSE IF" condition="'${TOKEN}' == '${EMPTY}'">
<kw name="Login And Get Token" owner="common">
<kw name="Create Dictionary" owner="BuiltIn">
<var>${payload}</var>
<arg>password=${SETUP_PASSWORD}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.736780" elapsed="0.000120"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/login</arg>
<arg>json=${payload}</arg>
<arg>expected_status=any</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.736967" elapsed="0.000071"/>
</kw>
<if>
<branch type="IF" condition="'${resp.status_code}' == '429'">
<kw name="Sleep" owner="BuiltIn">
<arg>6s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.737169" elapsed="0.000127"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/login</arg>
<arg>json=${payload}</arg>
<arg>expected_status=any</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.737365" elapsed="0.000077"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:42.737092" elapsed="0.000381"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:42.737082" elapsed="0.000416"/>
</if>
<if>
<branch type="IF" condition="'${resp.status_code}' != '200'">
<kw name="Convert String To Json" owner="JSONLibrary">
<var>${json}</var>
<arg>${resp.text}</arg>
<doc>Convert String to JSON object</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.737618" elapsed="0.000049"/>
</kw>
<kw name="Get Value From Json" owner="JSONLibrary">
<var>${detail}</var>
<arg>${json}</arg>
<arg>$.detail</arg>
<doc>Get Value From JSON using JSONPath</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.737734" elapsed="0.000056"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${detail_val}</var>
<arg>${detail}[0]</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.737853" elapsed="0.000117"/>
</kw>
<kw name="Fail" owner="BuiltIn">
<arg>Login failed with ${resp.status_code}: ${detail_val}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.738033" elapsed="0.000107"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:42.737536" elapsed="0.000629"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:42.737527" elapsed="0.000661"/>
</if>
<kw name="Convert String To Json" owner="JSONLibrary">
<var>${json}</var>
<arg>${resp.text}</arg>
<doc>Convert String to JSON object</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.738238" elapsed="0.000047"/>
</kw>
<kw name="Get Value From Json" owner="JSONLibrary">
<var>${token}</var>
<arg>${json}</arg>
<arg>$.access_token</arg>
<doc>Get Value From JSON using JSONPath</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.738346" elapsed="0.000054"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${token_str}</var>
<arg>${token}[0]</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.738461" elapsed="0.000106"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${TOKEN}</arg>
<arg>${token_str}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.738634" elapsed="0.000121"/>
</kw>
<return>
<value>${token_str}</value>
<status status="PASS" start="2026-06-28T17:03:42.738790" elapsed="0.000042"/>
</return>
<var>${token}</var>
<doc>Log in with the master password and return the JWT access token.</doc>
<status status="PASS" start="2026-06-28T17:03:42.736636" elapsed="0.002228"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<arg>auth</arg>
<arg>${BASE_URL}</arg>
<arg>headers={'Authorization': 'Bearer ${token}'}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.738931" elapsed="0.000081"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:42.736443" elapsed="0.002600"/>
</branch>
<branch type="ELSE">
<kw name="Create Session" owner="RequestsLibrary">
<arg>auth</arg>
<arg>${BASE_URL}</arg>
<arg>headers={'Authorization': 'Bearer ${TOKEN}'}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.739171" elapsed="0.000072"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:42.739067" elapsed="0.000204"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:42.730272" elapsed="0.009020"/>
</if>
<doc>Create an authenticated HTTP session. Performs setup if needed, then logs in.
Skips setup/login if already authenticated (suite-level setup done).</doc>
<status status="PASS" start="2026-06-28T17:03:42.728877" elapsed="0.010435"/>
</kw>
<arg>Create Anonymous Session</arg>
<arg>AND</arg>
<arg>Setup Master Password</arg>
<arg>AND</arg>
<arg>Create Authenticated Session</arg>
<doc>Executes all the given keywords in a sequence.</doc>
<status status="PASS" start="2026-06-28T17:03:42.724128" elapsed="0.015208"/>
</kw>
<kw name="Login And Get Token" owner="common">
<kw name="Create Dictionary" owner="BuiltIn">
<var>${payload}</var>
<arg>password=${SETUP_PASSWORD}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.739677" elapsed="0.000125"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/login</arg>
<arg>json=${payload}</arg>
<arg>expected_status=any</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.739870" elapsed="0.000070"/>
</kw>
<if>
<branch type="IF" condition="'${resp.status_code}' == '429'">
<kw name="Sleep" owner="BuiltIn">
<arg>6s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.740077" elapsed="0.000132"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/login</arg>
<arg>json=${payload}</arg>
<arg>expected_status=any</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.740281" elapsed="0.000093"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:42.739993" elapsed="0.000412"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:42.739984" elapsed="0.000447"/>
</if>
<if>
<branch type="IF" condition="'${resp.status_code}' != '200'">
<kw name="Convert String To Json" owner="JSONLibrary">
<var>${json}</var>
<arg>${resp.text}</arg>
<doc>Convert String to JSON object</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.740548" elapsed="0.000048"/>
</kw>
<kw name="Get Value From Json" owner="JSONLibrary">
<var>${detail}</var>
<arg>${json}</arg>
<arg>$.detail</arg>
<doc>Get Value From JSON using JSONPath</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.740657" elapsed="0.000062"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${detail_val}</var>
<arg>${detail}[0]</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.740782" elapsed="0.000111"/>
</kw>
<kw name="Fail" owner="BuiltIn">
<arg>Login failed with ${resp.status_code}: ${detail_val}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.740954" elapsed="0.000128"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:42.740469" elapsed="0.000639"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:42.740459" elapsed="0.000672"/>
</if>
<kw name="Convert String To Json" owner="JSONLibrary">
<var>${json}</var>
<arg>${resp.text}</arg>
<doc>Convert String to JSON object</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.741181" elapsed="0.000051"/>
</kw>
<kw name="Get Value From Json" owner="JSONLibrary">
<var>${token}</var>
<arg>${json}</arg>
<arg>$.access_token</arg>
<doc>Get Value From JSON using JSONPath</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.741384" elapsed="0.000069"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${token_str}</var>
<arg>${token}[0]</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.741532" elapsed="0.000128"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${TOKEN}</arg>
<arg>${token_str}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.741745" elapsed="0.000131"/>
</kw>
<return>
<value>${token_str}</value>
<status status="PASS" start="2026-06-28T17:03:42.741914" elapsed="0.000039"/>
</return>
<var>${token}</var>
<doc>Log in with the master password and return the JWT access token.</doc>
<status status="PASS" start="2026-06-28T17:03:42.739519" elapsed="0.002468"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${ws_url}</var>
<arg>ws://${SERVER_HOST}:${SERVER_PORT}/ws/connect?token=${token}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.742063" elapsed="0.000134"/>
</kw>
<kw name="Connect To WebSocket" owner="websocket_keywords">
<var>${result}</var>
<arg>${ws_url}</arg>
<doc>Establish a WebSocket connection and return connection info.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.742263" elapsed="0.000055"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${result}</arg>
<arg>${SERVER_HOST}</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.742379" elapsed="0.000110"/>
</kw>
<kw name="Delete All Sessions" owner="RequestsLibrary" type="TEARDOWN">
<doc>Removes all the session objects</doc>
<status status="NOT RUN" start="2026-06-28T17:03:42.742603" elapsed="0.000051"/>
</kw>
<msg time="2026-06-28T17:03:42.746431" level="INFO">Starting Browser process /home/lukas/miniconda3/lib/python3.13/site-packages/Browser/wrapper/index.js using at 127.0.0.1:37625</msg>
<doc>Establish a WebSocket connection with a valid JWT token.</doc>
<status status="PASS" start="2026-06-28T17:03:42.723220" elapsed="0.019467"/>
</test>
<test id="s1-t2" name="Subscribe To Rooms" line="31">
<kw name="Run Keywords" owner="BuiltIn" type="SETUP">
<kw name="Create Anonymous Session" owner="common">
<kw name="Create Session" owner="RequestsLibrary">
<arg>anon</arg>
<arg>${BASE_URL}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.177506" elapsed="0.000100"/>
</kw>
<doc>Create an unauthenticated HTTP session.</doc>
<status status="PASS" start="2026-06-28T17:03:43.176960" elapsed="0.000698"/>
</kw>
<kw name="Setup Master Password" owner="common">
<kw name="Create Dictionary" owner="BuiltIn">
<var>${payload}</var>
<arg>master_password=${SETUP_PASSWORD}</arg>
<arg>anime_directory=/tmp/aniworld_test_anime</arg>
<arg>name=AniworldTest</arg>
<arg>data_dir=data</arg>
<arg>scheduler_enabled=False</arg>
<arg>logging_level=INFO</arg>
<arg>backup_enabled=False</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.178081" elapsed="0.000174"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/setup</arg>
<arg>json=${payload}</arg>
<arg>expected_status=any</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.178341" elapsed="0.000076"/>
</kw>
<if>
<branch type="IF" condition="'${resp.status_code}' == '429'">
<kw name="Sleep" owner="BuiltIn">
<arg>45s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.178574" elapsed="0.000154"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/setup</arg>
<arg>json=${payload}</arg>
<arg>expected_status=any</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.178819" elapsed="0.000075"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:43.178484" elapsed="0.000443"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.178468" elapsed="0.000488"/>
</if>
<if>
<branch type="IF" condition="'${resp.status_code}' == '429'">
<kw name="Sleep" owner="BuiltIn">
<arg>45s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.179077" elapsed="0.000132"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/setup</arg>
<arg>json=${payload}</arg>
<arg>expected_status=any</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.179277" elapsed="0.000072"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:43.178997" elapsed="0.000383"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.178986" elapsed="0.000420"/>
</if>
<if>
<branch type="IF" condition="'${resp.status_code}' == '400'">
<kw name="Convert String To Json" owner="JSONLibrary">
<var>${json}</var>
<arg>${resp.text}</arg>
<doc>Convert String to JSON object</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.179532" elapsed="0.000050"/>
</kw>
<kw name="Get Value From Json" owner="JSONLibrary">
<var>${detail}</var>
<arg>${json}</arg>
<arg>$.detail</arg>
<doc>Get Value From JSON using JSONPath</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.179644" elapsed="0.000061"/>
</kw>
<if>
<branch type="IF" condition="'${detail}[0]' == 'Master password already configured'">
<return>
<status status="PASS" start="2026-06-28T17:03:43.179817" elapsed="0.000043"/>
</return>
<status status="PASS" start="2026-06-28T17:03:43.179761" elapsed="0.000123"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.179752" elapsed="0.000153"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Setup failed with 400: ${detail}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.179955" elapsed="0.000122"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:43.179447" elapsed="0.000658"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.179438" elapsed="0.000689"/>
</if>
<if>
<branch type="IF" condition="'${resp.status_code}' == '201'">
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${resp.status_code}</arg>
<arg>201</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.180243" elapsed="0.000123"/>
</kw>
<return>
<status status="PASS" start="2026-06-28T17:03:43.180401" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-06-28T17:03:43.180163" elapsed="0.000295"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.180155" elapsed="0.000323"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Unexpected status ${resp.status_code} from /api/auth/setup</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.180529" elapsed="0.000116"/>
</kw>
<doc>Configure the master password via the setup endpoint.</doc>
<status status="PASS" start="2026-06-28T17:03:43.177895" elapsed="0.002787"/>
</kw>
<kw name="Create Authenticated Session" owner="common">
<kw name="Create Anonymous Session" owner="common">
<kw name="Create Session" owner="RequestsLibrary">
<arg>anon</arg>
<arg>${BASE_URL}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.181146" elapsed="0.000066"/>
</kw>
<doc>Create an unauthenticated HTTP session.</doc>
<status status="PASS" start="2026-06-28T17:03:43.181011" elapsed="0.000236"/>
</kw>
<kw name="Is Auth Configured" owner="common">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/status</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.181588" elapsed="0.000067"/>
</kw>
<kw name="Convert String To Json" owner="JSONLibrary">
<var>${json}</var>
<arg>${resp.text}</arg>
<doc>Convert String to JSON object</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.181750" elapsed="0.000053"/>
</kw>
<kw name="Get Value From Json" owner="JSONLibrary">
<var>${configured}</var>
<arg>${json}</arg>
<arg>$.configured</arg>
<doc>Get Value From JSON using JSONPath</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.181868" elapsed="0.000062"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${configured_val}</var>
<arg>${configured}[0]</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.182001" elapsed="0.000123"/>
</kw>
<return>
<value>${configured_val}</value>
<status status="PASS" start="2026-06-28T17:03:43.182166" elapsed="0.000040"/>
</return>
<var>${configured}</var>
<doc>Check if the master password has already been configured.</doc>
<status status="PASS" start="2026-06-28T17:03:43.181332" elapsed="0.000908"/>
</kw>
<if>
<branch type="IF" condition="not ${configured}">
<kw name="Setup Master Password" owner="common">
<kw name="Create Dictionary" owner="BuiltIn">
<var>${payload}</var>
<arg>master_password=${SETUP_PASSWORD}</arg>
<arg>anime_directory=/tmp/aniworld_test_anime</arg>
<arg>name=AniworldTest</arg>
<arg>data_dir=data</arg>
<arg>scheduler_enabled=False</arg>
<arg>logging_level=INFO</arg>
<arg>backup_enabled=False</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.182637" elapsed="0.000162"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/setup</arg>
<arg>json=${payload}</arg>
<arg>expected_status=any</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.182890" elapsed="0.000074"/>
</kw>
<if>
<branch type="IF" condition="'${resp.status_code}' == '429'">
<kw name="Sleep" owner="BuiltIn">
<arg>45s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.183104" elapsed="0.000138"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/setup</arg>
<arg>json=${payload}</arg>
<arg>expected_status=any</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.183310" elapsed="0.000089"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:43.183021" elapsed="0.000409"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.183011" elapsed="0.000445"/>
</if>
<if>
<branch type="IF" condition="'${resp.status_code}' == '429'">
<kw name="Sleep" owner="BuiltIn">
<arg>45s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.183570" elapsed="0.000138"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/setup</arg>
<arg>json=${payload}</arg>
<arg>expected_status=any</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.183783" elapsed="0.000074"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:43.183493" elapsed="0.000394"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.183484" elapsed="0.000427"/>
</if>
<if>
<branch type="IF" condition="'${resp.status_code}' == '400'">
<kw name="Convert String To Json" owner="JSONLibrary">
<var>${json}</var>
<arg>${resp.text}</arg>
<doc>Convert String to JSON object</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.184049" elapsed="0.000048"/>
</kw>
<kw name="Get Value From Json" owner="JSONLibrary">
<var>${detail}</var>
<arg>${json}</arg>
<arg>$.detail</arg>
<doc>Get Value From JSON using JSONPath</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.184161" elapsed="0.000056"/>
</kw>
<if>
<branch type="IF" condition="'${detail}[0]' == 'Master password already configured'">
<return>
<status status="PASS" start="2026-06-28T17:03:43.184311" elapsed="0.000036"/>
</return>
<status status="PASS" start="2026-06-28T17:03:43.184265" elapsed="0.000105"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.184256" elapsed="0.000135"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Setup failed with 400: ${detail}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.184445" elapsed="0.000121"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:43.183948" elapsed="0.000647"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.183940" elapsed="0.000677"/>
</if>
<if>
<branch type="IF" condition="'${resp.status_code}' == '201'">
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${resp.status_code}</arg>
<arg>201</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.184749" elapsed="0.000156"/>
</kw>
<return>
<status status="PASS" start="2026-06-28T17:03:43.184940" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-06-28T17:03:43.184652" elapsed="0.000345"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.184643" elapsed="0.000374"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Unexpected status ${resp.status_code} from /api/auth/setup</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.185068" elapsed="0.000110"/>
</kw>
<doc>Configure the master password via the setup endpoint.</doc>
<status status="PASS" start="2026-06-28T17:03:43.182500" elapsed="0.002710"/>
</kw>
<kw name="Login And Get Token" owner="common">
<kw name="Create Dictionary" owner="BuiltIn">
<var>${payload}</var>
<arg>password=${SETUP_PASSWORD}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.185505" elapsed="0.000117"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/login</arg>
<arg>json=${payload}</arg>
<arg>expected_status=any</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.185692" elapsed="0.000095"/>
</kw>
<if>
<branch type="IF" condition="'${resp.status_code}' == '429'">
<kw name="Sleep" owner="BuiltIn">
<arg>6s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.185944" elapsed="0.000152"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/login</arg>
<arg>json=${payload}</arg>
<arg>expected_status=any</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.186170" elapsed="0.000097"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:43.185854" elapsed="0.000452"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.185843" elapsed="0.000491"/>
</if>
<if>
<branch type="IF" condition="'${resp.status_code}' != '200'">
<kw name="Convert String To Json" owner="JSONLibrary">
<var>${json}</var>
<arg>${resp.text}</arg>
<doc>Convert String to JSON object</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.186462" elapsed="0.000054"/>
</kw>
<kw name="Get Value From Json" owner="JSONLibrary">
<var>${detail}</var>
<arg>${json}</arg>
<arg>$.detail</arg>
<doc>Get Value From JSON using JSONPath</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.186584" elapsed="0.000062"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${detail_val}</var>
<arg>${detail}[0]</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.186726" elapsed="0.000131"/>
</kw>
<kw name="Fail" owner="BuiltIn">
<arg>Login failed with ${resp.status_code}: ${detail_val}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.187013" elapsed="0.000130"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:43.186374" elapsed="0.000800"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.186365" elapsed="0.000835"/>
</if>
<kw name="Convert String To Json" owner="JSONLibrary">
<var>${json}</var>
<arg>${resp.text}</arg>
<doc>Convert String to JSON object</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.187258" elapsed="0.000055"/>
</kw>
<kw name="Get Value From Json" owner="JSONLibrary">
<var>${token}</var>
<arg>${json}</arg>
<arg>$.access_token</arg>
<doc>Get Value From JSON using JSONPath</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.187384" elapsed="0.000087"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${token_str}</var>
<arg>${token}[0]</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.187543" elapsed="0.000130"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${TOKEN}</arg>
<arg>${token_str}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.187762" elapsed="0.000127"/>
</kw>
<return>
<value>${token_str}</value>
<status status="PASS" start="2026-06-28T17:03:43.187922" elapsed="0.000037"/>
</return>
<var>${token}</var>
<doc>Log in with the master password and return the JWT access token.</doc>
<status status="PASS" start="2026-06-28T17:03:43.185345" elapsed="0.002645"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<arg>auth</arg>
<arg>${BASE_URL}</arg>
<arg>headers={'Authorization': 'Bearer ${token}'}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.188052" elapsed="0.000087"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:43.182293" elapsed="0.005878"/>
</branch>
<branch type="ELSE IF" condition="'${TOKEN}' == '${EMPTY}'">
<kw name="Login And Get Token" owner="common">
<kw name="Create Dictionary" owner="BuiltIn">
<var>${payload}</var>
<arg>password=${SETUP_PASSWORD}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.188494" elapsed="0.000131"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/login</arg>
<arg>json=${payload}</arg>
<arg>expected_status=any</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.188705" elapsed="0.000083"/>
</kw>
<if>
<branch type="IF" condition="'${resp.status_code}' == '429'">
<kw name="Sleep" owner="BuiltIn">
<arg>6s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.188936" elapsed="0.000135"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/login</arg>
<arg>json=${payload}</arg>
<arg>expected_status=any</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.189140" elapsed="0.000067"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:43.188854" elapsed="0.000385"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.188843" elapsed="0.000421"/>
</if>
<if>
<branch type="IF" condition="'${resp.status_code}' != '200'">
<kw name="Convert String To Json" owner="JSONLibrary">
<var>${json}</var>
<arg>${resp.text}</arg>
<doc>Convert String to JSON object</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.189381" elapsed="0.000049"/>
</kw>
<kw name="Get Value From Json" owner="JSONLibrary">
<var>${detail}</var>
<arg>${json}</arg>
<arg>$.detail</arg>
<doc>Get Value From JSON using JSONPath</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.189492" elapsed="0.000055"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${detail_val}</var>
<arg>${detail}[0]</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.189611" elapsed="0.000117"/>
</kw>
<kw name="Fail" owner="BuiltIn">
<arg>Login failed with ${resp.status_code}: ${detail_val}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.189802" elapsed="0.000125"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:43.189302" elapsed="0.000654"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.189293" elapsed="0.000688"/>
</if>
<kw name="Convert String To Json" owner="JSONLibrary">
<var>${json}</var>
<arg>${resp.text}</arg>
<doc>Convert String to JSON object</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.190041" elapsed="0.000053"/>
</kw>
<kw name="Get Value From Json" owner="JSONLibrary">
<var>${token}</var>
<arg>${json}</arg>
<arg>$.access_token</arg>
<doc>Get Value From JSON using JSONPath</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.190157" elapsed="0.000057"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${token_str}</var>
<arg>${token}[0]</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.190276" elapsed="0.000108"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${TOKEN}</arg>
<arg>${token_str}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.190452" elapsed="0.000115"/>
</kw>
<return>
<value>${token_str}</value>
<status status="PASS" start="2026-06-28T17:03:43.190599" elapsed="0.000035"/>
</return>
<var>${token}</var>
<doc>Log in with the master password and return the JWT access token.</doc>
<status status="PASS" start="2026-06-28T17:03:43.188356" elapsed="0.002308"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<arg>auth</arg>
<arg>${BASE_URL}</arg>
<arg>headers={'Authorization': 'Bearer ${token}'}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.190749" elapsed="0.000087"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:43.188201" elapsed="0.002667"/>
</branch>
<branch type="ELSE">
<kw name="Create Session" owner="RequestsLibrary">
<arg>auth</arg>
<arg>${BASE_URL}</arg>
<arg>headers={'Authorization': 'Bearer ${TOKEN}'}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.190985" elapsed="0.000079"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:43.190894" elapsed="0.000202"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.182284" elapsed="0.008835"/>
</if>
<doc>Create an authenticated HTTP session. Performs setup if needed, then logs in.
Skips setup/login if already authenticated (suite-level setup done).</doc>
<status status="PASS" start="2026-06-28T17:03:43.180840" elapsed="0.010301"/>
</kw>
<arg>Create Anonymous Session</arg>
<arg>AND</arg>
<arg>Setup Master Password</arg>
<arg>AND</arg>
<arg>Create Authenticated Session</arg>
<doc>Executes all the given keywords in a sequence.</doc>
<status status="PASS" start="2026-06-28T17:03:43.176531" elapsed="0.014636"/>
</kw>
<kw name="Pass Execution" owner="BuiltIn">
<arg>WebSocket room subscription requires custom keyword library</arg>
<doc>Skips rest of the current test, setup, or teardown with PASS status.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.191252" elapsed="0.000145"/>
</kw>
<kw name="Delete All Sessions" owner="RequestsLibrary" type="TEARDOWN">
<doc>Removes all the session objects</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.191523" elapsed="0.000055"/>
</kw>
<doc>Subscribe to WebSocket rooms (downloads, queue, scan, system).</doc>
<status status="PASS" start="2026-06-28T17:03:43.173452" elapsed="0.018158"/>
</test>
<test id="s1-t3" name="Receive Ping Pong" line="35">
<kw name="Run Keywords" owner="BuiltIn" type="SETUP">
<kw name="Create Anonymous Session" owner="common">
<kw name="Create Session" owner="RequestsLibrary">
<arg>anon</arg>
<arg>${BASE_URL}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.200994" elapsed="0.000096"/>
</kw>
<doc>Create an unauthenticated HTTP session.</doc>
<status status="PASS" start="2026-06-28T17:03:43.200757" elapsed="0.000389"/>
</kw>
<kw name="Setup Master Password" owner="common">
<kw name="Create Dictionary" owner="BuiltIn">
<var>${payload}</var>
<arg>master_password=${SETUP_PASSWORD}</arg>
<arg>anime_directory=/tmp/aniworld_test_anime</arg>
<arg>name=AniworldTest</arg>
<arg>data_dir=data</arg>
<arg>scheduler_enabled=False</arg>
<arg>logging_level=INFO</arg>
<arg>backup_enabled=False</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.201562" elapsed="0.000194"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/setup</arg>
<arg>json=${payload}</arg>
<arg>expected_status=any</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.201852" elapsed="0.000079"/>
</kw>
<if>
<branch type="IF" condition="'${resp.status_code}' == '429'">
<kw name="Sleep" owner="BuiltIn">
<arg>45s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.202083" elapsed="0.000149"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/setup</arg>
<arg>json=${payload}</arg>
<arg>expected_status=any</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.202302" elapsed="0.000071"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:43.201995" elapsed="0.000410"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.201982" elapsed="0.000452"/>
</if>
<if>
<branch type="IF" condition="'${resp.status_code}' == '429'">
<kw name="Sleep" owner="BuiltIn">
<arg>45s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.202561" elapsed="0.000151"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/setup</arg>
<arg>json=${payload}</arg>
<arg>expected_status=any</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.202802" elapsed="0.000082"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:43.202475" elapsed="0.000445"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.202464" elapsed="0.000485"/>
</if>
<if>
<branch type="IF" condition="'${resp.status_code}' == '400'">
<kw name="Convert String To Json" owner="JSONLibrary">
<var>${json}</var>
<arg>${resp.text}</arg>
<doc>Convert String to JSON object</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.203110" elapsed="0.000055"/>
</kw>
<kw name="Get Value From Json" owner="JSONLibrary">
<var>${detail}</var>
<arg>${json}</arg>
<arg>$.detail</arg>
<doc>Get Value From JSON using JSONPath</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.203236" elapsed="0.000079"/>
</kw>
<if>
<branch type="IF" condition="'${detail}[0]' == 'Master password already configured'">
<return>
<status status="PASS" start="2026-06-28T17:03:43.203422" elapsed="0.000038"/>
</return>
<status status="PASS" start="2026-06-28T17:03:43.203370" elapsed="0.000115"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.203360" elapsed="0.000148"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Setup failed with 400: ${detail}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.203564" elapsed="0.000127"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:43.202993" elapsed="0.000736"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.202983" elapsed="0.000771"/>
</if>
<if>
<branch type="IF" condition="'${resp.status_code}' == '201'">
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${resp.status_code}</arg>
<arg>201</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.203887" elapsed="0.000122"/>
</kw>
<return>
<status status="PASS" start="2026-06-28T17:03:43.204046" elapsed="0.000040"/>
</return>
<status status="PASS" start="2026-06-28T17:03:43.203794" elapsed="0.000317"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.203785" elapsed="0.000348"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Unexpected status ${resp.status_code} from /api/auth/setup</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.204189" elapsed="0.000145"/>
</kw>
<doc>Configure the master password via the setup endpoint.</doc>
<status status="PASS" start="2026-06-28T17:03:43.201347" elapsed="0.003023"/>
</kw>
<kw name="Create Authenticated Session" owner="common">
<kw name="Create Anonymous Session" owner="common">
<kw name="Create Session" owner="RequestsLibrary">
<arg>anon</arg>
<arg>${BASE_URL}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.204839" elapsed="0.000073"/>
</kw>
<doc>Create an unauthenticated HTTP session.</doc>
<status status="PASS" start="2026-06-28T17:03:43.204686" elapsed="0.000263"/>
</kw>
<kw name="Is Auth Configured" owner="common">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/status</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.205181" elapsed="0.000084"/>
</kw>
<kw name="Convert String To Json" owner="JSONLibrary">
<var>${json}</var>
<arg>${resp.text}</arg>
<doc>Convert String to JSON object</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.205340" elapsed="0.000051"/>
</kw>
<kw name="Get Value From Json" owner="JSONLibrary">
<var>${configured}</var>
<arg>${json}</arg>
<arg>$.configured</arg>
<doc>Get Value From JSON using JSONPath</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.205458" elapsed="0.000062"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${configured_val}</var>
<arg>${configured}[0]</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.205594" elapsed="0.000139"/>
</kw>
<return>
<value>${configured_val}</value>
<status status="PASS" start="2026-06-28T17:03:43.205774" elapsed="0.000041"/>
</return>
<var>${configured}</var>
<doc>Check if the master password has already been configured.</doc>
<status status="PASS" start="2026-06-28T17:03:43.205042" elapsed="0.000808"/>
</kw>
<if>
<branch type="IF" condition="not ${configured}">
<kw name="Setup Master Password" owner="common">
<kw name="Create Dictionary" owner="BuiltIn">
<var>${payload}</var>
<arg>master_password=${SETUP_PASSWORD}</arg>
<arg>anime_directory=/tmp/aniworld_test_anime</arg>
<arg>name=AniworldTest</arg>
<arg>data_dir=data</arg>
<arg>scheduler_enabled=False</arg>
<arg>logging_level=INFO</arg>
<arg>backup_enabled=False</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.206290" elapsed="0.000159"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/setup</arg>
<arg>json=${payload}</arg>
<arg>expected_status=any</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.206535" elapsed="0.000076"/>
</kw>
<if>
<branch type="IF" condition="'${resp.status_code}' == '429'">
<kw name="Sleep" owner="BuiltIn">
<arg>45s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.206779" elapsed="0.000145"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/setup</arg>
<arg>json=${payload}</arg>
<arg>expected_status=any</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.207108" elapsed="0.000086"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:43.206669" elapsed="0.000564"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.206659" elapsed="0.000602"/>
</if>
<if>
<branch type="IF" condition="'${resp.status_code}' == '429'">
<kw name="Sleep" owner="BuiltIn">
<arg>45s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.207396" elapsed="0.000166"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/setup</arg>
<arg>json=${payload}</arg>
<arg>expected_status=any</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.207637" elapsed="0.000083"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:43.207304" elapsed="0.000455"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.207293" elapsed="0.000493"/>
</if>
<if>
<branch type="IF" condition="'${resp.status_code}' == '400'">
<kw name="Convert String To Json" owner="JSONLibrary">
<var>${json}</var>
<arg>${resp.text}</arg>
<doc>Convert String to JSON object</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.207921" elapsed="0.000053"/>
</kw>
<kw name="Get Value From Json" owner="JSONLibrary">
<var>${detail}</var>
<arg>${json}</arg>
<arg>$.detail</arg>
<doc>Get Value From JSON using JSONPath</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.208044" elapsed="0.000062"/>
</kw>
<if>
<branch type="IF" condition="'${detail}[0]' == 'Master password already configured'">
<return>
<status status="PASS" start="2026-06-28T17:03:43.208208" elapsed="0.000035"/>
</return>
<status status="PASS" start="2026-06-28T17:03:43.208160" elapsed="0.000109"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.208150" elapsed="0.000141"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Setup failed with 400: ${detail}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.208346" elapsed="0.000121"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:43.207829" elapsed="0.000668"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.207820" elapsed="0.000701"/>
</if>
<if>
<branch type="IF" condition="'${resp.status_code}' == '201'">
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${resp.status_code}</arg>
<arg>201</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.208655" elapsed="0.000174"/>
</kw>
<return>
<status status="PASS" start="2026-06-28T17:03:43.208869" elapsed="0.000041"/>
</return>
<status status="PASS" start="2026-06-28T17:03:43.208561" elapsed="0.000374"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.208551" elapsed="0.000406"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Unexpected status ${resp.status_code} from /api/auth/setup</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.209016" elapsed="0.000127"/>
</kw>
<doc>Configure the master password via the setup endpoint.</doc>
<status status="PASS" start="2026-06-28T17:03:43.206113" elapsed="0.003068"/>
</kw>
<kw name="Login And Get Token" owner="common">
<kw name="Create Dictionary" owner="BuiltIn">
<var>${payload}</var>
<arg>password=${SETUP_PASSWORD}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.209512" elapsed="0.000133"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/login</arg>
<arg>json=${payload}</arg>
<arg>expected_status=any</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.209729" elapsed="0.000082"/>
</kw>
<if>
<branch type="IF" condition="'${resp.status_code}' == '429'">
<kw name="Sleep" owner="BuiltIn">
<arg>6s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.210002" elapsed="0.000166"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/login</arg>
<arg>json=${payload}</arg>
<arg>expected_status=any</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.210250" elapsed="0.000085"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:43.209871" elapsed="0.000499"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.209861" elapsed="0.000536"/>
</if>
<if>
<branch type="IF" condition="'${resp.status_code}' != '200'">
<kw name="Convert String To Json" owner="JSONLibrary">
<var>${json}</var>
<arg>${resp.text}</arg>
<doc>Convert String to JSON object</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.210531" elapsed="0.000056"/>
</kw>
<kw name="Get Value From Json" owner="JSONLibrary">
<var>${detail}</var>
<arg>${json}</arg>
<arg>$.detail</arg>
<doc>Get Value From JSON using JSONPath</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.210658" elapsed="0.000071"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${detail_val}</var>
<arg>${detail}[0]</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.210804" elapsed="0.000120"/>
</kw>
<kw name="Fail" owner="BuiltIn">
<arg>Login failed with ${resp.status_code}: ${detail_val}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.210989" elapsed="0.000114"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:43.210439" elapsed="0.000691"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.210429" elapsed="0.000724"/>
</if>
<kw name="Convert String To Json" owner="JSONLibrary">
<var>${json}</var>
<arg>${resp.text}</arg>
<doc>Convert String to JSON object</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.211205" elapsed="0.000049"/>
</kw>
<kw name="Get Value From Json" owner="JSONLibrary">
<var>${token}</var>
<arg>${json}</arg>
<arg>$.access_token</arg>
<doc>Get Value From JSON using JSONPath</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.211314" elapsed="0.000056"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${token_str}</var>
<arg>${token}[0]</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.211433" elapsed="0.000107"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${TOKEN}</arg>
<arg>${token_str}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.211613" elapsed="0.000163"/>
</kw>
<return>
<value>${token_str}</value>
<status status="PASS" start="2026-06-28T17:03:43.211816" elapsed="0.000049"/>
</return>
<var>${token}</var>
<doc>Log in with the master password and return the JWT access token.</doc>
<status status="PASS" start="2026-06-28T17:03:43.209334" elapsed="0.002565"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<arg>auth</arg>
<arg>${BASE_URL}</arg>
<arg>headers={'Authorization': 'Bearer ${token}'}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.211968" elapsed="0.000102"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:43.205905" elapsed="0.006193"/>
</branch>
<branch type="ELSE IF" condition="'${TOKEN}' == '${EMPTY}'">
<kw name="Login And Get Token" owner="common">
<kw name="Create Dictionary" owner="BuiltIn">
<var>${payload}</var>
<arg>password=${SETUP_PASSWORD}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.212421" elapsed="0.000122"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/login</arg>
<arg>json=${payload}</arg>
<arg>expected_status=any</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.212725" elapsed="0.000099"/>
</kw>
<if>
<branch type="IF" condition="'${resp.status_code}' == '429'">
<kw name="Sleep" owner="BuiltIn">
<arg>6s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.212994" elapsed="0.000162"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/login</arg>
<arg>json=${payload}</arg>
<arg>expected_status=any</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.213236" elapsed="0.000091"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:43.212892" elapsed="0.000473"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.212881" elapsed="0.000514"/>
</if>
<if>
<branch type="IF" condition="'${resp.status_code}' != '200'">
<kw name="Convert String To Json" owner="JSONLibrary">
<var>${json}</var>
<arg>${resp.text}</arg>
<doc>Convert String to JSON object</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.213535" elapsed="0.000061"/>
</kw>
<kw name="Get Value From Json" owner="JSONLibrary">
<var>${detail}</var>
<arg>${json}</arg>
<arg>$.detail</arg>
<doc>Get Value From JSON using JSONPath</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.213668" elapsed="0.000075"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${detail_val}</var>
<arg>${detail}[0]</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.213816" elapsed="0.000123"/>
</kw>
<kw name="Fail" owner="BuiltIn">
<arg>Login failed with ${resp.status_code}: ${detail_val}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.214004" elapsed="0.000114"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:43.213437" elapsed="0.000709"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.213428" elapsed="0.000741"/>
</if>
<kw name="Convert String To Json" owner="JSONLibrary">
<var>${json}</var>
<arg>${resp.text}</arg>
<doc>Convert String to JSON object</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.214222" elapsed="0.000055"/>
</kw>
<kw name="Get Value From Json" owner="JSONLibrary">
<var>${token}</var>
<arg>${json}</arg>
<arg>$.access_token</arg>
<doc>Get Value From JSON using JSONPath</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.214340" elapsed="0.000060"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${token_str}</var>
<arg>${token}[0]</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.214464" elapsed="0.000111"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${TOKEN}</arg>
<arg>${token_str}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.214646" elapsed="0.000147"/>
</kw>
<return>
<value>${token_str}</value>
<status status="PASS" start="2026-06-28T17:03:43.214833" elapsed="0.000048"/>
</return>
<var>${token}</var>
<doc>Log in with the master password and return the JWT access token.</doc>
<status status="PASS" start="2026-06-28T17:03:43.212283" elapsed="0.002633"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<arg>auth</arg>
<arg>${BASE_URL}</arg>
<arg>headers={'Authorization': 'Bearer ${token}'}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.214989" elapsed="0.000094"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:43.212122" elapsed="0.002994"/>
</branch>
<branch type="ELSE">
<kw name="Create Session" owner="RequestsLibrary">
<arg>auth</arg>
<arg>${BASE_URL}</arg>
<arg>headers={'Authorization': 'Bearer ${TOKEN}'}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.215238" elapsed="0.000086"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:43.215142" elapsed="0.000215"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.205895" elapsed="0.009485"/>
</if>
<doc>Create an authenticated HTTP session. Performs setup if needed, then logs in.
Skips setup/login if already authenticated (suite-level setup done).</doc>
<status status="PASS" start="2026-06-28T17:03:43.204501" elapsed="0.010905"/>
</kw>
<arg>Create Anonymous Session</arg>
<arg>AND</arg>
<arg>Setup Master Password</arg>
<arg>AND</arg>
<arg>Create Authenticated Session</arg>
<doc>Executes all the given keywords in a sequence.</doc>
<status status="PASS" start="2026-06-28T17:03:43.200314" elapsed="0.015119"/>
</kw>
<kw name="Pass Execution" owner="BuiltIn">
<arg>WebSocket ping/pong requires custom keyword library</arg>
<doc>Skips rest of the current test, setup, or teardown with PASS status.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.215516" elapsed="0.000166"/>
</kw>
<kw name="Delete All Sessions" owner="RequestsLibrary" type="TEARDOWN">
<doc>Removes all the session objects</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.215823" elapsed="0.000066"/>
</kw>
<doc>Verify WebSocket heartbeat mechanism.</doc>
<status status="PASS" start="2026-06-28T17:03:43.197326" elapsed="0.018595"/>
</test>
<test id="s1-t4" name="Receive System Notification" line="39">
<kw name="Run Keywords" owner="BuiltIn" type="SETUP">
<kw name="Create Anonymous Session" owner="common">
<kw name="Create Session" owner="RequestsLibrary">
<arg>anon</arg>
<arg>${BASE_URL}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.223647" elapsed="0.000105"/>
</kw>
<doc>Create an unauthenticated HTTP session.</doc>
<status status="PASS" start="2026-06-28T17:03:43.223377" elapsed="0.000431"/>
</kw>
<kw name="Setup Master Password" owner="common">
<kw name="Create Dictionary" owner="BuiltIn">
<var>${payload}</var>
<arg>master_password=${SETUP_PASSWORD}</arg>
<arg>anime_directory=/tmp/aniworld_test_anime</arg>
<arg>name=AniworldTest</arg>
<arg>data_dir=data</arg>
<arg>scheduler_enabled=False</arg>
<arg>logging_level=INFO</arg>
<arg>backup_enabled=False</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.224243" elapsed="0.000183"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/setup</arg>
<arg>json=${payload}</arg>
<arg>expected_status=any</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.224524" elapsed="0.000106"/>
</kw>
<if>
<branch type="IF" condition="'${resp.status_code}' == '429'">
<kw name="Sleep" owner="BuiltIn">
<arg>45s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.224819" elapsed="0.000164"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/setup</arg>
<arg>json=${payload}</arg>
<arg>expected_status=any</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.225062" elapsed="0.000077"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:43.224715" elapsed="0.000460"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.224691" elapsed="0.000515"/>
</if>
<if>
<branch type="IF" condition="'${resp.status_code}' == '429'">
<kw name="Sleep" owner="BuiltIn">
<arg>45s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.225343" elapsed="0.000170"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/setup</arg>
<arg>json=${payload}</arg>
<arg>expected_status=any</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.225715" elapsed="0.000096"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:43.225251" elapsed="0.000600"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.225240" elapsed="0.000641"/>
</if>
<if>
<branch type="IF" condition="'${resp.status_code}' == '400'">
<kw name="Convert String To Json" owner="JSONLibrary">
<var>${json}</var>
<arg>${resp.text}</arg>
<doc>Convert String to JSON object</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.226029" elapsed="0.000081"/>
</kw>
<kw name="Get Value From Json" owner="JSONLibrary">
<var>${detail}</var>
<arg>${json}</arg>
<arg>$.detail</arg>
<doc>Get Value From JSON using JSONPath</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.226184" elapsed="0.000065"/>
</kw>
<if>
<branch type="IF" condition="'${detail}[0]' == 'Master password already configured'">
<return>
<status status="PASS" start="2026-06-28T17:03:43.226358" elapsed="0.000042"/>
</return>
<status status="PASS" start="2026-06-28T17:03:43.226305" elapsed="0.000122"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.226295" elapsed="0.000154"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Setup failed with 400: ${detail}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.226506" elapsed="0.000134"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:43.225930" elapsed="0.000742"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.225919" elapsed="0.000778"/>
</if>
<if>
<branch type="IF" condition="'${resp.status_code}' == '201'">
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${resp.status_code}</arg>
<arg>201</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.226838" elapsed="0.000138"/>
</kw>
<return>
<status status="PASS" start="2026-06-28T17:03:43.227014" elapsed="0.000039"/>
</return>
<status status="PASS" start="2026-06-28T17:03:43.226744" elapsed="0.000335"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.226735" elapsed="0.000366"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Unexpected status ${resp.status_code} from /api/auth/setup</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.227158" elapsed="0.000144"/>
</kw>
<doc>Configure the master password via the setup endpoint.</doc>
<status status="PASS" start="2026-06-28T17:03:43.224018" elapsed="0.003339"/>
</kw>
<kw name="Create Authenticated Session" owner="common">
<kw name="Create Anonymous Session" owner="common">
<kw name="Create Session" owner="RequestsLibrary">
<arg>anon</arg>
<arg>${BASE_URL}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.227881" elapsed="0.000075"/>
</kw>
<doc>Create an unauthenticated HTTP session.</doc>
<status status="PASS" start="2026-06-28T17:03:43.227730" elapsed="0.000267"/>
</kw>
<kw name="Is Auth Configured" owner="common">
<kw name="GET On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/status</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.228259" elapsed="0.000064"/>
</kw>
<kw name="Convert String To Json" owner="JSONLibrary">
<var>${json}</var>
<arg>${resp.text}</arg>
<doc>Convert String to JSON object</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.228401" elapsed="0.000054"/>
</kw>
<kw name="Get Value From Json" owner="JSONLibrary">
<var>${configured}</var>
<arg>${json}</arg>
<arg>$.configured</arg>
<doc>Get Value From JSON using JSONPath</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.228531" elapsed="0.000099"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${configured_val}</var>
<arg>${configured}[0]</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.228748" elapsed="0.000154"/>
</kw>
<return>
<value>${configured_val}</value>
<status status="PASS" start="2026-06-28T17:03:43.228945" elapsed="0.000044"/>
</return>
<var>${configured}</var>
<doc>Check if the master password has already been configured.</doc>
<status status="PASS" start="2026-06-28T17:03:43.228094" elapsed="0.000932"/>
</kw>
<if>
<branch type="IF" condition="not ${configured}">
<kw name="Setup Master Password" owner="common">
<kw name="Create Dictionary" owner="BuiltIn">
<var>${payload}</var>
<arg>master_password=${SETUP_PASSWORD}</arg>
<arg>anime_directory=/tmp/aniworld_test_anime</arg>
<arg>name=AniworldTest</arg>
<arg>data_dir=data</arg>
<arg>scheduler_enabled=False</arg>
<arg>logging_level=INFO</arg>
<arg>backup_enabled=False</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.229471" elapsed="0.000170"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/setup</arg>
<arg>json=${payload}</arg>
<arg>expected_status=any</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.229740" elapsed="0.000084"/>
</kw>
<if>
<branch type="IF" condition="'${resp.status_code}' == '429'">
<kw name="Sleep" owner="BuiltIn">
<arg>45s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.229985" elapsed="0.000163"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/setup</arg>
<arg>json=${payload}</arg>
<arg>expected_status=any</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.230226" elapsed="0.000077"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:43.229889" elapsed="0.000449"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.229876" elapsed="0.000489"/>
</if>
<if>
<branch type="IF" condition="'${resp.status_code}' == '429'">
<kw name="Sleep" owner="BuiltIn">
<arg>45s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.230497" elapsed="0.000151"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/setup</arg>
<arg>json=${payload}</arg>
<arg>expected_status=any</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.230728" elapsed="0.000076"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:43.230406" elapsed="0.000433"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.230396" elapsed="0.000469"/>
</if>
<if>
<branch type="IF" condition="'${resp.status_code}' == '400'">
<kw name="Convert String To Json" owner="JSONLibrary">
<var>${json}</var>
<arg>${resp.text}</arg>
<doc>Convert String to JSON object</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.230997" elapsed="0.000053"/>
</kw>
<kw name="Get Value From Json" owner="JSONLibrary">
<var>${detail}</var>
<arg>${json}</arg>
<arg>$.detail</arg>
<doc>Get Value From JSON using JSONPath</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.231119" elapsed="0.000063"/>
</kw>
<if>
<branch type="IF" condition="'${detail}[0]' == 'Master password already configured'">
<return>
<status status="PASS" start="2026-06-28T17:03:43.231285" elapsed="0.000034"/>
</return>
<status status="PASS" start="2026-06-28T17:03:43.231236" elapsed="0.000108"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.231227" elapsed="0.000138"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Setup failed with 400: ${detail}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.231420" elapsed="0.000125"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:43.230909" elapsed="0.000783"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.230899" elapsed="0.000833"/>
</if>
<if>
<branch type="IF" condition="'${resp.status_code}' == '201'">
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${resp.status_code}</arg>
<arg>201</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.231886" elapsed="0.000144"/>
</kw>
<return>
<status status="PASS" start="2026-06-28T17:03:43.232071" elapsed="0.000064"/>
</return>
<status status="PASS" start="2026-06-28T17:03:43.231778" elapsed="0.000383"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.231767" elapsed="0.000417"/>
</if>
<kw name="Fail" owner="BuiltIn">
<arg>Unexpected status ${resp.status_code} from /api/auth/setup</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.232245" elapsed="0.000127"/>
</kw>
<doc>Configure the master password via the setup endpoint.</doc>
<status status="PASS" start="2026-06-28T17:03:43.229304" elapsed="0.003106"/>
</kw>
<kw name="Login And Get Token" owner="common">
<kw name="Create Dictionary" owner="BuiltIn">
<var>${payload}</var>
<arg>password=${SETUP_PASSWORD}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.232764" elapsed="0.000135"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/login</arg>
<arg>json=${payload}</arg>
<arg>expected_status=any</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.232977" elapsed="0.000076"/>
</kw>
<if>
<branch type="IF" condition="'${resp.status_code}' == '429'">
<kw name="Sleep" owner="BuiltIn">
<arg>6s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.233222" elapsed="0.000145"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/login</arg>
<arg>json=${payload}</arg>
<arg>expected_status=any</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.233446" elapsed="0.000077"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:43.233113" elapsed="0.000446"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.233103" elapsed="0.000486"/>
</if>
<if>
<branch type="IF" condition="'${resp.status_code}' != '200'">
<kw name="Convert String To Json" owner="JSONLibrary">
<var>${json}</var>
<arg>${resp.text}</arg>
<doc>Convert String to JSON object</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.233731" elapsed="0.000056"/>
</kw>
<kw name="Get Value From Json" owner="JSONLibrary">
<var>${detail}</var>
<arg>${json}</arg>
<arg>$.detail</arg>
<doc>Get Value From JSON using JSONPath</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.233857" elapsed="0.000062"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${detail_val}</var>
<arg>${detail}[0]</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.233991" elapsed="0.000120"/>
</kw>
<kw name="Fail" owner="BuiltIn">
<arg>Login failed with ${resp.status_code}: ${detail_val}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.234180" elapsed="0.000116"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:43.233633" elapsed="0.000692"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.233623" elapsed="0.000728"/>
</if>
<kw name="Convert String To Json" owner="JSONLibrary">
<var>${json}</var>
<arg>${resp.text}</arg>
<doc>Convert String to JSON object</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.234407" elapsed="0.000054"/>
</kw>
<kw name="Get Value From Json" owner="JSONLibrary">
<var>${token}</var>
<arg>${json}</arg>
<arg>$.access_token</arg>
<doc>Get Value From JSON using JSONPath</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.234528" elapsed="0.000059"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${token_str}</var>
<arg>${token}[0]</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.234657" elapsed="0.000122"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${TOKEN}</arg>
<arg>${token_str}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.234869" elapsed="0.000164"/>
</kw>
<return>
<value>${token_str}</value>
<status status="PASS" start="2026-06-28T17:03:43.235071" elapsed="0.000039"/>
</return>
<var>${token}</var>
<doc>Log in with the master password and return the JWT access token.</doc>
<status status="PASS" start="2026-06-28T17:03:43.232572" elapsed="0.002574"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<arg>auth</arg>
<arg>${BASE_URL}</arg>
<arg>headers={'Authorization': 'Bearer ${token}'}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.235218" elapsed="0.000090"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:43.229084" elapsed="0.006256"/>
</branch>
<branch type="ELSE IF" condition="'${TOKEN}' == '${EMPTY}'">
<kw name="Login And Get Token" owner="common">
<kw name="Create Dictionary" owner="BuiltIn">
<var>${payload}</var>
<arg>password=${SETUP_PASSWORD}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.235813" elapsed="0.000181"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/login</arg>
<arg>json=${payload}</arg>
<arg>expected_status=any</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.236071" elapsed="0.000124"/>
</kw>
<if>
<branch type="IF" condition="'${resp.status_code}' == '429'">
<kw name="Sleep" owner="BuiltIn">
<arg>6s</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.236403" elapsed="0.000194"/>
</kw>
<kw name="POST On Session" owner="RequestsLibrary">
<var>${resp}</var>
<arg>anon</arg>
<arg>/api/auth/login</arg>
<arg>json=${payload}</arg>
<arg>expected_status=any</arg>
<doc>Sends a POST request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.236673" elapsed="0.000166"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:43.236258" elapsed="0.000618"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.236247" elapsed="0.000657"/>
</if>
<if>
<branch type="IF" condition="'${resp.status_code}' != '200'">
<kw name="Convert String To Json" owner="JSONLibrary">
<var>${json}</var>
<arg>${resp.text}</arg>
<doc>Convert String to JSON object</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.237080" elapsed="0.000096"/>
</kw>
<kw name="Get Value From Json" owner="JSONLibrary">
<var>${detail}</var>
<arg>${json}</arg>
<arg>$.detail</arg>
<doc>Get Value From JSON using JSONPath</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.237245" elapsed="0.000110"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${detail_val}</var>
<arg>${detail}[0]</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.237425" elapsed="0.000168"/>
</kw>
<kw name="Fail" owner="BuiltIn">
<arg>Login failed with ${resp.status_code}: ${detail_val}</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.237662" elapsed="0.000127"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:43.236945" elapsed="0.000874"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.236936" elapsed="0.001007"/>
</if>
<kw name="Convert String To Json" owner="JSONLibrary">
<var>${json}</var>
<arg>${resp.text}</arg>
<doc>Convert String to JSON object</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.238021" elapsed="0.000065"/>
</kw>
<kw name="Get Value From Json" owner="JSONLibrary">
<var>${token}</var>
<arg>${json}</arg>
<arg>$.access_token</arg>
<doc>Get Value From JSON using JSONPath</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.238162" elapsed="0.000066"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${token_str}</var>
<arg>${token}[0]</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.238304" elapsed="0.000132"/>
</kw>
<kw name="Set Suite Variable" owner="BuiltIn">
<arg>${TOKEN}</arg>
<arg>${token_str}</arg>
<doc>Makes a variable available everywhere within the scope of the current suite.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.238516" elapsed="0.000135"/>
</kw>
<return>
<value>${token_str}</value>
<status status="PASS" start="2026-06-28T17:03:43.238690" elapsed="0.000049"/>
</return>
<var>${token}</var>
<doc>Log in with the master password and return the JWT access token.</doc>
<status status="PASS" start="2026-06-28T17:03:43.235545" elapsed="0.003230"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<arg>auth</arg>
<arg>${BASE_URL}</arg>
<arg>headers={'Authorization': 'Bearer ${token}'}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.238847" elapsed="0.000087"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:43.235367" elapsed="0.003600"/>
</branch>
<branch type="ELSE">
<kw name="Create Session" owner="RequestsLibrary">
<arg>auth</arg>
<arg>${BASE_URL}</arg>
<arg>headers={'Authorization': 'Bearer ${TOKEN}'}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.239081" elapsed="0.000080"/>
</kw>
<status status="PASS" start="2026-06-28T17:03:43.238993" elapsed="0.000200"/>
</branch>
<status status="PASS" start="2026-06-28T17:03:43.229073" elapsed="0.010143"/>
</if>
<doc>Create an authenticated HTTP session. Performs setup if needed, then logs in.
Skips setup/login if already authenticated (suite-level setup done).</doc>
<status status="PASS" start="2026-06-28T17:03:43.227512" elapsed="0.011726"/>
</kw>
<arg>Create Anonymous Session</arg>
<arg>AND</arg>
<arg>Setup Master Password</arg>
<arg>AND</arg>
<arg>Create Authenticated Session</arg>
<doc>Executes all the given keywords in a sequence.</doc>
<status status="PASS" start="2026-06-28T17:03:43.222937" elapsed="0.016327"/>
</kw>
<kw name="Pass Execution" owner="BuiltIn">
<arg>WebSocket notification requires custom keyword library</arg>
<doc>Skips rest of the current test, setup, or teardown with PASS status.</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.239346" elapsed="0.000142"/>
</kw>
<kw name="Delete All Sessions" owner="RequestsLibrary" type="TEARDOWN">
<doc>Removes all the session objects</doc>
<status status="NOT RUN" start="2026-06-28T17:03:43.239610" elapsed="0.000060"/>
</kw>
<doc>Trigger an action that emits a system message and verify receipt.</doc>
<status status="PASS" start="2026-06-28T17:03:43.220498" elapsed="0.019212"/>
</test>
<doc>WebSocket API tests for Aniworld.
Covers connection, room subscription, ping/pong, and notifications.</doc>
<status status="PASS" start="2026-06-28T17:03:42.507180" elapsed="0.737242"/>
</suite>
<statistics>
<total>
<stat pass="4" fail="0" skip="0">All Tests</stat>
</total>
<tag>
</tag>
<suite>
<stat name="Websocket" id="s1" pass="4" fail="0" skip="0">Websocket</stat>
</suite>
</statistics>
<errors>
</errors>
</robot>