mirror of
https://github.com/zhayujie/chatgpt-on-wechat.git
synced 2026-07-19 21:07:28 +08:00
106 lines
3.1 KiB
Python
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?"
|