mirror of
https://github.com/zhayujie/chatgpt-on-wechat.git
synced 2026-07-21 22:27:13 +08:00
feat: include Feishu quoted message context
This commit is contained in:
105
tests/test_feishu_quoted_context.py
Normal file
105
tests/test_feishu_quoted_context.py
Normal file
@@ -0,0 +1,105 @@
|
||||
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?"
|
||||
Reference in New Issue
Block a user