import json import os from pathlib import Path from webapp.auth import load_users from webapp.config import ConfigFileError, load_webapp_config from webapp.i18n import load_translation_catalog from webapp.telegram_targets import load_telegram_target_catalog def test_load_users_reports_invalid_json_with_path(tmp_path: Path) -> None: users_file = tmp_path / "users.json" users_file.write_text("{broken", encoding="utf-8") try: load_users(users_file) except ConfigFileError as error: assert str(users_file) in str(error) else: raise AssertionError("Expected ConfigFileError") def test_load_telegram_target_catalog_reports_invalid_json_with_path(tmp_path: Path) -> None: config_dir = tmp_path / "config" config_dir.mkdir() config_file = config_dir / "telegram_config.json" config_file.write_text("{broken", encoding="utf-8") try: load_telegram_target_catalog(config_dir) except ConfigFileError as error: assert str(config_file) in str(error) else: raise AssertionError("Expected ConfigFileError") def test_load_webapp_config_reports_invalid_json_with_path(tmp_path: Path) -> None: config_dir = tmp_path / "config" config_dir.mkdir() config_file = config_dir / "app_config.json" config_file.write_text("{broken", encoding="utf-8") previous = os.environ.get("LINKKI_DATA_DIR") os.environ["LINKKI_DATA_DIR"] = str(tmp_path) try: try: load_webapp_config() except ConfigFileError as error: assert str(config_file) in str(error) else: raise AssertionError("Expected ConfigFileError") finally: if previous is None: os.environ.pop("LINKKI_DATA_DIR", None) else: os.environ["LINKKI_DATA_DIR"] = previous def test_load_translation_catalog_reports_invalid_json_with_path(tmp_path: Path) -> None: translations_dir = tmp_path / "translations" translations_dir.mkdir() config_file = translations_dir / "catalog.json" config_file.write_text('{"a":{"en":"line1\nline2"}}', encoding="utf-8") from webapp import i18n as i18n_module original = i18n_module.TRANSLATION_CATALOG_FILE i18n_module.TRANSLATION_CATALOG_FILE = config_file try: try: load_translation_catalog() except ConfigFileError as error: assert str(config_file) in str(error) assert "raw line breaks" in str(error) else: raise AssertionError("Expected ConfigFileError") finally: i18n_module.TRANSLATION_CATALOG_FILE = original