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