"""channels plugins/feishu 层单元测试共享 fixture。 提供 ``fake_feishu_client`` 桩,模拟 ``FeishuClient`` (``yuxi.channels.channels.plugins.feishu.feishu_client.FeishuClient``)。 飞书适配器测试通过此桩注入客户端依赖,不发起真实 HTTP 请求。 桩使用 ``AsyncMock()``,预设主要方法返回值(空 dict / 空 bytes / token 元组),调用方可按需覆盖。方法签名以 ``FeishuClient`` 实现为准。单文件 独有的 helper 应保留在对应测试文件内(见 testing-guidelines.md)。 """ from __future__ import annotations from unittest.mock import AsyncMock import pytest @pytest.fixture def fake_feishu_client() -> AsyncMock: """FeishuClient 桩。 ``AsyncMock()`` 模拟 ``FeishuClient``,预设主要方法返回值: - ``get_tenant_access_token`` 返回 ``("fake-token", 7200)``; - ``send_message`` / ``update_message`` / ``recall_message`` / ``get_message`` / ``reply_message`` 等 IM API 返回 ``{}``; - ``download_resource`` 返回 ``b""``; - ``upload_image`` / ``upload_file`` 返回 ``{}``; - 通讯录 / OAuth API 返回 ``{}``。 """ client = AsyncMock() # Token 管理 client.get_tenant_access_token.return_value = ("fake-token", 7200) # 通用请求 client.request.return_value = {} # IM API client.send_message.return_value = {} client.update_message.return_value = {} client.recall_message.return_value = {} client.get_message.return_value = {} client.reply_message.return_value = {} client.batch_get_messages.return_value = {} client.update_card.return_value = {} client.streaming_start.return_value = {} client.streaming_update.return_value = {} client.streaming_stop.return_value = {} client.add_reaction.return_value = {} client.delete_reaction.return_value = {} client.pin_message.return_value = {} client.unpin_message.return_value = {} # 资源上传/下载 client.upload_image.return_value = {} client.upload_file.return_value = {} client.download_resource.return_value = b"" # 通讯录 API client.get_user.return_value = {} client.search_users.return_value = {} client.get_group_list.return_value = {} client.get_group_members.return_value = {} client.get_group_detail.return_value = {} # OAuth API client.get_qr_login_url.return_value = {} client.poll_qr_login_status.return_value = {} client.revoke_token.return_value = {} return client