test(11-03): E2E tests for theme and language toggle (UIE-04, UIE-05)
- test_theme_cycles_on_click: verifies auto->light->dark cycling via aria-label selector - test_theme_persists_across_reload: verifies localStorage persistence of chosen theme - test_language_toggle_switches_nav_label: verifies FR->EN nav label switch (Imprimantes->Printers) - test_language_persists_across_reload: verifies localStorage persistence of chosen language
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
"""UIE-05: E2E tests for language toggle — FR/EN switching and localStorage persistence."""
|
||||
from __future__ import annotations
|
||||
import pytest
|
||||
|
||||
|
||||
def test_language_toggle_switches_nav_label(page, live_server: str) -> None:
|
||||
"""Clicking FR/EN button switches nav label from French to English."""
|
||||
page.goto(f"{live_server}/", wait_until="domcontentloaded")
|
||||
|
||||
# Default lang is 'fr' — nav should show French labels
|
||||
# Wait for Alpine to hydrate
|
||||
page.wait_for_function(
|
||||
"document.querySelector('nav a[href=\"/printers\"]').textContent.trim() !== ''",
|
||||
timeout=3000,
|
||||
)
|
||||
|
||||
# In French, printers nav label = 'Imprimantes'
|
||||
printers_label_fr = page.text_content("nav a[href='/printers']").strip()
|
||||
assert printers_label_fr == "Imprimantes", f"Expected 'Imprimantes', got '{printers_label_fr}'"
|
||||
|
||||
# Click the language toggle button
|
||||
page.click("button[title='Toggle language']")
|
||||
|
||||
# Wait for label to update
|
||||
page.wait_for_function(
|
||||
"document.querySelector('nav a[href=\"/printers\"]').textContent.trim() === 'Printers'",
|
||||
timeout=2000,
|
||||
)
|
||||
|
||||
printers_label_en = page.text_content("nav a[href='/printers']").strip()
|
||||
assert printers_label_en == "Printers"
|
||||
|
||||
# Cleanup: reset to fr
|
||||
page.evaluate("localStorage.setItem('imptune_lang', 'fr')")
|
||||
|
||||
|
||||
def test_language_persists_across_reload(page, live_server: str) -> None:
|
||||
"""After switching to EN, language is preserved on page reload."""
|
||||
page.goto(f"{live_server}/", wait_until="domcontentloaded")
|
||||
|
||||
# Switch to English
|
||||
page.click("button[title='Toggle language']")
|
||||
page.wait_for_function(
|
||||
"document.querySelector('nav a[href=\"/printers\"]').textContent.trim() === 'Printers'",
|
||||
timeout=2000,
|
||||
)
|
||||
|
||||
# Reload
|
||||
page.reload(wait_until="domcontentloaded")
|
||||
page.wait_for_function(
|
||||
"document.querySelector('nav a[href=\"/printers\"]').textContent.trim() !== ''",
|
||||
timeout=3000,
|
||||
)
|
||||
|
||||
label_after_reload = page.text_content("nav a[href='/printers']").strip()
|
||||
assert label_after_reload == "Printers"
|
||||
|
||||
# Cleanup: reset to fr
|
||||
page.evaluate("localStorage.setItem('imptune_lang', 'fr')")
|
||||
Reference in New Issue
Block a user