diff options
author | Trygve Aaberge <trygveaa@gmail.com> | 2023-10-15 12:27:15 +0200 |
---|---|---|
committer | Trygve Aaberge <trygveaa@gmail.com> | 2024-02-18 11:32:54 +0100 |
commit | a184d156aba210a81f0e13a9016088431ed50882 (patch) | |
tree | cc6119a109404b2b0d84bdbfff38d0f4cbec44de | |
parent | 3785cec18f56afb0c9b098ff700492543fe63859 (diff) | |
download | wee-slack-a184d156aba210a81f0e13a9016088431ed50882.tar.gz |
Add render blocks tests from old version
-rw-r--r-- | tests/conftest.py | 2 | ||||
-rw-r--r-- | tests/test_render_blocks.py | 384 | ||||
-rw-r--r-- | typings/slack_api/slack_conversations_history.pyi | 13 |
3 files changed, 393 insertions, 6 deletions
diff --git a/tests/conftest.py b/tests/conftest.py index 4a5a762..33e44de 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -43,6 +43,7 @@ import weechat from slack.config import SlackConfig from slack.shared import shared from slack.slack_conversation import SlackConversation +from slack.slack_emoji import load_standard_emojis from slack.slack_message import PendingMessageItem, SlackMessage from slack.slack_user import SlackUser from slack.slack_workspace import SlackWorkspace @@ -95,6 +96,7 @@ weechat.color = color shared.weechat_version = 0x03080000 shared.weechat_callbacks = {} +shared.standard_emojis = load_standard_emojis() color_channel_mention = "<[color:<[config_color:channel_mention]>]>" color_user_mention = "<[color:<[config_color:user_mention]>]>" 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"] diff --git a/typings/slack_api/slack_conversations_history.pyi b/typings/slack_api/slack_conversations_history.pyi index 4f0cfa8..6799f02 100644 --- a/typings/slack_api/slack_conversations_history.pyi +++ b/typings/slack_api/slack_conversations_history.pyi @@ -9,10 +9,10 @@ from typing_extensions import Literal, NotRequired, TypedDict, final @final class SlackMessageBlockRichTextElementTextStyle(TypedDict): - bold: bool - italic: bool - strike: bool - code: bool + bold: NotRequired[bool] + italic: NotRequired[bool] + strike: NotRequired[bool] + code: NotRequired[bool] @final class SlackMessageBlockRichTextElementText(TypedDict): @@ -32,7 +32,7 @@ class SlackMessageBlockRichTextElementEmoji(TypedDict): type: Literal["emoji"] name: str unicode: str - skin_tone: int + skin_tone: NotRequired[int] @final class SlackMessageBlockRichTextElementChannel(TypedDict): @@ -75,6 +75,7 @@ class SlackMessageBlockRichTextPreformatted(TypedDict): elements: List[ SlackMessageBlockRichTextElementText | SlackMessageBlockRichTextElementLink ] + border: int @final class SlackMessageBlockRichTextQuote(TypedDict): @@ -87,7 +88,7 @@ class SlackMessageBlockRichTextList(TypedDict): elements: List[SlackMessageBlockRichTextSection] style: Literal["ordered", "bullet"] indent: int - offset: int + offset: NotRequired[int] border: int @final |