Files
BanGUI/output.xml
2026-05-05 19:51:14 +02:00

900 lines
35 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<robot generator="Robot 7.4.2 (Python 3.12.3 on linux)" generated="2026-05-05T19:08:15.507887" rpa="false" schemaversion="5">
<suite id="s1" name="05 Setup" source="/home/lukas/Volume/repo/BanGUI/e2e/tests/05_setup.robot">
<kw name="Wait For Backend Health" owner="common" type="SETUP">
<kw name="Evaluate" owner="BuiltIn">
<var>${deadline}</var>
<arg>time.time() + ${timeout}</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:15.740159" elapsed="0.000384"/>
</kw>
<while condition="True">
<iter>
<kw name="Evaluate" owner="BuiltIn">
<var>${now}</var>
<arg>time.time()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:15.741110" elapsed="0.000327"/>
</kw>
<if>
<branch type="IF" condition="${now} &gt;= ${deadline}">
<kw name="Fail" owner="BuiltIn">
<arg>Backend did not become healthy within ${timeout} seconds</arg>
<doc>Fails the test with the given message and optionally alters its tags.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:15.741774" elapsed="0.000221"/>
</kw>
<status status="PASS" start="2026-05-05T19:08:15.741588" elapsed="0.000468"/>
</branch>
<status status="NOT RUN" start="2026-05-05T19:08:15.741558" elapsed="0.000550"/>
</if>
<kw name="GET" owner="RequestsLibrary">
<var>${response}</var>
<arg>${BACKEND_URL}/api/health</arg>
<arg>expected_status=200</arg>
<doc>Sends a GET request.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:15.742209" elapsed="0.000117"/>
</kw>
<if>
<branch type="IF" condition="${response.status} == 200">
<break>
<status status="PASS" start="2026-05-05T19:08:15.742528" elapsed="0.000068"/>
</break>
<status status="PASS" start="2026-05-05T19:08:15.742424" elapsed="0.000219"/>
</branch>
<status status="NOT RUN" start="2026-05-05T19:08:15.742404" elapsed="0.000277"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<arg>${interval}</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:15.742774" elapsed="0.000218"/>
</kw>
<status status="NOT RUN" start="2026-05-05T19:08:15.740686" elapsed="0.002366"/>
</iter>
<status status="NOT RUN" start="2026-05-05T19:08:15.740683" elapsed="0.002414"/>
</while>
<kw name="Log" owner="BuiltIn">
<arg>Backend is healthy.</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:15.743215" elapsed="0.000260"/>
</kw>
<status status="PASS" start="2026-05-05T19:08:15.739266" elapsed="0.004473"/>
</kw>
<test id="s1-t1" name="Setup Page Renders All Form Fields" line="8">
<kw name="New Browser" owner="Browser">
<arg>chromium</arg>
<arg>headless=${TRUE}</arg>
<tag>BrowserControl</tag>
<tag>Setter</tag>
<doc>Create a new playwright Browser with specified options.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:15.745093" elapsed="0.000515"/>
</kw>
<kw name="Go To" owner="Browser">
<arg>${FRONTEND_URL}/setup</arg>
<tag>BrowserControl</tag>
<tag>Setter</tag>
<doc>Navigates to the given ``url``.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:15.745776" elapsed="0.000361"/>
</kw>
<kw name="Wait For Elements State" owner="Browser">
<arg>css=form</arg>
<arg>visible</arg>
<arg>timeout=15s</arg>
<tag>PageContent</tag>
<tag>Wait</tag>
<doc>Waits for the element found by ``selector`` to satisfy state option.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:15.746289" elapsed="0.000619"/>
</kw>
<kw name="Get Element States" owner="Browser">
<arg>css=input[autocomplete="username"]</arg>
<arg>contains</arg>
<arg>hidden</arg>
<tag>Assertion</tag>
<tag>Getter</tag>
<tag>PageContent</tag>
<doc>Get the active states from the element found by ``selector``.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:15.747066" elapsed="0.000378"/>
</kw>
<kw name="Wait For Elements State" owner="Browser">
<arg>css=[aria-label="Master Password"]</arg>
<arg>visible</arg>
<arg>timeout=5s</arg>
<tag>PageContent</tag>
<tag>Wait</tag>
<doc>Waits for the element found by ``selector`` to satisfy state option.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:15.747589" elapsed="0.000376"/>
</kw>
<kw name="Wait For Elements State" owner="Browser">
<arg>css=[aria-label="Confirm Password"]</arg>
<arg>visible</arg>
<arg>timeout=5s</arg>
<tag>PageContent</tag>
<tag>Wait</tag>
<doc>Waits for the element found by ``selector`` to satisfy state option.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:15.748120" elapsed="0.000348"/>
</kw>
<kw name="Wait For Elements State" owner="Browser">
<arg>css=[aria-label="Database Path"]</arg>
<arg>visible</arg>
<arg>timeout=5s</arg>
<tag>PageContent</tag>
<tag>Wait</tag>
<doc>Waits for the element found by ``selector`` to satisfy state option.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:15.748600" elapsed="0.000364"/>
</kw>
<kw name="Wait For Elements State" owner="Browser">
<arg>css=[aria-label="fail2ban Socket Path"]</arg>
<arg>visible</arg>
<arg>timeout=5s</arg>
<tag>PageContent</tag>
<tag>Wait</tag>
<doc>Waits for the element found by ``selector`` to satisfy state option.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:15.749110" elapsed="0.000356"/>
</kw>
<kw name="Wait For Elements State" owner="Browser">
<arg>css=[aria-label="Timezone"]</arg>
<arg>visible</arg>
<arg>timeout=5s</arg>
<tag>PageContent</tag>
<tag>Wait</tag>
<doc>Waits for the element found by ``selector`` to satisfy state option.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:15.749601" elapsed="0.000379"/>
</kw>
<kw name="Wait For Elements State" owner="Browser">
<arg>css=[aria-label="Session Duration (minutes)"]</arg>
<arg>visible</arg>
<arg>timeout=5s</arg>
<tag>PageContent</tag>
<tag>Wait</tag>
<doc>Waits for the element found by ``selector`` to satisfy state option.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:15.750118" elapsed="0.000351"/>
</kw>
<kw name="Wait For Elements State" owner="Browser">
<arg>css=button[type="submit"]</arg>
<arg>visible</arg>
<arg>timeout=5s</arg>
<tag>PageContent</tag>
<tag>Wait</tag>
<doc>Waits for the element found by ``selector`` to satisfy state option.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:15.750597" elapsed="0.000349"/>
</kw>
<kw name="Get Text" owner="Browser">
<arg>css=button[type="submit"]</arg>
<arg>equals</arg>
<arg>Complete Setup</arg>
<tag>Assertion</tag>
<tag>Getter</tag>
<tag>PageContent</tag>
<doc>Returns text attribute of the element found by ``selector``.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:15.751090" elapsed="0.003246"/>
</kw>
<kw name="Close Browser" owner="Browser">
<tag>BrowserControl</tag>
<tag>Setter</tag>
<doc>Closes the current browser.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:15.754577" elapsed="0.000388"/>
</kw>
<msg time="2026-05-05T19:08:15.762296" level="INFO">Starting Browser process /home/lukas/Volume/repo/BanGUI/.venv/lib/python3.12/site-packages/Browser/wrapper/index.js using at 127.0.0.1:34013</msg>
<doc>Verify all setup wizard fields are present and labelled correctly.</doc>
<status status="PASS" start="2026-05-05T19:08:15.744062" elapsed="0.011088"/>
</test>
<test id="s1-t2" name="Password Strength Indicator Updates On Input" line="31">
<kw name="New Browser" owner="Browser">
<arg>chromium</arg>
<arg>headless=${TRUE}</arg>
<tag>BrowserControl</tag>
<tag>Setter</tag>
<doc>Create a new playwright Browser with specified options.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.310648" elapsed="0.000409"/>
</kw>
<kw name="Go To" owner="Browser">
<arg>${FRONTEND_URL}/setup</arg>
<tag>BrowserControl</tag>
<tag>Setter</tag>
<doc>Navigates to the given ``url``.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.311180" elapsed="0.000268"/>
</kw>
<kw name="Wait For Elements State" owner="Browser">
<arg>css=input[aria-label="Master Password"]</arg>
<arg>visible</arg>
<arg>timeout=15s</arg>
<tag>PageContent</tag>
<tag>Wait</tag>
<doc>Waits for the element found by ``selector`` to satisfy state option.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.311537" elapsed="0.000286"/>
</kw>
<kw name="Get Elements" owner="Browser">
<var>${segments}</var>
<arg>css=.passwordStrengthSegment</arg>
<tag>Getter</tag>
<tag>PageContent</tag>
<doc>Returns a reference to Playwright [https://playwright.dev/docs/api/class-locator|Locator]
for all matched elements by ``selector``.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.311913" elapsed="0.000414"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${active_count}</var>
<arg>0</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.312456" elapsed="0.000204"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get Attribute" owner="Browser">
<var>${classes}</var>
<arg>${seg}</arg>
<arg>class</arg>
<tag>Assertion</tag>
<tag>Getter</tag>
<tag>PageContent</tag>
<doc>Returns the HTML ``attribute`` of the element found by ``selector``.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.313169" elapsed="0.000313"/>
</kw>
<if>
<branch type="IF" condition="&quot;Active&quot; in &quot;&quot;&quot;${classes}&quot;&quot;&quot;">
<kw name="Evaluate" owner="BuiltIn">
<var>${active_count}</var>
<arg>${active_count} + 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.313783" elapsed="0.000196"/>
</kw>
<status status="PASS" start="2026-05-05T19:08:16.313609" elapsed="0.000430"/>
</branch>
<status status="PASS" start="2026-05-05T19:08:16.313586" elapsed="0.000492"/>
</if>
<var name="${seg}"/>
<status status="PASS" start="2026-05-05T19:08:16.313007" elapsed="0.001092"/>
</iter>
<var>${seg}</var>
<value>@{segments}</value>
<status status="PASS" start="2026-05-05T19:08:16.312756" elapsed="0.001379"/>
</for>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${active_count}</arg>
<arg>0</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.314223" elapsed="0.000152"/>
</kw>
<kw name="Fill Text" owner="Browser">
<arg>css=input[aria-label="Master Password"]</arg>
<arg>WeakPass</arg>
<tag>PageContent</tag>
<tag>Setter</tag>
<doc>Clears and fills the given ``txt`` into the text field found by ``selector``.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.314455" elapsed="0.000211"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${active_count}</var>
<arg>0</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.314754" elapsed="0.000162"/>
</kw>
<kw name="Get Elements" owner="Browser">
<var>${segments}</var>
<arg>css=.passwordStrengthSegment</arg>
<tag>Getter</tag>
<tag>PageContent</tag>
<doc>Returns a reference to Playwright [https://playwright.dev/docs/api/class-locator|Locator]
for all matched elements by ``selector``.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.314994" elapsed="0.000204"/>
</kw>
<for flavor="IN">
<iter>
<kw name="Get Attribute" owner="Browser">
<var>${classes}</var>
<arg>${seg}</arg>
<arg>class</arg>
<tag>Assertion</tag>
<tag>Getter</tag>
<tag>PageContent</tag>
<doc>Returns the HTML ``attribute`` of the element found by ``selector``.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.315479" elapsed="0.000193"/>
</kw>
<if>
<branch type="IF" condition="&quot;Active&quot; in &quot;&quot;&quot;${classes}&quot;&quot;&quot;">
<kw name="Evaluate" owner="BuiltIn">
<var>${active_count}</var>
<arg>${active_count} + 1</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.315871" elapsed="0.000138"/>
</kw>
<status status="PASS" start="2026-05-05T19:08:16.315745" elapsed="0.000307"/>
</branch>
<status status="PASS" start="2026-05-05T19:08:16.315731" elapsed="0.000351"/>
</if>
<var name="${seg}"/>
<status status="PASS" start="2026-05-05T19:08:16.315383" elapsed="0.000717"/>
</iter>
<var>${seg}</var>
<value>@{segments}</value>
<status status="PASS" start="2026-05-05T19:08:16.315254" elapsed="0.000877"/>
</for>
<kw name="Should Be Equal As Integers" owner="BuiltIn">
<arg>${active_count}</arg>
<arg>1</arg>
<doc>Fails if objects are unequal after converting them to integers.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.316210" elapsed="0.000163"/>
</kw>
<kw name="Close Browser" owner="Browser">
<tag>BrowserControl</tag>
<tag>Setter</tag>
<doc>Closes the current browser.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.316448" elapsed="0.000183"/>
</kw>
<doc>The four-segment strength bar and rule count reflect password complexity.</doc>
<status status="PASS" start="2026-05-05T19:08:16.308758" elapsed="0.007965"/>
</test>
<test id="s1-t3" name="Password Mismatch Shows Validation Error" line="62">
<kw name="New Browser" owner="Browser">
<arg>chromium</arg>
<arg>headless=${TRUE}</arg>
<tag>BrowserControl</tag>
<tag>Setter</tag>
<doc>Create a new playwright Browser with specified options.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.326594" elapsed="0.000369"/>
</kw>
<kw name="Go To" owner="Browser">
<arg>${FRONTEND_URL}/setup</arg>
<tag>BrowserControl</tag>
<tag>Setter</tag>
<doc>Navigates to the given ``url``.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.327084" elapsed="0.000236"/>
</kw>
<kw name="Wait For Elements State" owner="Browser">
<arg>css=input[aria-label="Master Password"]</arg>
<arg>visible</arg>
<arg>timeout=15s</arg>
<tag>PageContent</tag>
<tag>Wait</tag>
<doc>Waits for the element found by ``selector`` to satisfy state option.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.327412" elapsed="0.000268"/>
</kw>
<kw name="Fill Text" owner="Browser">
<arg>css=input[aria-label="Master Password"]</arg>
<arg>Hallo123!</arg>
<tag>PageContent</tag>
<tag>Setter</tag>
<doc>Clears and fills the given ``txt`` into the text field found by ``selector``.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.327775" elapsed="0.000231"/>
</kw>
<kw name="Fill Text" owner="Browser">
<arg>css=input[aria-label="Confirm Password"]</arg>
<arg>Different123!</arg>
<tag>PageContent</tag>
<tag>Setter</tag>
<doc>Clears and fills the given ``txt`` into the text field found by ``selector``.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.328100" elapsed="0.000248"/>
</kw>
<kw name="Click" owner="Browser">
<arg>css=button[type="submit"]</arg>
<tag>PageContent</tag>
<tag>Setter</tag>
<doc>Simulates mouse click on the element found by ``selector``.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.328459" elapsed="0.000240"/>
</kw>
<kw name="Wait For Elements State" owner="Browser">
<arg>css=[aria-label="Confirm Password"]</arg>
<arg>attached</arg>
<arg>timeout=5s</arg>
<tag>PageContent</tag>
<tag>Wait</tag>
<doc>Waits for the element found by ``selector`` to satisfy state option.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.328786" elapsed="0.000260"/>
</kw>
<kw name="Get Text" owner="Browser">
<var>${msg}</var>
<arg>css=[aria-label="Confirm Password"]/ancestor::*[contains(@class,"field")]//*[contains(@class,"validationMessage")]</arg>
<tag>Assertion</tag>
<tag>Getter</tag>
<tag>PageContent</tag>
<doc>Returns text attribute of the element found by ``selector``.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.329139" elapsed="0.000224"/>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${msg}</arg>
<arg>Passwords do not match.</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.329449" elapsed="0.000162"/>
</kw>
<kw name="Close Browser" owner="Browser">
<tag>BrowserControl</tag>
<tag>Setter</tag>
<doc>Closes the current browser.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.329689" elapsed="0.000183"/>
</kw>
<doc>Submitting with non-matching passwords surfaces an error on Confirm Password.</doc>
<status status="PASS" start="2026-05-05T19:08:16.324720" elapsed="0.005238"/>
</test>
<test id="s1-t4" name="Empty Required Fields Show Validation Errors" line="78">
<kw name="New Browser" owner="Browser">
<arg>chromium</arg>
<arg>headless=${TRUE}</arg>
<tag>BrowserControl</tag>
<tag>Setter</tag>
<doc>Create a new playwright Browser with specified options.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.337764" elapsed="0.000617"/>
</kw>
<kw name="Go To" owner="Browser">
<arg>${FRONTEND_URL}/setup</arg>
<tag>BrowserControl</tag>
<tag>Setter</tag>
<doc>Navigates to the given ``url``.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.339155" elapsed="0.000380"/>
</kw>
<kw name="Wait For Elements State" owner="Browser">
<arg>css=input[aria-label="Master Password"]</arg>
<arg>visible</arg>
<arg>timeout=15s</arg>
<tag>PageContent</tag>
<tag>Wait</tag>
<doc>Waits for the element found by ``selector`` to satisfy state option.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.339630" elapsed="0.000295"/>
</kw>
<kw name="Click" owner="Browser">
<arg>css=button[type="submit"]</arg>
<tag>PageContent</tag>
<tag>Setter</tag>
<doc>Simulates mouse click on the element found by ``selector``.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.340021" elapsed="0.000220"/>
</kw>
<kw name="Wait For Elements State" owner="Browser">
<arg>css=[aria-label="Master Password"]</arg>
<arg>attached</arg>
<arg>timeout=5s</arg>
<tag>PageContent</tag>
<tag>Wait</tag>
<doc>Waits for the element found by ``selector`` to satisfy state option.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.340332" elapsed="0.000283"/>
</kw>
<kw name="Get Text" owner="Browser">
<var>${msg}</var>
<arg>css=[aria-label="Master Password"]/ancestor::*[contains(@class,"field")]//*[contains(@class,"validationMessage")]</arg>
<tag>Assertion</tag>
<tag>Getter</tag>
<tag>PageContent</tag>
<doc>Returns text attribute of the element found by ``selector``.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.340716" elapsed="0.000225"/>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${msg}</arg>
<arg>Password is required.</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.341034" elapsed="0.000150"/>
</kw>
<kw name="Wait For Elements State" owner="Browser">
<arg>css=[aria-label="Database Path"]</arg>
<arg>attached</arg>
<arg>timeout=5s</arg>
<tag>PageContent</tag>
<tag>Wait</tag>
<doc>Waits for the element found by ``selector`` to satisfy state option.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.341263" elapsed="0.000230"/>
</kw>
<kw name="Get Text" owner="Browser">
<var>${msg}</var>
<arg>css=[aria-label="Database Path"]/ancestor::*[contains(@class,"field")]//*[contains(@class,"validationMessage")]</arg>
<tag>Assertion</tag>
<tag>Getter</tag>
<tag>PageContent</tag>
<doc>Returns text attribute of the element found by ``selector``.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.341583" elapsed="0.000230"/>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${msg}</arg>
<arg>Database path is required.</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.341894" elapsed="0.000174"/>
</kw>
<kw name="Wait For Elements State" owner="Browser">
<arg>css=[aria-label="fail2ban Socket Path"]</arg>
<arg>attached</arg>
<arg>timeout=5s</arg>
<tag>PageContent</tag>
<tag>Wait</tag>
<doc>Waits for the element found by ``selector`` to satisfy state option.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.342145" elapsed="0.000233"/>
</kw>
<kw name="Get Text" owner="Browser">
<var>${msg}</var>
<arg>css=[aria-label="fail2ban Socket Path"]/ancestor::*[contains(@class,"field")]//*[contains(@class,"validationMessage")]</arg>
<tag>Assertion</tag>
<tag>Getter</tag>
<tag>PageContent</tag>
<doc>Returns text attribute of the element found by ``selector``.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.342462" elapsed="0.000205"/>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${msg}</arg>
<arg>Socket path is required.</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.342743" elapsed="0.000137"/>
</kw>
<kw name="Close Browser" owner="Browser">
<tag>BrowserControl</tag>
<tag>Setter</tag>
<doc>Closes the current browser.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.342953" elapsed="0.000209"/>
</kw>
<doc>Submitting with blank required fields shows field-level error messages.</doc>
<status status="PASS" start="2026-05-05T19:08:16.333829" elapsed="0.009421"/>
</test>
<test id="s1-t5" name="Invalid Session Duration Shows Validation Error" line="100">
<kw name="New Browser" owner="Browser">
<arg>chromium</arg>
<arg>headless=${TRUE}</arg>
<tag>BrowserControl</tag>
<tag>Setter</tag>
<doc>Create a new playwright Browser with specified options.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.348383" elapsed="0.000370"/>
</kw>
<kw name="Go To" owner="Browser">
<arg>${FRONTEND_URL}/setup</arg>
<tag>BrowserControl</tag>
<tag>Setter</tag>
<doc>Navigates to the given ``url``.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.348871" elapsed="0.000241"/>
</kw>
<kw name="Wait For Elements State" owner="Browser">
<arg>css=input[aria-label="Master Password"]</arg>
<arg>visible</arg>
<arg>timeout=15s</arg>
<tag>PageContent</tag>
<tag>Wait</tag>
<doc>Waits for the element found by ``selector`` to satisfy state option.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.349206" elapsed="0.000282"/>
</kw>
<kw name="Fill Text" owner="Browser">
<arg>css=input[aria-label="Master Password"]</arg>
<arg>Hallo123!</arg>
<tag>PageContent</tag>
<tag>Setter</tag>
<doc>Clears and fills the given ``txt`` into the text field found by ``selector``.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.349584" elapsed="0.000216"/>
</kw>
<kw name="Fill Text" owner="Browser">
<arg>css=input[aria-label="Confirm Password"]</arg>
<arg>Hallo123!</arg>
<tag>PageContent</tag>
<tag>Setter</tag>
<doc>Clears and fills the given ``txt`` into the text field found by ``selector``.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.349885" elapsed="0.000210"/>
</kw>
<kw name="Fill Text" owner="Browser">
<arg>css=input[aria-label="Database Path"]</arg>
<arg>bangui.db</arg>
<tag>PageContent</tag>
<tag>Setter</tag>
<doc>Clears and fills the given ``txt`` into the text field found by ``selector``.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.350176" elapsed="0.000203"/>
</kw>
<kw name="Fill Text" owner="Browser">
<arg>css=input[aria-label="fail2ban Socket Path"]</arg>
<arg>/var/run/fail2ban/fail2ban.sock</arg>
<tag>PageContent</tag>
<tag>Setter</tag>
<doc>Clears and fills the given ``txt`` into the text field found by ``selector``.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.350456" elapsed="0.000188"/>
</kw>
<kw name="Fill Text" owner="Browser">
<arg>css=input[aria-label="Session Duration (minutes)"]</arg>
<arg>0</arg>
<tag>PageContent</tag>
<tag>Setter</tag>
<doc>Clears and fills the given ``txt`` into the text field found by ``selector``.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.350721" elapsed="0.000220"/>
</kw>
<kw name="Click" owner="Browser">
<arg>css=button[type="submit"]</arg>
<tag>PageContent</tag>
<tag>Setter</tag>
<doc>Simulates mouse click on the element found by ``selector``.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.351058" elapsed="0.000285"/>
</kw>
<kw name="Wait For Elements State" owner="Browser">
<arg>css=[aria-label="Session Duration (minutes)"]</arg>
<arg>attached</arg>
<arg>timeout=5s</arg>
<tag>PageContent</tag>
<tag>Wait</tag>
<doc>Waits for the element found by ``selector`` to satisfy state option.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.351500" elapsed="0.000444"/>
</kw>
<kw name="Get Text" owner="Browser">
<var>${msg}</var>
<arg>css=[aria-label="Session Duration (minutes)"]/ancestor::*[contains(@class,"field")]//*[contains(@class,"validationMessage")]</arg>
<tag>Assertion</tag>
<tag>Getter</tag>
<tag>PageContent</tag>
<doc>Returns text attribute of the element found by ``selector``.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.352094" elapsed="0.000361"/>
</kw>
<kw name="Should Be Equal As Strings" owner="BuiltIn">
<arg>${msg}</arg>
<arg>Session duration must be at least 1 minute.</arg>
<doc>Fails if objects are unequal after converting them to strings.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.352673" elapsed="0.000368"/>
</kw>
<kw name="Close Browser" owner="Browser">
<tag>BrowserControl</tag>
<tag>Setter</tag>
<doc>Closes the current browser.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.353712" elapsed="0.000212"/>
</kw>
<doc>Session duration below 1 minute triggers a validation error.</doc>
<status status="PASS" start="2026-05-05T19:08:16.346640" elapsed="0.007391"/>
</test>
<test id="s1-t6" name="Incomplete Password Shows Complexity Error" line="120">
<kw name="New Browser" owner="Browser">
<arg>chromium</arg>
<arg>headless=${TRUE}</arg>
<tag>BrowserControl</tag>
<tag>Setter</tag>
<doc>Create a new playwright Browser with specified options.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.360793" elapsed="0.000405"/>
</kw>
<kw name="Go To" owner="Browser">
<arg>${FRONTEND_URL}/setup</arg>
<tag>BrowserControl</tag>
<tag>Setter</tag>
<doc>Navigates to the given ``url``.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.361312" elapsed="0.000247"/>
</kw>
<kw name="Wait For Elements State" owner="Browser">
<arg>css=input[aria-label="Master Password"]</arg>
<arg>visible</arg>
<arg>timeout=15s</arg>
<tag>PageContent</tag>
<tag>Wait</tag>
<doc>Waits for the element found by ``selector`` to satisfy state option.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.361647" elapsed="0.000293"/>
</kw>
<kw name="Fill Text" owner="Browser">
<arg>css=input[aria-label="Master Password"]</arg>
<arg>short</arg>
<tag>PageContent</tag>
<tag>Setter</tag>
<doc>Clears and fills the given ``txt`` into the text field found by ``selector``.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.362037" elapsed="0.000214"/>
</kw>
<kw name="Click" owner="Browser">
<arg>css=button[type="submit"]</arg>
<tag>PageContent</tag>
<tag>Setter</tag>
<doc>Simulates mouse click on the element found by ``selector``.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.362335" elapsed="0.000206"/>
</kw>
<kw name="Wait For Elements State" owner="Browser">
<arg>css=[aria-label="Master Password"]</arg>
<arg>attached</arg>
<arg>timeout=5s</arg>
<tag>PageContent</tag>
<tag>Wait</tag>
<doc>Waits for the element found by ``selector`` to satisfy state option.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.362621" elapsed="0.000231"/>
</kw>
<kw name="Get Text" owner="Browser">
<var>${msg}</var>
<arg>css=[aria-label="Master Password"]/ancestor::*[contains(@class,"field")]//*[contains(@class,"validationMessage")]</arg>
<tag>Assertion</tag>
<tag>Getter</tag>
<tag>PageContent</tag>
<doc>Returns text attribute of the element found by ``selector``.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.362936" elapsed="0.000208"/>
</kw>
<kw name="Should Contain" owner="BuiltIn">
<arg>${msg}</arg>
<arg>Password must meet all complexity requirements.</arg>
<doc>Fails if ``container`` does not contain ``item`` one or more times.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.363225" elapsed="0.000152"/>
</kw>
<kw name="Close Browser" owner="Browser">
<tag>BrowserControl</tag>
<tag>Setter</tag>
<doc>Closes the current browser.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.363456" elapsed="0.000181"/>
</kw>
<doc>Submitting a password that meets length but not all rules shows complexity error.</doc>
<status status="PASS" start="2026-05-05T19:08:16.359200" elapsed="0.004521"/>
</test>
<test id="s1-t7" name="Setup Completes Successfully And Redirects To Login" line="135">
<kw name="New Browser" owner="Browser">
<arg>chromium</arg>
<arg>headless=${TRUE}</arg>
<tag>BrowserControl</tag>
<tag>Setter</tag>
<doc>Create a new playwright Browser with specified options.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.369227" elapsed="0.001419"/>
</kw>
<kw name="GET" owner="RequestsLibrary">
<var>${status_resp}</var>
<arg>${BACKEND_URL}/api/setup/status</arg>
<doc>Sends a GET request.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.370784" elapsed="0.000122"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${status_body}</var>
<arg>${status_resp.json()}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.370993" elapsed="0.000163"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>Setup complete: ${status_body}[setup_complete]</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.371232" elapsed="0.000136"/>
</kw>
<kw name="Go To" owner="Browser">
<arg>${FRONTEND_URL}/setup</arg>
<tag>BrowserControl</tag>
<tag>Setter</tag>
<doc>Navigates to the given ``url``.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.371442" elapsed="0.000212"/>
</kw>
<kw name="Wait For Elements State" owner="Browser">
<arg>css=input[aria-label="Master Password"]</arg>
<arg>visible</arg>
<arg>timeout=15s</arg>
<tag>PageContent</tag>
<tag>Wait</tag>
<doc>Waits for the element found by ``selector`` to satisfy state option.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.371742" elapsed="0.000370"/>
</kw>
<kw name="Fill Text" owner="Browser">
<arg>css=input[aria-label="Master Password"]</arg>
<arg>Hallo123!</arg>
<tag>PageContent</tag>
<tag>Setter</tag>
<doc>Clears and fills the given ``txt`` into the text field found by ``selector``.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.372275" elapsed="0.000292"/>
</kw>
<kw name="Fill Text" owner="Browser">
<arg>css=input[aria-label="Confirm Password"]</arg>
<arg>Hallo123!</arg>
<tag>PageContent</tag>
<tag>Setter</tag>
<doc>Clears and fills the given ``txt`` into the text field found by ``selector``.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.372675" elapsed="0.000251"/>
</kw>
<kw name="Fill Text" owner="Browser">
<arg>css=input[aria-label="Database Path"]</arg>
<arg>bangui.db</arg>
<tag>PageContent</tag>
<tag>Setter</tag>
<doc>Clears and fills the given ``txt`` into the text field found by ``selector``.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.373035" elapsed="0.000310"/>
</kw>
<kw name="Fill Text" owner="Browser">
<arg>css=input[aria-label="fail2ban Socket Path"]</arg>
<arg>/var/run/fail2ban/fail2ban.sock</arg>
<tag>PageContent</tag>
<tag>Setter</tag>
<doc>Clears and fills the given ``txt`` into the text field found by ``selector``.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.373452" elapsed="0.000267"/>
</kw>
<kw name="Fill Text" owner="Browser">
<arg>css=input[aria-label="Timezone"]</arg>
<arg>UTC</arg>
<tag>PageContent</tag>
<tag>Setter</tag>
<doc>Clears and fills the given ``txt`` into the text field found by ``selector``.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.373819" elapsed="0.000256"/>
</kw>
<kw name="Fill Text" owner="Browser">
<arg>css=input[aria-label="Session Duration (minutes)"]</arg>
<arg>60</arg>
<tag>PageContent</tag>
<tag>Setter</tag>
<doc>Clears and fills the given ``txt`` into the text field found by ``selector``.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.374156" elapsed="0.000240"/>
</kw>
<kw name="Click" owner="Browser">
<arg>css=button[type="submit"]</arg>
<tag>PageContent</tag>
<tag>Setter</tag>
<doc>Simulates mouse click on the element found by ``selector``.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.374478" elapsed="0.000261"/>
</kw>
<kw name="Get Url" owner="Browser">
<var>${current_url}</var>
<tag>Assertion</tag>
<tag>Getter</tag>
<tag>PageContent</tag>
<doc>Returns the current URL.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.374846" elapsed="0.000234"/>
</kw>
<if>
<branch type="IF" condition="&quot;login&quot; not in &quot;&quot;&quot;${current_url}&quot;&quot;&quot;">
<kw name="Evaluate" owner="BuiltIn">
<var>${deadline}</var>
<arg>time.time() + 15</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.375390" elapsed="0.000221"/>
</kw>
<while condition="True">
<iter>
<kw name="Evaluate" owner="BuiltIn">
<var>${now}</var>
<arg>time.time()</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.376079" elapsed="0.000214"/>
</kw>
<if>
<branch type="IF" condition="${now} &gt;= ${deadline}">
<break>
<status status="PASS" start="2026-05-05T19:08:16.376629" elapsed="0.000061"/>
</break>
<status status="PASS" start="2026-05-05T19:08:16.376533" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-05-05T19:08:16.376510" elapsed="0.000263"/>
</if>
<kw name="Get Url" owner="Browser">
<var>${url}</var>
<tag>Assertion</tag>
<tag>Getter</tag>
<tag>PageContent</tag>
<doc>Returns the current URL.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.376870" elapsed="0.000303"/>
</kw>
<if>
<branch type="IF" condition="&quot;login&quot; in &quot;&quot;&quot;${url}&quot;&quot;&quot;">
<break>
<status status="PASS" start="2026-05-05T19:08:16.377395" elapsed="0.000052"/>
</break>
<status status="PASS" start="2026-05-05T19:08:16.377278" elapsed="0.000200"/>
</branch>
<status status="NOT RUN" start="2026-05-05T19:08:16.377259" elapsed="0.000245"/>
</if>
<kw name="Sleep" owner="BuiltIn">
<arg>0.5</arg>
<doc>Pauses the test executed for the given time.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.377566" elapsed="0.000152"/>
</kw>
<status status="NOT RUN" start="2026-05-05T19:08:16.375690" elapsed="0.002063"/>
</iter>
<status status="NOT RUN" start="2026-05-05T19:08:16.375688" elapsed="0.002094"/>
</while>
<status status="PASS" start="2026-05-05T19:08:16.375221" elapsed="0.002591"/>
</branch>
<status status="PASS" start="2026-05-05T19:08:16.375197" elapsed="0.002640"/>
</if>
<kw name="GET" owner="RequestsLibrary">
<var>${new_status_resp}</var>
<arg>${BACKEND_URL}/api/setup/status</arg>
<doc>Sends a GET request.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.377900" elapsed="0.000088"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${new_status_body}</var>
<arg>${new_status_resp.json()}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.378068" elapsed="0.000134"/>
</kw>
<kw name="Should Be True" owner="BuiltIn">
<arg>${new_status_body}[setup_complete]</arg>
<doc>Fails if the given condition is not true.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.378279" elapsed="0.000129"/>
</kw>
<kw name="Close Browser" owner="Browser">
<tag>BrowserControl</tag>
<tag>Setter</tag>
<doc>Closes the current browser.</doc>
<status status="NOT RUN" start="2026-05-05T19:08:16.378480" elapsed="0.000189"/>
</kw>
<doc>Filling all fields and submitting completes setup and navigates to /login.</doc>
<status status="PASS" start="2026-05-05T19:08:16.366735" elapsed="0.012022"/>
</test>
<status status="PASS" start="2026-05-05T19:08:15.508608" elapsed="0.873487"/>
</suite>
<statistics>
<total>
<stat pass="7" fail="0" skip="0">All Tests</stat>
</total>
<tag>
</tag>
<suite>
<stat name="05 Setup" id="s1" pass="7" fail="0" skip="0">05 Setup</stat>
</suite>
</statistics>
<errors>
<msg time="2026-05-05T19:08:15.732927" level="ERROR">Error in file '/home/lukas/Volume/repo/BanGUI/e2e/resources/common.resource' on line 5: Processing variable file '/home/lukas/Volume/repo/BanGUI/e2e/resources/../../.env' failed: Importing variable file '/home/lukas/Volume/repo/BanGUI/e2e/resources/../../.env' failed: Module name cannot contain dots when importing by path.</msg>
</errors>
</robot>