Skip to content

Commit a0a63fa

Browse files
committed
deploy: 438b972
1 parent 958f200 commit a0a63fa

File tree

3 files changed

+344
-354
lines changed

3 files changed

+344
-354
lines changed

detailed-report.html

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,7 @@
328328
</head>
329329
<body>
330330
<h1 id="title">report.html</h1>
331-
<p>Report generated on 19-Feb-2026 at 02:02:16 by <a href="https://pypi.python.org/pypi/pytest-html">pytest-html</a>
331+
<p>Report generated on 19-Feb-2026 at 15:01:22 by <a href="https://pypi.python.org/pypi/pytest-html">pytest-html</a>
332332
v4.1.1</p>
333333
<div id="environment-header">
334334
<h2>Environment</h2>
@@ -382,7 +382,7 @@ <h2>Environment</h2>
382382
<h2>Summary</h2>
383383
<div class="additional-summary prefix">
384384
</div>
385-
<p class="run-count">8 tests took 00:11:49.</p>
385+
<p class="run-count">2 tests took 00:08:02.</p>
386386
<p class="filter">(Un)check the boxes to filter the results.</p>
387387
<div class="summary__reload">
388388
<div class="summary__reload__button hidden" onclick="location.reload()">
@@ -392,10 +392,10 @@ <h2>Summary</h2>
392392
<div class="summary__spacer"></div>
393393
<div class="controls">
394394
<div class="filters">
395-
<input checked="true" class="filter" name="filter_checkbox" type="checkbox" data-test-result="failed" />
396-
<span class="failed">3 Failed,</span>
395+
<input checked="true" class="filter" name="filter_checkbox" type="checkbox" data-test-result="failed" disabled/>
396+
<span class="failed">0 Failed,</span>
397397
<input checked="true" class="filter" name="filter_checkbox" type="checkbox" data-test-result="passed" />
398-
<span class="passed">5 Passed,</span>
398+
<span class="passed">2 Passed,</span>
399399
<input checked="true" class="filter" name="filter_checkbox" type="checkbox" data-test-result="skipped" disabled/>
400400
<span class="skipped">0 Skipped,</span>
401401
<input checked="true" class="filter" name="filter_checkbox" type="checkbox" data-test-result="xfailed" disabled/>
@@ -429,7 +429,7 @@ <h2>Summary</h2>
429429
</table>
430430
</body>
431431
<footer>
432-
<div id="data-container" data-jsonblob="{&#34;environment&#34;: {&#34;Python&#34;: &#34;3.11.14&#34;, &#34;Platform&#34;: &#34;Linux-6.14.0-1017-azure-x86_64-with-glibc2.39&#34;, &#34;Packages&#34;: {&#34;pytest&#34;: &#34;7.4.3&#34;, &#34;pluggy&#34;: &#34;1.6.0&#34;}, &#34;Plugins&#34;: {&#34;bdd&#34;: &#34;6.1.1&#34;, &#34;base-url&#34;: &#34;2.1.0&#34;, &#34;playwright&#34;: &#34;0.7.1&#34;, &#34;metadata&#34;: &#34;3.1.1&#34;, &#34;html&#34;: &#34;4.1.1&#34;, &#34;json-report&#34;: &#34;1.5.0&#34;}, &#34;CI&#34;: &#34;true&#34;, &#34;JAVA_HOME&#34;: &#34;/usr/lib/jvm/temurin-17-jdk-amd64&#34;, &#34;Base URL&#34;: &#34;&#34;}, &#34;tests&#34;: {&#34;tests/authentication/test_01_brute_force_password.py::test_brute_force_password&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Passed&#34;, &#34;testId&#34;: &#34;tests/authentication/test_01_brute_force_password.py::test_brute_force_password&#34;, &#34;duration&#34;: &#34;00:06:21&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Passed&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;tests/authentication/test_01_brute_force_password.py::test_brute_force_password&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;00:06:21&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;No log output captured.&#34;}], &#34;tests/authentication/test_02_credential_guessing.py::test_credential_guessing&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Passed&#34;, &#34;testId&#34;: &#34;tests/authentication/test_02_credential_guessing.py::test_credential_guessing&#34;, &#34;duration&#34;: &#34;00:01:34&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Passed&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;tests/authentication/test_02_credential_guessing.py::test_credential_guessing&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;00:01:34&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;No log output captured.&#34;}], &#34;tests/authentication/test_03_password_attack_6_attempts.py::test_password_attack_6&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Passed&#34;, &#34;testId&#34;: &#34;tests/authentication/test_03_password_attack_6_attempts.py::test_password_attack_6&#34;, &#34;duration&#34;: &#34;00:01:01&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Passed&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;tests/authentication/test_03_password_attack_6_attempts.py::test_password_attack_6&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;00:01:01&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;No log output captured.&#34;}], &#34;tests/authentication/test_04_password_attack_7_attempts.py::test_password_attack_7&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Passed&#34;, &#34;testId&#34;: &#34;tests/authentication/test_04_password_attack_7_attempts.py::test_password_attack_7&#34;, &#34;duration&#34;: &#34;00:01:09&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Passed&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;tests/authentication/test_04_password_attack_7_attempts.py::test_password_attack_7&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;00:01:09&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;No log output captured.&#34;}], &#34;tests/authentication/test_05_password_attack_8_attempts.py::test_password_attack_8&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Passed&#34;, &#34;testId&#34;: &#34;tests/authentication/test_05_password_attack_8_attempts.py::test_password_attack_8&#34;, &#34;duration&#34;: &#34;00:01:17&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Passed&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;tests/authentication/test_05_password_attack_8_attempts.py::test_password_attack_8&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;00:01:17&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;No log output captured.&#34;}], &#34;tests/session_management/test_01_session_hijacking.py::test_session_hijacking&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Failed&#34;, &#34;testId&#34;: &#34;tests/session_management/test_01_session_hijacking.py::test_session_hijacking&#34;, &#34;duration&#34;: &#34;00:00:09&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Failed&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;tests/session_management/test_01_session_hijacking.py::test_session_hijacking&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;00:00:09&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;fixturefunc = &amp;lt;function user_logged_in at 0x7f586b07a3e0&amp;gt;\nrequest = &amp;lt;FixtureRequest for &amp;lt;Function test_session_hijacking&amp;gt;&amp;gt;\nkwargs = {&amp;#x27;browser&amp;#x27;: &amp;lt;Page url=&amp;#x27;http://localhost/openmrs/spa/login&amp;#x27;&amp;gt;}\n\n def call_fixture_func(\n fixturefunc: &amp;quot;_FixtureFunc[FixtureValue]&amp;quot;, request: FixtureRequest, kwargs\n ) -&amp;gt; FixtureValue:\n if is_generator(fixturefunc):\n fixturefunc = cast(\n Callable[..., Generator[FixtureValue, None, None]], fixturefunc\n )\n generator = fixturefunc(**kwargs)\n try:\n fixture_result = next(generator)\n except StopIteration:\n raise ValueError(f&amp;quot;{request.fixturename} did not yield a value&amp;quot;) from None\n finalizer = functools.partial(_teardown_yield_fixture, fixturefunc, generator)\n request.addfinalizer(finalizer)\n else:\n fixturefunc = cast(Callable[..., FixtureValue], fixturefunc)\n&amp;gt; fixture_result = fixturefunc(**kwargs)\n\n/opt/hostedtoolcache/Python/3.11.14/x64/lib/python3.11/site-packages/_pytest/fixtures.py:902: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nbrowser = &amp;lt;Page url=&amp;#x27;http://localhost/openmrs/spa/login&amp;#x27;&amp;gt;\n\n @pytest_bdd.given(&amp;#x27;the OpenMRS 3 home page is show after login&amp;#x27;)\n def user_logged_in(browser):\n &amp;quot;&amp;quot;&amp;quot;User logs in and establishes a session&amp;quot;&amp;quot;&amp;quot;\n print(&amp;quot;\\n&amp;quot; + &amp;quot;=&amp;quot;*60)\n print(&amp;quot;BACKGROUND: User Login&amp;quot;)\n print(&amp;quot;=&amp;quot;*60)\n \n # Navigate to login\n browser.goto(O3_LOGIN_URL)\n browser.wait_for_timeout(2000)\n \n # Perform two-step login\n success = perform_login(browser)\n&amp;gt; assert success, f&amp;quot;Login failed - URL: {browser.url}&amp;quot;\nE AssertionError: Login failed - URL: http://localhost/openmrs/spa/login\nE assert False\n\ntests/session_management/test_01_session_hijacking.py:27: AssertionError\n&#34;}], &#34;tests/session_management/test_02_idle_timeout.py::test_idle_timeout&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Failed&#34;, &#34;testId&#34;: &#34;tests/session_management/test_02_idle_timeout.py::test_idle_timeout&#34;, &#34;duration&#34;: &#34;00:00:09&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Failed&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;tests/session_management/test_02_idle_timeout.py::test_idle_timeout&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;00:00:09&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;fixturefunc = &amp;lt;function user_logged_in at 0x7f586b07ad40&amp;gt;\nrequest = &amp;lt;FixtureRequest for &amp;lt;Function test_idle_timeout&amp;gt;&amp;gt;\nkwargs = {&amp;#x27;browser&amp;#x27;: &amp;lt;Page url=&amp;#x27;http://localhost/openmrs/spa/login&amp;#x27;&amp;gt;}\n\n def call_fixture_func(\n fixturefunc: &amp;quot;_FixtureFunc[FixtureValue]&amp;quot;, request: FixtureRequest, kwargs\n ) -&amp;gt; FixtureValue:\n if is_generator(fixturefunc):\n fixturefunc = cast(\n Callable[..., Generator[FixtureValue, None, None]], fixturefunc\n )\n generator = fixturefunc(**kwargs)\n try:\n fixture_result = next(generator)\n except StopIteration:\n raise ValueError(f&amp;quot;{request.fixturename} did not yield a value&amp;quot;) from None\n finalizer = functools.partial(_teardown_yield_fixture, fixturefunc, generator)\n request.addfinalizer(finalizer)\n else:\n fixturefunc = cast(Callable[..., FixtureValue], fixturefunc)\n&amp;gt; fixture_result = fixturefunc(**kwargs)\n\n/opt/hostedtoolcache/Python/3.11.14/x64/lib/python3.11/site-packages/_pytest/fixtures.py:902: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nbrowser = &amp;lt;Page url=&amp;#x27;http://localhost/openmrs/spa/login&amp;#x27;&amp;gt;\n\n @pytest_bdd.given(&amp;#x27;the OpenMRS 3 home page is show after login&amp;#x27;)\n def user_logged_in(browser):\n &amp;quot;&amp;quot;&amp;quot;User logs in and establishes a session&amp;quot;&amp;quot;&amp;quot;\n print(&amp;quot;\\n&amp;quot; + &amp;quot;=&amp;quot;*60)\n print(&amp;quot;BACKGROUND: User Login&amp;quot;)\n print(&amp;quot;=&amp;quot;*60)\n \n # Navigate to login\n browser.goto(O3_LOGIN_URL)\n browser.wait_for_timeout(2000)\n \n # Perform two-step login\n success = perform_login(browser)\n&amp;gt; assert success, f&amp;quot;Login failed - URL: {browser.url}&amp;quot;\nE AssertionError: Login failed - URL: http://localhost/openmrs/spa/login\nE assert False\n\ntests/session_management/test_02_idle_timeout.py:26: AssertionError\n&#34;}], &#34;tests/session_management/test_03_expired_session_reuse.py::test_expired_session_reuse&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Failed&#34;, &#34;testId&#34;: &#34;tests/session_management/test_03_expired_session_reuse.py::test_expired_session_reuse&#34;, &#34;duration&#34;: &#34;00:00:09&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Failed&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;tests/session_management/test_03_expired_session_reuse.py::test_expired_session_reuse&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;00:00:09&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;fixturefunc = &amp;lt;function user_logged_in at 0x7f586b07b560&amp;gt;\nrequest = &amp;lt;FixtureRequest for &amp;lt;Function test_expired_session_reuse&amp;gt;&amp;gt;\nkwargs = {&amp;#x27;browser&amp;#x27;: &amp;lt;Page url=&amp;#x27;http://localhost/openmrs/spa/login&amp;#x27;&amp;gt;}\n\n def call_fixture_func(\n fixturefunc: &amp;quot;_FixtureFunc[FixtureValue]&amp;quot;, request: FixtureRequest, kwargs\n ) -&amp;gt; FixtureValue:\n if is_generator(fixturefunc):\n fixturefunc = cast(\n Callable[..., Generator[FixtureValue, None, None]], fixturefunc\n )\n generator = fixturefunc(**kwargs)\n try:\n fixture_result = next(generator)\n except StopIteration:\n raise ValueError(f&amp;quot;{request.fixturename} did not yield a value&amp;quot;) from None\n finalizer = functools.partial(_teardown_yield_fixture, fixturefunc, generator)\n request.addfinalizer(finalizer)\n else:\n fixturefunc = cast(Callable[..., FixtureValue], fixturefunc)\n&amp;gt; fixture_result = fixturefunc(**kwargs)\n\n/opt/hostedtoolcache/Python/3.11.14/x64/lib/python3.11/site-packages/_pytest/fixtures.py:902: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nbrowser = &amp;lt;Page url=&amp;#x27;http://localhost/openmrs/spa/login&amp;#x27;&amp;gt;\n\n @pytest_bdd.given(&amp;#x27;the OpenMRS 3 home page is show after login&amp;#x27;)\n def user_logged_in(browser):\n &amp;quot;&amp;quot;&amp;quot;User logs in and establishes a session&amp;quot;&amp;quot;&amp;quot;\n print(&amp;quot;\\n&amp;quot; + &amp;quot;=&amp;quot;*60)\n print(&amp;quot;BACKGROUND: User Login&amp;quot;)\n print(&amp;quot;=&amp;quot;*60)\n \n # Navigate to login\n browser.goto(O3_LOGIN_URL)\n browser.wait_for_timeout(2000)\n \n # Perform two-step login\n success = perform_login(browser)\n&amp;gt; assert success, f&amp;quot;Login failed - URL: {browser.url}&amp;quot;\nE AssertionError: Login failed - URL: http://localhost/openmrs/spa/login\nE assert False\n\ntests/session_management/test_03_expired_session_reuse.py:26: AssertionError\n&#34;}]}, &#34;renderCollapsed&#34;: [&#34;passed&#34;], &#34;initialSort&#34;: &#34;result&#34;, &#34;title&#34;: &#34;report.html&#34;}"></div>
432+
<div id="data-container" data-jsonblob="{&#34;environment&#34;: {&#34;Python&#34;: &#34;3.11.14&#34;, &#34;Platform&#34;: &#34;Linux-6.14.0-1017-azure-x86_64-with-glibc2.39&#34;, &#34;Packages&#34;: {&#34;pytest&#34;: &#34;7.4.3&#34;, &#34;pluggy&#34;: &#34;1.6.0&#34;}, &#34;Plugins&#34;: {&#34;bdd&#34;: &#34;6.1.1&#34;, &#34;base-url&#34;: &#34;2.1.0&#34;, &#34;playwright&#34;: &#34;0.7.1&#34;, &#34;metadata&#34;: &#34;3.1.1&#34;, &#34;html&#34;: &#34;4.1.1&#34;, &#34;json-report&#34;: &#34;1.5.0&#34;}, &#34;CI&#34;: &#34;true&#34;, &#34;JAVA_HOME&#34;: &#34;/usr/lib/jvm/temurin-17-jdk-amd64&#34;, &#34;Base URL&#34;: &#34;&#34;}, &#34;tests&#34;: {&#34;tests/authentication/test_01_brute_force_password.py::test_brute_force_password&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Passed&#34;, &#34;testId&#34;: &#34;tests/authentication/test_01_brute_force_password.py::test_brute_force_password&#34;, &#34;duration&#34;: &#34;00:07:53&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Passed&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;tests/authentication/test_01_brute_force_password.py::test_brute_force_password&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;00:07:53&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;No log output captured.&#34;}], &#34;tests/authentication/test_02_brute_force_api.py::test_brute_force_api_password&#34;: [{&#34;extras&#34;: [], &#34;result&#34;: &#34;Passed&#34;, &#34;testId&#34;: &#34;tests/authentication/test_02_brute_force_api.py::test_brute_force_api_password&#34;, &#34;duration&#34;: &#34;00:00:10&#34;, &#34;resultsTableRow&#34;: [&#34;&lt;td class=\&#34;col-result\&#34;&gt;Passed&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-testId\&#34;&gt;tests/authentication/test_02_brute_force_api.py::test_brute_force_api_password&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-duration\&#34;&gt;00:00:10&lt;/td&gt;&#34;, &#34;&lt;td class=\&#34;col-links\&#34;&gt;&lt;/td&gt;&#34;], &#34;log&#34;: &#34;No log output captured.&#34;}]}, &#34;renderCollapsed&#34;: [&#34;passed&#34;], &#34;initialSort&#34;: &#34;result&#34;, &#34;title&#34;: &#34;report.html&#34;}"></div>
433433
<script>
434434
(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
435435
const { getCollapsedCategory, setCollapsedIds } = require('./storage.js')

0 commit comments

Comments
 (0)