From 86637f838e4f16f332a1aca0fa1528c6e3c7735d Mon Sep 17 00:00:00 2001 From: Kawa Date: Wed, 15 Apr 2026 15:42:53 +0200 Subject: [PATCH] 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 --- tests/e2e/test_i18n_toggle.py | 73 +++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/tests/e2e/test_i18n_toggle.py b/tests/e2e/test_i18n_toggle.py index ff19f49..0f1d8ab 100644 --- a/tests/e2e/test_i18n_toggle.py +++ b/tests/e2e/test_i18n_toggle.py @@ -3,6 +3,79 @@ from __future__ import annotations 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: """Clicking FR/EN button switches nav label from French to English.""" page.goto(f"{live_server}/", wait_until="domcontentloaded")