from __future__ import annotations
from pygitweb.static_tests.js_runtime import JsPage
_FORM = (
'<input type="password" id="login_password">'
'<button type="button" data-password-toggle="login_password" aria-pressed="false"'
' aria-label="Show password" title="Show password">'
'<svg class="icon icon-toggle-show"></svg>'
'<svg class="icon icon-toggle-hide d-none"></svg>'
"</button>"
)
def test_password_toggle_reveals_and_hides(js: JsPage) -> None:
js.set_html(_FORM)
js.load("login.js")
js.click("[data-password-toggle]")
assert js.prop("#login_password", "type") == "text"
assert js.attr("[data-password-toggle]", "aria-pressed") == "true"
assert js.attr("[data-password-toggle]", "aria-label") == "Hide password"
assert "d-none" in js.classes(".icon-toggle-show")
assert "d-none" not in js.classes(".icon-toggle-hide")
js.click("[data-password-toggle]")
assert js.prop("#login_password", "type") == "password"
assert js.attr("[data-password-toggle]", "aria-pressed") == "false"
assert js.attr("[data-password-toggle]", "title") == "Show password"
assert "d-none" not in js.classes(".icon-toggle-show")
assert "d-none" in js.classes(".icon-toggle-hide")
def test_password_toggle_ignores_a_missing_field(js: JsPage) -> None:
js.set_html('<button type="button" data-password-toggle="missing">Show</button>')
js.load("login.js")
js.click("[data-password-toggle]")
assert js.attr("[data-password-toggle]", "aria-pressed") is None