Coverage for app/backend/src/tests/test_localize.py: 100%
45 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-07-20 15:12 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-07-20 15:12 +0000
1from datetime import UTC, date, datetime, time
2from zoneinfo import ZoneInfo
4import babel
6from couchers.i18n.localize import (
7 localize_date,
8 localize_datetime,
9 localize_list,
10 localize_time,
11 localize_timezone,
12 try_localize_language_name_from_iso639,
13 try_localize_region_name_from_iso3166,
14)
16babel_en = babel.Locale.parse("en")
17babel_es = babel.Locale.parse("es")
18babel_fr = babel.Locale.parse("fr")
19babel_zh = babel.Locale.parse("zh")
22def test_localize_language_name() -> None:
23 assert try_localize_language_name_from_iso639("en", babel_en) == "English"
24 assert try_localize_language_name_from_iso639("es", babel_en) == "Spanish"
26 assert try_localize_language_name_from_iso639("en", babel_es) == "inglés"
27 assert try_localize_language_name_from_iso639("es", babel_es) == "español"
29 assert try_localize_language_name_from_iso639("en", babel_es, standalone=True) == "Inglés" # Sentence case
30 assert try_localize_language_name_from_iso639("eng", babel_es) == "inglés" # ISO639-3 code
31 assert try_localize_language_name_from_iso639("xx", babel_en) is None
34def test_localize_region_name() -> None:
35 assert try_localize_region_name_from_iso3166("US", babel_en) == "United States"
36 assert try_localize_region_name_from_iso3166("DE", babel_en) == "Germany"
38 assert try_localize_region_name_from_iso3166("US", babel_es) == "Estados Unidos"
39 assert try_localize_region_name_from_iso3166("DE", babel_es) == "Alemania"
41 assert try_localize_region_name_from_iso3166("USA", babel_en) == "United States" # alpha3 code
43 assert try_localize_region_name_from_iso3166("xx", babel_en) is None
46def test_localize_date() -> None:
47 assert localize_date(date(2000, 1, 2), babel_en) == "January 2, 2000"
48 assert localize_date(date(2000, 1, 2), babel_es, abbrev=True) == "2 ene 2000"
49 assert localize_date(date(2000, 1, 2), babel_fr, with_day_of_week=True) == "dimanche 2 janvier 2000"
50 assert localize_date(date(2000, 1, 2), babel_zh, with_year=False) == "1月2日"
51 assert localize_date(date(2000, 1, 2), babel_en, with_year=False, with_day_of_week=True) == "Sunday, January 2"
54def test_localize_time() -> None:
55 assert localize_time(time(14, 5), babel_en) == "2:05 PM"
56 assert localize_time(time(14, 5), babel_fr) == "14:05"
57 assert localize_time(time(14, 5), babel_es, with_seconds=True) == "14:05:00"
60def test_localize_datetime() -> None:
61 value = datetime(2000, 1, 2, 14, 5, tzinfo=UTC)
62 assert localize_datetime(value, babel_en) == "January 2, 2000, 2:05 PM"
63 assert localize_datetime(value, babel_fr) == "2 janvier 2000, 14:05"
66def test_localize_timezone() -> None:
67 assert localize_timezone(ZoneInfo("Europe/London"), babel_en) == "United Kingdom Time"
68 assert localize_timezone(ZoneInfo("Europe/London"), babel_es) == "hora de Reino Unido"
71def test_localize_list() -> None:
72 abc = ["a", "b", "c"]
73 assert localize_list(abc, babel_en) == "a, b, and c"
74 assert localize_list(abc, babel_es) == "a, b y c"
75 assert localize_list(abc, babel_zh) == "a、b和c"