From a184d156aba210a81f0e13a9016088431ed50882 Mon Sep 17 00:00:00 2001 From: Trygve Aaberge Date: Sun, 15 Oct 2023 12:27:15 +0200 Subject: Add render blocks tests from old version --- tests/conftest.py | 2 + tests/test_render_blocks.py | 384 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 386 insertions(+) create mode 100644 tests/test_render_blocks.py (limited to 'tests') 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"] -- cgit