from __future__ import annotations from yuxi.channels.adapters.telegram.message_actions import TELEGRAM_MESSAGE_ACTIONS from yuxi.channels.adapters.discord.message_actions import DISCORD_MESSAGE_ACTIONS from yuxi.channels.adapters.slack.message_actions import SLACK_MESSAGE_ACTIONS from yuxi.channels.adapters.whatsapp.message_actions import WHATSAPP_MESSAGE_ACTIONS from yuxi.channels.adapters.feishu.message_actions import FEISHU_MESSAGE_ACTIONS class TestMessageActionsSchema: def test_telegram_actions_have_required_fields(self): assert len(TELEGRAM_MESSAGE_ACTIONS) >= 20 for action_name, action_info in TELEGRAM_MESSAGE_ACTIONS.items(): assert "status" in action_info, f"Missing status in {action_name}" assert action_info["status"] in ("implemented", "planned", "unsupported"), \ f"Invalid status '{action_info['status']}' in {action_name}" assert "description" in action_info, f"Missing description in {action_name}" assert "api" in action_info, f"Missing api in {action_name}" def test_telegram_implemented_actions_exist(self): implemented = [k for k, v in TELEGRAM_MESSAGE_ACTIONS.items() if v["status"] == "implemented"] assert "send" in implemented assert "edit" in implemented assert "delete" in implemented assert "react" in implemented assert "typing" in implemented def test_discord_actions_have_required_fields(self): assert len(DISCORD_MESSAGE_ACTIONS) >= 20 for action_name, action_info in DISCORD_MESSAGE_ACTIONS.items(): assert "status" in action_info, f"Missing status in {action_name}" assert action_info["status"] in ("implemented", "planned", "unsupported"), \ f"Invalid status '{action_info['status']}' in {action_name}" assert "description" in action_info assert "api" in action_info def test_discord_implemented_actions_exist(self): implemented = [k for k, v in DISCORD_MESSAGE_ACTIONS.items() if v["status"] == "implemented"] assert "send" in implemented assert "edit" in implemented assert "delete" in implemented assert "react" in implemented def test_slack_actions_have_required_fields(self): assert len(SLACK_MESSAGE_ACTIONS) >= 20 for action_name, action_info in SLACK_MESSAGE_ACTIONS.items(): assert "status" in action_info, f"Missing status in {action_name}" assert action_info["status"] in ("implemented", "planned", "unsupported"), \ f"Invalid status '{action_info['status']}' in {action_name}" assert "description" in action_info assert "api" in action_info def test_slack_implemented_actions_exist(self): implemented = [k for k, v in SLACK_MESSAGE_ACTIONS.items() if v["status"] == "implemented"] assert "send" in implemented assert "edit" in implemented assert "delete" in implemented assert "sendEphemeral" in implemented def test_all_three_channels_exist(self): assert len(TELEGRAM_MESSAGE_ACTIONS) > 0 assert len(DISCORD_MESSAGE_ACTIONS) > 0 assert len(SLACK_MESSAGE_ACTIONS) > 0 class TestWhatsAppActions: def test_whatsapp_actions_have_required_fields(self): assert len(WHATSAPP_MESSAGE_ACTIONS) >= 15 for action_name, action_info in WHATSAPP_MESSAGE_ACTIONS.items(): assert "status" in action_info, f"Missing status in {action_name}" assert action_info["status"] in ("implemented", "planned", "unsupported"), \ f"Invalid status '{action_info['status']}' in {action_name}" assert "description" in action_info, f"Missing description in {action_name}" assert "api" in action_info, f"Missing api in {action_name}" def test_whatsapp_implemented_actions_exist(self): implemented = [k for k, v in WHATSAPP_MESSAGE_ACTIONS.items() if v["status"] == "implemented"] assert "send" in implemented assert "sendAttachment" in implemented assert "react" in implemented assert "downloadFile" in implemented assert "uploadFile" in implemented class TestFeishuActions: def test_feishu_actions_have_required_fields(self): assert len(FEISHU_MESSAGE_ACTIONS) >= 20 for action_name, action_info in FEISHU_MESSAGE_ACTIONS.items(): assert "status" in action_info, f"Missing status in {action_name}" assert action_info["status"] in ("implemented", "planned", "unsupported"), \ f"Invalid status '{action_info['status']}' in {action_name}" assert "description" in action_info, f"Missing description in {action_name}" assert "api" in action_info, f"Missing api in {action_name}" def test_feishu_implemented_actions_exist(self): implemented = [k for k, v in FEISHU_MESSAGE_ACTIONS.items() if v["status"] == "implemented"] assert "send" in implemented assert "edit" in implemented assert "delete" in implemented assert "react" in implemented assert "pin" in implemented assert "unpin" in implemented assert "listPins" in implemented assert "read" in implemented assert "listReactions" in implemented assert "channelInfo" in implemented assert "channelList" in implemented def test_all_five_channels_exist(self): assert len(TELEGRAM_MESSAGE_ACTIONS) > 0 assert len(DISCORD_MESSAGE_ACTIONS) > 0 assert len(SLACK_MESSAGE_ACTIONS) > 0 assert len(WHATSAPP_MESSAGE_ACTIONS) > 0 assert len(FEISHU_MESSAGE_ACTIONS) > 0