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