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

1from datetime import UTC, date, datetime, time 

2from zoneinfo import ZoneInfo 

3 

4import babel 

5 

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) 

15 

16babel_en = babel.Locale.parse("en") 

17babel_es = babel.Locale.parse("es") 

18babel_fr = babel.Locale.parse("fr") 

19babel_zh = babel.Locale.parse("zh") 

20 

21 

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" 

25 

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" 

28 

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 

32 

33 

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" 

37 

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" 

40 

41 assert try_localize_region_name_from_iso3166("USA", babel_en) == "United States" # alpha3 code 

42 

43 assert try_localize_region_name_from_iso3166("xx", babel_en) is None 

44 

45 

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" 

52 

53 

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" 

58 

59 

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" 

64 

65 

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" 

69 

70 

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"