import json from pathlib import Path from webapp.telegram_targets import ( default_target_selection, load_telegram_target_catalog, resolve_target_config, ) def test_multi_bot_catalog_picks_first_marked_defaults(tmp_path: Path) -> None: config_dir = tmp_path / "config" config_dir.mkdir() (config_dir / "telegram_config.json").write_text( json.dumps( { "bots": [ { "display_name": "Bot A", "token": "token-a", "default": True, "channels": [ {"display_name": "Channel A1", "channel_id": "-1001", "default": True}, {"display_name": "Channel A2", "channel_id": "-1002", "default": True}, ], }, { "display_name": "Bot B", "token": "token-b", "default": True, "channels": [ {"display_name": "Channel B1", "channel_id": "-2001", "default": True}, ], }, ] } ), encoding="utf-8", ) catalog = load_telegram_target_catalog(config_dir) assert default_target_selection(catalog) == ("token-a", "-1001") def test_resolve_target_config_uses_selected_bot_id_and_chat_id(tmp_path: Path) -> None: config_dir = tmp_path / "config" config_dir.mkdir() (config_dir / "telegram_config.json").write_text( json.dumps( { "bots": [ { "display_name": "Bot A", "token": "token-a", "channels": [ { "display_name": "Channel A1", "channel_id": "-1001", "channel_username": "public_a", "discussion_group_id": "-2001", }, ], } ] } ), encoding="utf-8", ) catalog = load_telegram_target_catalog(config_dir) config = resolve_target_config(catalog, "token-a", "-1001") assert config.bot_token == "token-a" assert config.chat_id == "-1001" assert config.channel_username == "public_a" assert config.discussion_group_id == "-2001" def test_telegram_config_requires_top_level_bots_list(tmp_path: Path) -> None: config_dir = tmp_path / "config" config_dir.mkdir() (config_dir / "telegram_config.json").write_text( json.dumps( { "bot_token": "legacy-token", } ), encoding="utf-8", ) try: load_telegram_target_catalog(config_dir) except Exception as error: assert "top-level 'bots' list" in str(error) else: raise AssertionError("Expected invalid config format to be rejected.")