Files
chatgpt-on-wechat/tests/test_feishu_quoted_context.py
2026-07-17 17:09:48 +08:00

106 lines
3.1 KiB
Python

import json
from types import SimpleNamespace
from channel.feishu.feishu_message import FeishuMessage
def _event(parent_id="om_parent", text="What does this mean?"):
return {
"app_id": "cli_bot",
"sender": {"sender_id": {"open_id": "ou_user"}},
"message": {
"message_id": "om_child",
"parent_id": parent_id,
"chat_id": "oc_chat",
"message_type": "text",
"content": json.dumps({"text": text}),
},
}
def _response(body, status_code=200):
return SimpleNamespace(status_code=status_code, json=lambda: body)
def test_text_reply_fetches_parent_without_replacing_user_message(monkeypatch):
response = _response(
{
"code": 0,
"data": {
"items": [
{
"msg_type": "text",
"body": {"content": json.dumps({"text": "Original answer"})},
}
]
},
}
)
monkeypatch.setattr(
"channel.feishu.feishu_message.requests.get", lambda **kwargs: response
)
message = FeishuMessage(_event(), access_token="tenant-token")
assert message.content == "What does this mean?"
assert message.quoted_content == "Original answer"
assert message.content_with_quote() == (
"[Quoted message]\nOriginal answer\n[/Quoted message]\n\n"
"What does this mean?"
)
def test_post_reply_extracts_title_and_text(monkeypatch):
post = {
"title": "Release note",
"content": [
[
{"tag": "text", "text": "Fixed the scheduler."},
{"tag": "a", "text": "Details", "href": "https://example.com"},
]
],
}
response = _response(
{
"code": 0,
"data": {
"items": [
{"msg_type": "post", "body": {"content": json.dumps(post)}}
]
},
}
)
monkeypatch.setattr(
"channel.feishu.feishu_message.requests.get", lambda **kwargs: response
)
message = FeishuMessage(_event(), access_token="tenant-token")
assert message.quoted_content == (
"Release note\nFixed the scheduler.\nDetails (https://example.com)"
)
def test_quote_fetch_failure_keeps_current_message_usable(monkeypatch):
def fail(**kwargs):
raise TimeoutError("network timeout")
monkeypatch.setattr("channel.feishu.feishu_message.requests.get", fail)
message = FeishuMessage(_event(), access_token="tenant-token")
assert message.quoted_content == ""
assert message.content_with_quote() == "What does this mean?"
def test_message_without_parent_does_not_fetch(monkeypatch):
def unexpected(**kwargs):
raise AssertionError("quote API should not be called")
monkeypatch.setattr("channel.feishu.feishu_message.requests.get", unexpected)
message = FeishuMessage(_event(parent_id=""), access_token="tenant-token")
assert message.quoted_content == ""
assert message.content_with_quote() == "What does this mean?"