aboutsummaryrefslogtreecommitdiffstats
path: root/tests/test_render_blocks.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_render_blocks.py')
-rw-r--r--tests/test_render_blocks.py384
1 files changed, 384 insertions, 0 deletions
diff --git a/tests/test_render_blocks.py b/tests/test_render_blocks.py
new file mode 100644
index 0000000..a8f918c
--- /dev/null
+++ b/tests/test_render_blocks.py
@@ -0,0 +1,384 @@
+from __future__ import annotations
+
+from typing import TYPE_CHECKING, List
+
+import pytest
+
+from slack.slack_message import SlackMessage
+from tests.conftest import (
+ color_reset,
+ color_user_mention,
+ resolve_pending_message_item,
+ user_test1_id,
+)
+
+if TYPE_CHECKING:
+ from slack_api.slack_conversations_history import SlackMessageBlock
+ from typing_extensions import TypedDict
+else:
+ TypedDict = object
+
+
+class Case(TypedDict):
+ blocks: List[SlackMessageBlock]
+ rendered: List[str]
+
+
+cases: List[Case] = [
+ {
+ "blocks": [
+ {
+ "type": "rich_text",
+ "block_id": "dhGA",
+ "elements": [
+ {
+ "type": "rich_text_section",
+ "elements": [
+ {"type": "text", "text": "normal "},
+ {
+ "type": "text",
+ "text": "bold",
+ "style": {"bold": True},
+ },
+ {"type": "text", "text": " "},
+ {
+ "type": "text",
+ "text": "italic",
+ "style": {"italic": True},
+ },
+ {"type": "text", "text": " "},
+ {
+ "type": "text",
+ "text": "strikethrough",
+ "style": {"strike": True},
+ },
+ {"type": "text", "text": " "},
+ {
+ "type": "text",
+ "text": "bold-italic-strikethrough",
+ "style": {
+ "bold": True,
+ "italic": True,
+ "strike": True,
+ },
+ },
+ {"type": "text", "text": " "},
+ {
+ "type": "link",
+ "url": "https://vg.no",
+ "text": "link",
+ },
+ {"type": "text", "text": "\n"},
+ ],
+ },
+ {
+ "type": "rich_text_list",
+ "elements": [
+ {
+ "type": "rich_text_section",
+ "elements": [{"type": "text", "text": "number"}],
+ },
+ {
+ "type": "rich_text_section",
+ "elements": [{"type": "text", "text": "list"}],
+ },
+ ],
+ "style": "ordered",
+ "indent": 0,
+ "border": 0,
+ },
+ {
+ "type": "rich_text_quote",
+ "elements": [
+ {"type": "text", "text": "some quote\nmore quote"}
+ ],
+ },
+ {
+ "type": "rich_text_section",
+ "elements": [
+ {
+ "type": "text",
+ "text": "inline code",
+ "style": {"code": True},
+ },
+ {"type": "text", "text": "\n"},
+ ],
+ },
+ {
+ "type": "rich_text_preformatted",
+ "elements": [{"type": "text", "text": "block code\nmore code"}],
+ "border": 0,
+ },
+ {
+ "type": "rich_text_section",
+ "elements": [
+ {"type": "user", "user_id": user_test1_id},
+ {"type": "text", "text": ": "},
+ {
+ "type": "emoji",
+ "name": "open_mouth",
+ "unicode": "1f62e",
+ },
+ ],
+ },
+ ],
+ }
+ ],
+ "rendered": [
+ "normal <[color:bold]>*bold*<[color:-bold]> <[color:italic]>_italic_"
+ "<[color:-italic]> ~strikethrough~ <[color:bold]><[color:italic]>"
+ "*_~bold-italic-strikethrough~_*<[color:-italic]><[color:-bold]> "
+ "https://vg.no (link)",
+ "1. number",
+ "2. list",
+ "> some quote",
+ "> more quote",
+ "`inline code`",
+ "```",
+ "block code",
+ "more code",
+ "```",
+ f"{color_user_mention}@Test_1{color_reset}: :open_mouth:",
+ ],
+ },
+ {
+ "blocks": [
+ {
+ "type": "rich_text",
+ "block_id": "D=pkP",
+ "elements": [
+ {
+ "type": "rich_text_list",
+ "elements": [
+ {
+ "type": "rich_text_section",
+ "elements": [{"type": "text", "text": "number"}],
+ }
+ ],
+ "style": "ordered",
+ "indent": 0,
+ "border": 0,
+ },
+ {
+ "type": "rich_text_list",
+ "elements": [
+ {
+ "type": "rich_text_section",
+ "elements": [{"type": "text", "text": "list"}],
+ }
+ ],
+ "style": "ordered",
+ "indent": 1,
+ "border": 0,
+ },
+ {
+ "type": "rich_text_list",
+ "elements": [
+ {
+ "type": "rich_text_section",
+ "elements": [{"type": "text", "text": "third"}],
+ }
+ ],
+ "style": "ordered",
+ "indent": 2,
+ "border": 0,
+ },
+ {
+ "type": "rich_text_list",
+ "elements": [
+ {
+ "type": "rich_text_section",
+ "elements": [
+ {"type": "text", "text": "end number list"}
+ ],
+ }
+ ],
+ "style": "ordered",
+ "indent": 0,
+ "offset": 1,
+ "border": 0,
+ },
+ {
+ "type": "rich_text_list",
+ "elements": [
+ {
+ "type": "rich_text_section",
+ "elements": [{"type": "text", "text": "bullet"}],
+ }
+ ],
+ "style": "bullet",
+ "indent": 0,
+ "border": 0,
+ },
+ {
+ "type": "rich_text_list",
+ "elements": [
+ {
+ "type": "rich_text_section",
+ "elements": [{"type": "text", "text": "list"}],
+ }
+ ],
+ "style": "bullet",
+ "indent": 1,
+ "border": 0,
+ },
+ {
+ "type": "rich_text_list",
+ "elements": [
+ {
+ "type": "rich_text_section",
+ "elements": [{"type": "text", "text": "third"}],
+ }
+ ],
+ "style": "bullet",
+ "indent": 2,
+ "border": 0,
+ },
+ {
+ "type": "rich_text_list",
+ "elements": [
+ {
+ "type": "rich_text_section",
+ "elements": [
+ {"type": "text", "text": "end bullet list"}
+ ],
+ }
+ ],
+ "style": "bullet",
+ "indent": 0,
+ "border": 0,
+ },
+ ],
+ }
+ ],
+ "rendered": [
+ "1. number",
+ " a. list",
+ " i. third",
+ "2. end number list",
+ "• bullet",
+ " ◦ list",
+ " ▪︎ third",
+ "• end bullet list",
+ ],
+ },
+ {
+ "blocks": [
+ {
+ "type": "rich_text",
+ "block_id": "usQpu",
+ "elements": [
+ {
+ "type": "rich_text_section",
+ "elements": [
+ {
+ "type": "text",
+ "text": "test ",
+ "style": {"code": True},
+ },
+ {
+ "type": "link",
+ "url": "http://asdf.de",
+ "text": "asdf.de",
+ "style": {"code": True},
+ },
+ {
+ "type": "text",
+ "text": " asdf.de:443",
+ "style": {"code": True},
+ },
+ {"type": "text", "text": "\n"},
+ ],
+ },
+ {
+ "type": "rich_text_preformatted",
+ "elements": [{"type": "text", "text": "asdf.de\nasdf.de:443"}],
+ "border": 0,
+ },
+ ],
+ }
+ ],
+ "rendered": [
+ "`test asdf.de asdf.de:443`",
+ "```",
+ "asdf.de",
+ "asdf.de:443",
+ "```",
+ ],
+ },
+ {
+ "blocks": [
+ {
+ "type": "rich_text",
+ "block_id": "vLtn",
+ "elements": [
+ {
+ "type": "rich_text_section",
+ "elements": [
+ {
+ "type": "text",
+ "text": "bold ",
+ "style": {"bold": True},
+ },
+ {
+ "type": "text",
+ "text": "code ",
+ "style": {"bold": True, "code": True},
+ },
+ {
+ "type": "text",
+ "text": "not bold ",
+ "style": {"code": True},
+ },
+ {
+ "type": "text",
+ "text": "italic",
+ "style": {"italic": True, "code": True},
+ },
+ {
+ "type": "text",
+ "text": " text",
+ "style": {"italic": True},
+ },
+ ],
+ }
+ ],
+ }
+ ],
+ "rendered": [
+ "<[color:bold]>*bold `code *<[color:-bold]>not bold <[color:italic]>_italic` text_<[color:-italic]>",
+ ],
+ },
+ {
+ "blocks": [
+ {
+ "type": "rich_text",
+ "block_id": "28L",
+ "elements": [
+ {
+ "type": "rich_text_section",
+ "elements": [
+ {
+ "type": "text",
+ "text": "bold and italic combined",
+ "style": {"bold": True, "italic": True},
+ }
+ ],
+ }
+ ],
+ }
+ ],
+ "rendered": [
+ "<[color:bold]><[color:italic]>*_bold and italic combined_*<[color:-italic]><[color:-bold]>"
+ ],
+ },
+]
+
+
+@pytest.mark.parametrize("case", cases)
+def test_unfurl_refs(case: Case, message1_in_channel_public: SlackMessage):
+ parsed = message1_in_channel_public._render_blocks( # pyright: ignore [reportPrivateUsage]
+ case["blocks"]
+ )
+ resolved = "".join(resolve_pending_message_item(item) for item in parsed)
+ assert resolved.split("\n") == case["rendered"]