89 lines
2.6 KiB
Python
89 lines
2.6 KiB
Python
import json
|
|
|
|
from nanobot.channels.feishu.runtime import (
|
|
_extract_element_content,
|
|
_extract_post_content,
|
|
_extract_share_card_content,
|
|
)
|
|
|
|
|
|
def test_extract_interactive_card_reads_user_dsl_body_elements() -> None:
|
|
content = {
|
|
"user_dsl": json.dumps(
|
|
{
|
|
"schema": "2.0",
|
|
"body": {"elements": [{"tag": "markdown", "content": "**hello**"}]},
|
|
}
|
|
)
|
|
}
|
|
|
|
assert _extract_share_card_content(content, "interactive") == "**hello**"
|
|
|
|
|
|
def test_extract_interactive_card_reads_nested_text_elements() -> None:
|
|
content = {"elements": [[{"tag": "text", "text": "hello"}]]}
|
|
|
|
assert _extract_share_card_content(content, "interactive") == "hello"
|
|
|
|
|
|
def test_extract_interactive_card_reads_table_rows() -> None:
|
|
content = {
|
|
"elements": [
|
|
{
|
|
"tag": "table",
|
|
"columns": [
|
|
{"name": "c0", "display_name": "Name"},
|
|
{"name": "c1", "display_name": "Score"},
|
|
],
|
|
"rows": [{"c0": "Alice", "c1": 98}],
|
|
}
|
|
]
|
|
}
|
|
|
|
assert _extract_share_card_content(content, "interactive") == "Name | Score\nAlice | 98"
|
|
|
|
|
|
def test_extract_post_content_tolerates_null_fields() -> None:
|
|
text, images = _extract_post_content(
|
|
{
|
|
"title": None,
|
|
"content": [
|
|
[
|
|
{"tag": "text", "text": None},
|
|
{"tag": "a", "text": None},
|
|
{"tag": "at", "user_name": None},
|
|
{"tag": "text", "text": "ok"},
|
|
{"tag": "code_block", "language": None, "text": None},
|
|
]
|
|
],
|
|
}
|
|
)
|
|
assert "@user" in text
|
|
assert "ok" in text
|
|
assert images == []
|
|
|
|
|
|
def test_extract_button_tolerates_null_multi_url() -> None:
|
|
element = {"tag": "button", "text": {"content": "Go"}, "multi_url": None}
|
|
assert _extract_element_content(element) == ["Go"]
|
|
|
|
|
|
def test_extract_column_set_tolerates_null_columns_and_elements() -> None:
|
|
assert _extract_element_content({"tag": "column_set", "columns": None}) == []
|
|
assert _extract_element_content(
|
|
{"tag": "column_set", "columns": [{"elements": None}]}
|
|
) == []
|
|
|
|
|
|
def test_extract_div_tolerates_null_fields() -> None:
|
|
assert _extract_element_content(
|
|
{"tag": "div", "text": {"content": "hi"}, "fields": None}
|
|
) == ["hi"]
|
|
|
|
|
|
def test_interactive_card_button_null_multi_url() -> None:
|
|
content = {
|
|
"elements": [{"tag": "button", "text": {"content": "Go"}, "multi_url": None}]
|
|
}
|
|
assert _extract_share_card_content(content, "interactive") == "Go"
|