test(12-01): add failing tests for navigator.language auto-detection

- test_navigator_language_en_sets_lang_en: expects lang='en' when locale=en-US and localStorage empty
- test_navigator_language_fr_sets_lang_fr: expects lang='fr' when locale=fr-FR and localStorage empty
- test_localstorage_wins_over_navigator_language: expects localStorage to override navigator.language
This commit is contained in:
2026-04-15 15:42:53 +02:00
parent ef8fbc9692
commit 86637f838e
+73
View File
@@ -3,6 +3,79 @@ from __future__ import annotations
import pytest import pytest
# ---------------------------------------------------------------------------
# Task 1 (Phase 12-01): navigator.language auto-detection
# ---------------------------------------------------------------------------
def test_navigator_language_en_sets_lang_en(browser, live_server: str) -> None:
"""When localStorage is empty and navigator.language is 'en-US', lang defaults to 'en'."""
context = browser.new_context(locale="en-US")
page = context.new_page()
# Clear any saved preference so localStorage fallback is not used
page.goto(f"{live_server}/", wait_until="domcontentloaded")
page.evaluate("localStorage.removeItem('imptune_lang')")
# Reload so the alpine:init IIFE runs with no localStorage and en-US locale
page.reload(wait_until="domcontentloaded")
page.wait_for_function(
"document.querySelector('nav a[href=\"/printers\"]').textContent.trim() !== ''",
timeout=3000,
)
lang = page.evaluate("Alpine.store('i18n').lang")
assert lang == "en", f"Expected 'en' when navigator.language is 'en-US', got '{lang}'"
context.close()
def test_navigator_language_fr_sets_lang_fr(browser, live_server: str) -> None:
"""When localStorage is empty and navigator.language is 'fr-FR', lang defaults to 'fr'."""
context = browser.new_context(locale="fr-FR")
page = context.new_page()
page.goto(f"{live_server}/", wait_until="domcontentloaded")
page.evaluate("localStorage.removeItem('imptune_lang')")
page.reload(wait_until="domcontentloaded")
page.wait_for_function(
"document.querySelector('nav a[href=\"/printers\"]').textContent.trim() !== ''",
timeout=3000,
)
lang = page.evaluate("Alpine.store('i18n').lang")
assert lang == "fr", f"Expected 'fr' when navigator.language is 'fr-FR', got '{lang}'"
context.close()
def test_localstorage_wins_over_navigator_language(browser, live_server: str) -> None:
"""localStorage preference wins over navigator.language when a value is saved."""
# Browser locale is 'en-US' but localStorage says 'fr' → should use 'fr'
context = browser.new_context(locale="en-US")
page = context.new_page()
page.goto(f"{live_server}/", wait_until="domcontentloaded")
page.evaluate("localStorage.setItem('imptune_lang', 'fr')")
page.reload(wait_until="domcontentloaded")
page.wait_for_function(
"document.querySelector('nav a[href=\"/printers\"]').textContent.trim() !== ''",
timeout=3000,
)
lang = page.evaluate("Alpine.store('i18n').lang")
assert lang == "fr", f"Expected localStorage 'fr' to win over navigator.language 'en-US', got '{lang}'"
# Cleanup
page.evaluate("localStorage.removeItem('imptune_lang')")
context.close()
# ---------------------------------------------------------------------------
# Original toggle and persistence tests
# ---------------------------------------------------------------------------
def test_language_toggle_switches_nav_label(page, live_server: str) -> None: def test_language_toggle_switches_nav_label(page, live_server: str) -> None:
"""Clicking FR/EN button switches nav label from French to English.""" """Clicking FR/EN button switches nav label from French to English."""
page.goto(f"{live_server}/", wait_until="domcontentloaded") page.goto(f"{live_server}/", wait_until="domcontentloaded")