Files
nanobot/nanobot/channels/feishu/tests/test_feishu_card_extraction.py
T

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"