diff --git a/elementary/messages/formats/block_kit.py b/elementary/messages/formats/block_kit.py index a0cc0cd79..ba45353d6 100644 --- a/elementary/messages/formats/block_kit.py +++ b/elementary/messages/formats/block_kit.py @@ -2,7 +2,6 @@ from typing import Any, Callable, List, Optional, Tuple from slack_sdk.models import blocks as slack_blocks -from tabulate import tabulate from elementary.messages.blocks import ( ActionBlock, @@ -50,7 +49,8 @@ class FormattedBlockKitMessage(BaseModel): class BlockKitBuilder: _SECONDARY_FACT_CHUNK_SIZE = 2 _LONGEST_MARKDOWN_SUFFIX_LEN = 3 # length of markdown's code suffix (```) - _MAX_CELL_LENGTH_BY_COLUMN_COUNT = {4: 11, 3: 14, 2: 22, 1: 40, 0: 40} + _MAX_SLACK_TABLE_COLUMNS = 20 + _MAX_SLACK_TABLE_ROWS = 100 def __init__( self, resolve_mention: Optional[ResolveMentionCallback] = None @@ -58,6 +58,7 @@ def __init__( self._blocks: List[dict] = [] self._attachment_blocks: List[dict] = [] self._is_divided = False + self._has_table_block = False self._resolve_mention = resolve_mention or (lambda x: None) def _format_icon(self, icon: Icon) -> str: @@ -98,13 +99,6 @@ def _format_line_block_text(self, block: LineBlock) -> str: [self._format_inline_block(inline) for inline in block.inlines] ) - def _format_table_cell(self, cell_value: Any, column_count: int) -> str: - value = str(cell_value) - max_cell_length = self._MAX_CELL_LENGTH_BY_COLUMN_COUNT[column_count] - if len(value) > max_cell_length: - return value[: max_cell_length - 2] + ".." - return value - def _format_markdown_section_text(self, text: str) -> dict: if len(text) > slack_blocks.SectionBlock.text_max_length: text = ( @@ -257,24 +251,50 @@ def _add_divider_block(self, block: DividerBlock) -> None: self._add_block({"type": "divider"}) self._is_divided = True + def _make_header_cell(self, text: str) -> dict: + return { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + {"type": "text", "text": str(text), "style": {"bold": True}} + ], + } + ], + } + + def _make_data_cell(self, value: Any) -> dict: + text = str(value) if value is not None else "NULL" + return {"type": "raw_text", "text": text or " "} + def _add_table_block(self, block: TableBlock) -> None: column_count = len(block.headers) - if column_count not in self._MAX_CELL_LENGTH_BY_COLUMN_COUNT: + + if column_count > self._MAX_SLACK_TABLE_COLUMNS or self._has_table_block: dicts = [ {header: cell for header, cell in zip(block.headers, row)} for row in block.rows ] - table_text = json.dumps(dicts, indent=2) - else: - new_rows = [ - [self._format_table_cell(cell, column_count) for cell in row] - for row in block.rows - ] - new_headers = [ - self._format_table_cell(cell, column_count) for cell in block.headers - ] - table_text = tabulate(new_rows, headers=new_headers, tablefmt="simple") - self._add_block(self._format_markdown_section(f"```{table_text}```")) + self._add_block( + self._format_markdown_section(f"```{json.dumps(dicts, indent=2)}```") + ) + return + + rows: List[List[dict]] = [[self._make_header_cell(h) for h in block.headers]] + for row in block.rows[: self._MAX_SLACK_TABLE_ROWS - 1]: + rows.append([self._make_data_cell(v) for v in row]) + + self._add_block( + { + "type": "table", + "rows": rows, + "column_settings": [ + {"align": "left", "is_wrapped": False} for _ in block.headers + ], + } + ) + self._has_table_block = True def _add_actions_block(self, block: ActionsBlock) -> None: self._add_block( @@ -337,6 +357,7 @@ def _get_final_blocks( def build(self, message: MessageBody) -> FormattedBlockKitMessage: self._blocks = [] self._attachment_blocks = [] + self._has_table_block = False self._add_message_blocks(message.blocks) color_code = COLOR_MAP.get(message.color) if message.color else None blocks, attachment_blocks = self._get_final_blocks(message.color) diff --git a/tests/unit/alerts/alert_messages/fixtures/block_kit/dbt_test_alert_status-error_link-True_description-True_tags-True_owners-True_table-True_error-True_sample-True_env-True.json b/tests/unit/alerts/alert_messages/fixtures/block_kit/dbt_test_alert_status-error_link-True_description-True_tags-True_owners-True_table-True_error-True_sample-True_env-True.json index 188d7aa62..58ae33fdc 100644 --- a/tests/unit/alerts/alert_messages/fixtures/block_kit/dbt_test_alert_status-error_link-True_description-True_tags-True_owners-True_table-True_error-True_sample-True_env-True.json +++ b/tests/unit/alerts/alert_messages/fixtures/block_kit/dbt_test_alert_status-error_link-True_description-True_tags-True_owners-True_table-True_error-True_sample-True_env-True.json @@ -89,11 +89,65 @@ } }, { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "```column1 column2\n--------- ---------\nvalue1 value2```" - } + "type": "table", + "rows": [ + [ + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "column1", + "style": { + "bold": true + } + } + ] + } + ] + }, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "column2", + "style": { + "bold": true + } + } + ] + } + ] + } + ], + [ + { + "type": "raw_text", + "text": "value1" + }, + { + "type": "raw_text", + "text": "value2" + } + ] + ], + "column_settings": [ + { + "align": "left", + "is_wrapped": false + }, + { + "align": "left", + "is_wrapped": false + } + ] } ], "color": "#ff0000" diff --git a/tests/unit/alerts/alert_messages/fixtures/block_kit/dbt_test_alert_status-fail_link-True_description-True_tags-True_owners-True_table-True_error-True_sample-True_env-False.json b/tests/unit/alerts/alert_messages/fixtures/block_kit/dbt_test_alert_status-fail_link-True_description-True_tags-True_owners-True_table-True_error-True_sample-True_env-False.json index 2910995f8..e0af9cbd8 100644 --- a/tests/unit/alerts/alert_messages/fixtures/block_kit/dbt_test_alert_status-fail_link-True_description-True_tags-True_owners-True_table-True_error-True_sample-True_env-False.json +++ b/tests/unit/alerts/alert_messages/fixtures/block_kit/dbt_test_alert_status-fail_link-True_description-True_tags-True_owners-True_table-True_error-True_sample-True_env-False.json @@ -89,11 +89,65 @@ } }, { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "```column1 column2\n--------- ---------\nvalue1 value2```" - } + "type": "table", + "rows": [ + [ + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "column1", + "style": { + "bold": true + } + } + ] + } + ] + }, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "column2", + "style": { + "bold": true + } + } + ] + } + ] + } + ], + [ + { + "type": "raw_text", + "text": "value1" + }, + { + "type": "raw_text", + "text": "value2" + } + ] + ], + "column_settings": [ + { + "align": "left", + "is_wrapped": false + }, + { + "align": "left", + "is_wrapped": false + } + ] } ], "color": "#ff0000" diff --git a/tests/unit/alerts/alert_messages/fixtures/block_kit/dbt_test_alert_status-warn_link-True_description-False_tags-True_owners-False_table-True_error-False_sample-True_env-False.json b/tests/unit/alerts/alert_messages/fixtures/block_kit/dbt_test_alert_status-warn_link-True_description-False_tags-True_owners-False_table-True_error-False_sample-True_env-False.json index 0ecdbba46..11984223d 100644 --- a/tests/unit/alerts/alert_messages/fixtures/block_kit/dbt_test_alert_status-warn_link-True_description-False_tags-True_owners-False_table-True_error-False_sample-True_env-False.json +++ b/tests/unit/alerts/alert_messages/fixtures/block_kit/dbt_test_alert_status-warn_link-True_description-False_tags-True_owners-False_table-True_error-False_sample-True_env-False.json @@ -68,11 +68,65 @@ } }, { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "```column1 column2\n--------- ---------\nvalue1 value2```" - } + "type": "table", + "rows": [ + [ + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "column1", + "style": { + "bold": true + } + } + ] + } + ] + }, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "column2", + "style": { + "bold": true + } + } + ] + } + ] + } + ], + [ + { + "type": "raw_text", + "text": "value1" + }, + { + "type": "raw_text", + "text": "value2" + } + ] + ], + "column_settings": [ + { + "align": "left", + "is_wrapped": false + }, + { + "align": "left", + "is_wrapped": false + } + ] } ], "color": "#ffcc00" diff --git a/tests/unit/alerts/alert_messages/fixtures/block_kit/dbt_test_alert_status-warn_link-True_description-True_tags-True_owners-True_table-True_error-True_sample-True_env-True.json b/tests/unit/alerts/alert_messages/fixtures/block_kit/dbt_test_alert_status-warn_link-True_description-True_tags-True_owners-True_table-True_error-True_sample-True_env-True.json index 4675c7c1b..912daab28 100644 --- a/tests/unit/alerts/alert_messages/fixtures/block_kit/dbt_test_alert_status-warn_link-True_description-True_tags-True_owners-True_table-True_error-True_sample-True_env-True.json +++ b/tests/unit/alerts/alert_messages/fixtures/block_kit/dbt_test_alert_status-warn_link-True_description-True_tags-True_owners-True_table-True_error-True_sample-True_env-True.json @@ -89,11 +89,65 @@ } }, { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "```column1 column2\n--------- ---------\nvalue1 value2```" - } + "type": "table", + "rows": [ + [ + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "column1", + "style": { + "bold": true + } + } + ] + } + ] + }, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "column2", + "style": { + "bold": true + } + } + ] + } + ] + } + ], + [ + { + "type": "raw_text", + "text": "value1" + }, + { + "type": "raw_text", + "text": "value2" + } + ] + ], + "column_settings": [ + { + "align": "left", + "is_wrapped": false + }, + { + "align": "left", + "is_wrapped": false + } + ] } ], "color": "#ffcc00" diff --git a/tests/unit/messages/formats/block_kit/fixtures/all_blocks_green.json b/tests/unit/messages/formats/block_kit/fixtures/all_blocks_green.json index bcf2d3ff9..b0a4b690d 100644 --- a/tests/unit/messages/formats/block_kit/fixtures/all_blocks_green.json +++ b/tests/unit/messages/formats/block_kit/fixtures/all_blocks_green.json @@ -56,11 +56,104 @@ ] }, { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "```Column 1 Column 2 Column 3\n----------- ----------- -----------\nRow 1 Col 1 Row 1 Col 2 Row 1 Col 3\nRow 2 Col 1 Row 2 Col 2 Row 2 Col 3```" - } + "type": "table", + "rows": [ + [ + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 1", + "style": { + "bold": true + } + } + ] + } + ] + }, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 2", + "style": { + "bold": true + } + } + ] + } + ] + }, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 3", + "style": { + "bold": true + } + } + ] + } + ] + } + ], + [ + { + "type": "raw_text", + "text": "Row 1 Col 1" + }, + { + "type": "raw_text", + "text": "Row 1 Col 2" + }, + { + "type": "raw_text", + "text": "Row 1 Col 3" + } + ], + [ + { + "type": "raw_text", + "text": "Row 2 Col 1" + }, + { + "type": "raw_text", + "text": "Row 2 Col 2" + }, + { + "type": "raw_text", + "text": "Row 2 Col 3" + } + ] + ], + "column_settings": [ + { + "align": "left", + "is_wrapped": false + }, + { + "align": "left", + "is_wrapped": false + }, + { + "align": "left", + "is_wrapped": false + } + ] }, { "type": "section", diff --git a/tests/unit/messages/formats/block_kit/fixtures/all_blocks_no_color.json b/tests/unit/messages/formats/block_kit/fixtures/all_blocks_no_color.json index 428e3bae1..ba5c8e2ec 100644 --- a/tests/unit/messages/formats/block_kit/fixtures/all_blocks_no_color.json +++ b/tests/unit/messages/formats/block_kit/fixtures/all_blocks_no_color.json @@ -56,11 +56,104 @@ ] }, { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "```Column 1 Column 2 Column 3\n----------- ----------- -----------\nRow 1 Col 1 Row 1 Col 2 Row 1 Col 3\nRow 2 Col 1 Row 2 Col 2 Row 2 Col 3```" - } + "type": "table", + "rows": [ + [ + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 1", + "style": { + "bold": true + } + } + ] + } + ] + }, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 2", + "style": { + "bold": true + } + } + ] + } + ] + }, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 3", + "style": { + "bold": true + } + } + ] + } + ] + } + ], + [ + { + "type": "raw_text", + "text": "Row 1 Col 1" + }, + { + "type": "raw_text", + "text": "Row 1 Col 2" + }, + { + "type": "raw_text", + "text": "Row 1 Col 3" + } + ], + [ + { + "type": "raw_text", + "text": "Row 2 Col 1" + }, + { + "type": "raw_text", + "text": "Row 2 Col 2" + }, + { + "type": "raw_text", + "text": "Row 2 Col 3" + } + ] + ], + "column_settings": [ + { + "align": "left", + "is_wrapped": false + }, + { + "align": "left", + "is_wrapped": false + }, + { + "align": "left", + "is_wrapped": false + } + ] }, { "type": "section", diff --git a/tests/unit/messages/formats/block_kit/fixtures/all_blocks_red.json b/tests/unit/messages/formats/block_kit/fixtures/all_blocks_red.json index b0cf27e8a..68d14e719 100644 --- a/tests/unit/messages/formats/block_kit/fixtures/all_blocks_red.json +++ b/tests/unit/messages/formats/block_kit/fixtures/all_blocks_red.json @@ -56,11 +56,104 @@ ] }, { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "```Column 1 Column 2 Column 3\n----------- ----------- -----------\nRow 1 Col 1 Row 1 Col 2 Row 1 Col 3\nRow 2 Col 1 Row 2 Col 2 Row 2 Col 3```" - } + "type": "table", + "rows": [ + [ + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 1", + "style": { + "bold": true + } + } + ] + } + ] + }, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 2", + "style": { + "bold": true + } + } + ] + } + ] + }, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 3", + "style": { + "bold": true + } + } + ] + } + ] + } + ], + [ + { + "type": "raw_text", + "text": "Row 1 Col 1" + }, + { + "type": "raw_text", + "text": "Row 1 Col 2" + }, + { + "type": "raw_text", + "text": "Row 1 Col 3" + } + ], + [ + { + "type": "raw_text", + "text": "Row 2 Col 1" + }, + { + "type": "raw_text", + "text": "Row 2 Col 2" + }, + { + "type": "raw_text", + "text": "Row 2 Col 3" + } + ] + ], + "column_settings": [ + { + "align": "left", + "is_wrapped": false + }, + { + "align": "left", + "is_wrapped": false + }, + { + "align": "left", + "is_wrapped": false + } + ] }, { "type": "section", diff --git a/tests/unit/messages/formats/block_kit/fixtures/all_blocks_yellow.json b/tests/unit/messages/formats/block_kit/fixtures/all_blocks_yellow.json index 63df6a92b..ebba45840 100644 --- a/tests/unit/messages/formats/block_kit/fixtures/all_blocks_yellow.json +++ b/tests/unit/messages/formats/block_kit/fixtures/all_blocks_yellow.json @@ -56,11 +56,104 @@ ] }, { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "```Column 1 Column 2 Column 3\n----------- ----------- -----------\nRow 1 Col 1 Row 1 Col 2 Row 1 Col 3\nRow 2 Col 1 Row 2 Col 2 Row 2 Col 3```" - } + "type": "table", + "rows": [ + [ + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 1", + "style": { + "bold": true + } + } + ] + } + ] + }, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 2", + "style": { + "bold": true + } + } + ] + } + ] + }, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 3", + "style": { + "bold": true + } + } + ] + } + ] + } + ], + [ + { + "type": "raw_text", + "text": "Row 1 Col 1" + }, + { + "type": "raw_text", + "text": "Row 1 Col 2" + }, + { + "type": "raw_text", + "text": "Row 1 Col 3" + } + ], + [ + { + "type": "raw_text", + "text": "Row 2 Col 1" + }, + { + "type": "raw_text", + "text": "Row 2 Col 2" + }, + { + "type": "raw_text", + "text": "Row 2 Col 3" + } + ] + ], + "column_settings": [ + { + "align": "left", + "is_wrapped": false + }, + { + "align": "left", + "is_wrapped": false + }, + { + "align": "left", + "is_wrapped": false + } + ] }, { "type": "section", diff --git a/tests/unit/messages/formats/block_kit/fixtures/table_block_200_1.json b/tests/unit/messages/formats/block_kit/fixtures/table_block_200_1.json index 0ffbc88b2..e628e6921 100644 --- a/tests/unit/messages/formats/block_kit/fixtures/table_block_200_1.json +++ b/tests/unit/messages/formats/block_kit/fixtures/table_block_200_1.json @@ -1,11 +1,64 @@ { "blocks": [ { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "```Column 0\n----------------------------------------\nLorem ipsum dolor sit amet, consectetu..\nLorem ipsum dolor sit amet, consectetu..\nLorem ipsum dolor sit amet, consectetu..\nLorem ipsum dolor sit amet, consectetu..\nLorem ipsum dolor sit amet, consectetu..```" - } + "type": "table", + "rows": [ + [ + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 0", + "style": { + "bold": true + } + } + ] + } + ] + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + } + ] + ], + "column_settings": [ + { + "align": "left", + "is_wrapped": false + } + ] } ], "attachments": [ diff --git a/tests/unit/messages/formats/block_kit/fixtures/table_block_200_2.json b/tests/unit/messages/formats/block_kit/fixtures/table_block_200_2.json index 6ad6af65e..c3c2c45d2 100644 --- a/tests/unit/messages/formats/block_kit/fixtures/table_block_200_2.json +++ b/tests/unit/messages/formats/block_kit/fixtures/table_block_200_2.json @@ -1,11 +1,105 @@ { "blocks": [ { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "```Column 0 Column 1\n---------------------- ----------------------\nLorem ipsum dolor si.. Lorem ipsum dolor si..\nLorem ipsum dolor si.. Lorem ipsum dolor si..\nLorem ipsum dolor si.. Lorem ipsum dolor si..\nLorem ipsum dolor si.. Lorem ipsum dolor si..\nLorem ipsum dolor si.. Lorem ipsum dolor si..```" - } + "type": "table", + "rows": [ + [ + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 0", + "style": { + "bold": true + } + } + ] + } + ] + }, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 1", + "style": { + "bold": true + } + } + ] + } + ] + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + } + ] + ], + "column_settings": [ + { + "align": "left", + "is_wrapped": false + }, + { + "align": "left", + "is_wrapped": false + } + ] } ], "attachments": [ diff --git a/tests/unit/messages/formats/block_kit/fixtures/table_block_200_3.json b/tests/unit/messages/formats/block_kit/fixtures/table_block_200_3.json index 9253322f7..1a126c765 100644 --- a/tests/unit/messages/formats/block_kit/fixtures/table_block_200_3.json +++ b/tests/unit/messages/formats/block_kit/fixtures/table_block_200_3.json @@ -1,11 +1,146 @@ { "blocks": [ { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "```Column 0 Column 1 Column 2\n-------------- -------------- --------------\nLorem ipsum .. Lorem ipsum .. Lorem ipsum ..\nLorem ipsum .. Lorem ipsum .. Lorem ipsum ..\nLorem ipsum .. Lorem ipsum .. Lorem ipsum ..\nLorem ipsum .. Lorem ipsum .. Lorem ipsum ..\nLorem ipsum .. Lorem ipsum .. Lorem ipsum ..```" - } + "type": "table", + "rows": [ + [ + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 0", + "style": { + "bold": true + } + } + ] + } + ] + }, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 1", + "style": { + "bold": true + } + } + ] + } + ] + }, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 2", + "style": { + "bold": true + } + } + ] + } + ] + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + } + ] + ], + "column_settings": [ + { + "align": "left", + "is_wrapped": false + }, + { + "align": "left", + "is_wrapped": false + }, + { + "align": "left", + "is_wrapped": false + } + ] } ], "attachments": [ diff --git a/tests/unit/messages/formats/block_kit/fixtures/table_block_200_4.json b/tests/unit/messages/formats/block_kit/fixtures/table_block_200_4.json index 94f2cb148..25e34b86d 100644 --- a/tests/unit/messages/formats/block_kit/fixtures/table_block_200_4.json +++ b/tests/unit/messages/formats/block_kit/fixtures/table_block_200_4.json @@ -1,11 +1,187 @@ { "blocks": [ { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "```Column 0 Column 1 Column 2 Column 3\n----------- ----------- ----------- -----------\nLorem ips.. Lorem ips.. Lorem ips.. Lorem ips..\nLorem ips.. Lorem ips.. Lorem ips.. Lorem ips..\nLorem ips.. Lorem ips.. Lorem ips.. Lorem ips..\nLorem ips.. Lorem ips.. Lorem ips.. Lorem ips..\nLorem ips.. Lorem ips.. Lorem ips.. Lorem ips..```" - } + "type": "table", + "rows": [ + [ + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 0", + "style": { + "bold": true + } + } + ] + } + ] + }, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 1", + "style": { + "bold": true + } + } + ] + } + ] + }, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 2", + "style": { + "bold": true + } + } + ] + } + ] + }, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 3", + "style": { + "bold": true + } + } + ] + } + ] + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + } + ] + ], + "column_settings": [ + { + "align": "left", + "is_wrapped": false + }, + { + "align": "left", + "is_wrapped": false + }, + { + "align": "left", + "is_wrapped": false + }, + { + "align": "left", + "is_wrapped": false + } + ] } ], "attachments": [ diff --git a/tests/unit/messages/formats/block_kit/fixtures/table_block_200_5.json b/tests/unit/messages/formats/block_kit/fixtures/table_block_200_5.json index a9e7416dc..68d9ad79c 100644 --- a/tests/unit/messages/formats/block_kit/fixtures/table_block_200_5.json +++ b/tests/unit/messages/formats/block_kit/fixtures/table_block_200_5.json @@ -1,11 +1,228 @@ { "blocks": [ { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "```[\n {\n \"Column 0\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c\",\n \"Column 1\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c\",\n \"Column 2\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c\",\n \"Column 3\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c\",\n \"Column 4\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c\"\n },\n {\n \"Column 0\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c\",\n \"Column 1\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c\",\n \"Column 2\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c\",\n \"Column 3\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c\",\n \"Column 4\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c\"\n },\n {\n \"Column 0\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c\",\n \"Column 1\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c\",\n \"Column 2\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c\",\n \"Column 3\": \"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consect...```" - } + "type": "table", + "rows": [ + [ + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 0", + "style": { + "bold": true + } + } + ] + } + ] + }, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 1", + "style": { + "bold": true + } + } + ] + } + ] + }, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 2", + "style": { + "bold": true + } + } + ] + } + ] + }, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 3", + "style": { + "bold": true + } + } + ] + } + ] + }, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 4", + "style": { + "bold": true + } + } + ] + } + ] + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, c" + } + ] + ], + "column_settings": [ + { + "align": "left", + "is_wrapped": false + }, + { + "align": "left", + "is_wrapped": false + }, + { + "align": "left", + "is_wrapped": false + }, + { + "align": "left", + "is_wrapped": false + }, + { + "align": "left", + "is_wrapped": false + } + ] } ], "attachments": [ diff --git a/tests/unit/messages/formats/block_kit/fixtures/table_block_30_1.json b/tests/unit/messages/formats/block_kit/fixtures/table_block_30_1.json index fbed4f006..669e05c13 100644 --- a/tests/unit/messages/formats/block_kit/fixtures/table_block_30_1.json +++ b/tests/unit/messages/formats/block_kit/fixtures/table_block_30_1.json @@ -1,11 +1,64 @@ { "blocks": [ { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "```Column 0\n------------------------------\nLorem ipsum dolor sit amet, co\nLorem ipsum dolor sit amet, co\nLorem ipsum dolor sit amet, co\nLorem ipsum dolor sit amet, co\nLorem ipsum dolor sit amet, co```" - } + "type": "table", + "rows": [ + [ + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 0", + "style": { + "bold": true + } + } + ] + } + ] + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + ], + "column_settings": [ + { + "align": "left", + "is_wrapped": false + } + ] } ], "attachments": [ diff --git a/tests/unit/messages/formats/block_kit/fixtures/table_block_30_2.json b/tests/unit/messages/formats/block_kit/fixtures/table_block_30_2.json index 6ad6af65e..cfefb0376 100644 --- a/tests/unit/messages/formats/block_kit/fixtures/table_block_30_2.json +++ b/tests/unit/messages/formats/block_kit/fixtures/table_block_30_2.json @@ -1,11 +1,105 @@ { "blocks": [ { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "```Column 0 Column 1\n---------------------- ----------------------\nLorem ipsum dolor si.. Lorem ipsum dolor si..\nLorem ipsum dolor si.. Lorem ipsum dolor si..\nLorem ipsum dolor si.. Lorem ipsum dolor si..\nLorem ipsum dolor si.. Lorem ipsum dolor si..\nLorem ipsum dolor si.. Lorem ipsum dolor si..```" - } + "type": "table", + "rows": [ + [ + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 0", + "style": { + "bold": true + } + } + ] + } + ] + }, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 1", + "style": { + "bold": true + } + } + ] + } + ] + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + ], + "column_settings": [ + { + "align": "left", + "is_wrapped": false + }, + { + "align": "left", + "is_wrapped": false + } + ] } ], "attachments": [ diff --git a/tests/unit/messages/formats/block_kit/fixtures/table_block_30_3.json b/tests/unit/messages/formats/block_kit/fixtures/table_block_30_3.json index 9253322f7..78cbaef38 100644 --- a/tests/unit/messages/formats/block_kit/fixtures/table_block_30_3.json +++ b/tests/unit/messages/formats/block_kit/fixtures/table_block_30_3.json @@ -1,11 +1,146 @@ { "blocks": [ { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "```Column 0 Column 1 Column 2\n-------------- -------------- --------------\nLorem ipsum .. Lorem ipsum .. Lorem ipsum ..\nLorem ipsum .. Lorem ipsum .. Lorem ipsum ..\nLorem ipsum .. Lorem ipsum .. Lorem ipsum ..\nLorem ipsum .. Lorem ipsum .. Lorem ipsum ..\nLorem ipsum .. Lorem ipsum .. Lorem ipsum ..```" - } + "type": "table", + "rows": [ + [ + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 0", + "style": { + "bold": true + } + } + ] + } + ] + }, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 1", + "style": { + "bold": true + } + } + ] + } + ] + }, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 2", + "style": { + "bold": true + } + } + ] + } + ] + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + ], + "column_settings": [ + { + "align": "left", + "is_wrapped": false + }, + { + "align": "left", + "is_wrapped": false + }, + { + "align": "left", + "is_wrapped": false + } + ] } ], "attachments": [ diff --git a/tests/unit/messages/formats/block_kit/fixtures/table_block_30_4.json b/tests/unit/messages/formats/block_kit/fixtures/table_block_30_4.json index 94f2cb148..76cc5bc34 100644 --- a/tests/unit/messages/formats/block_kit/fixtures/table_block_30_4.json +++ b/tests/unit/messages/formats/block_kit/fixtures/table_block_30_4.json @@ -1,11 +1,187 @@ { "blocks": [ { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "```Column 0 Column 1 Column 2 Column 3\n----------- ----------- ----------- -----------\nLorem ips.. Lorem ips.. Lorem ips.. Lorem ips..\nLorem ips.. Lorem ips.. Lorem ips.. Lorem ips..\nLorem ips.. Lorem ips.. Lorem ips.. Lorem ips..\nLorem ips.. Lorem ips.. Lorem ips.. Lorem ips..\nLorem ips.. Lorem ips.. Lorem ips.. Lorem ips..```" - } + "type": "table", + "rows": [ + [ + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 0", + "style": { + "bold": true + } + } + ] + } + ] + }, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 1", + "style": { + "bold": true + } + } + ] + } + ] + }, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 2", + "style": { + "bold": true + } + } + ] + } + ] + }, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 3", + "style": { + "bold": true + } + } + ] + } + ] + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + ], + "column_settings": [ + { + "align": "left", + "is_wrapped": false + }, + { + "align": "left", + "is_wrapped": false + }, + { + "align": "left", + "is_wrapped": false + }, + { + "align": "left", + "is_wrapped": false + } + ] } ], "attachments": [ diff --git a/tests/unit/messages/formats/block_kit/fixtures/table_block_30_5.json b/tests/unit/messages/formats/block_kit/fixtures/table_block_30_5.json index fd021cbd2..01cce78de 100644 --- a/tests/unit/messages/formats/block_kit/fixtures/table_block_30_5.json +++ b/tests/unit/messages/formats/block_kit/fixtures/table_block_30_5.json @@ -1,11 +1,228 @@ { "blocks": [ { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "```[\n {\n \"Column 0\": \"Lorem ipsum dolor sit amet, co\",\n \"Column 1\": \"Lorem ipsum dolor sit amet, co\",\n \"Column 2\": \"Lorem ipsum dolor sit amet, co\",\n \"Column 3\": \"Lorem ipsum dolor sit amet, co\",\n \"Column 4\": \"Lorem ipsum dolor sit amet, co\"\n },\n {\n \"Column 0\": \"Lorem ipsum dolor sit amet, co\",\n \"Column 1\": \"Lorem ipsum dolor sit amet, co\",\n \"Column 2\": \"Lorem ipsum dolor sit amet, co\",\n \"Column 3\": \"Lorem ipsum dolor sit amet, co\",\n \"Column 4\": \"Lorem ipsum dolor sit amet, co\"\n },\n {\n \"Column 0\": \"Lorem ipsum dolor sit amet, co\",\n \"Column 1\": \"Lorem ipsum dolor sit amet, co\",\n \"Column 2\": \"Lorem ipsum dolor sit amet, co\",\n \"Column 3\": \"Lorem ipsum dolor sit amet, co\",\n \"Column 4\": \"Lorem ipsum dolor sit amet, co\"\n },\n {\n \"Column 0\": \"Lorem ipsum dolor sit amet, co\",\n \"Column 1\": \"Lorem ipsum dolor sit amet, co\",\n \"Column 2\": \"Lorem ipsum dolor sit amet, co\",\n \"Column 3\": \"Lorem ipsum dolor sit amet, co\",\n \"Column 4\": \"Lorem ipsum dolor sit amet, co\"\n },\n {\n \"Column 0\": \"Lorem ipsum dolor sit amet, co\",\n \"Column 1\": \"Lorem ipsum dolor sit amet, co\",\n \"Column 2\": \"Lorem ipsum dolor sit amet, co\",\n \"Column 3\": \"Lorem ipsum dolor sit amet, co\",\n \"Column 4\": \"Lorem ipsum dolor sit amet, co\"\n }\n]```" - } + "type": "table", + "rows": [ + [ + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 0", + "style": { + "bold": true + } + } + ] + } + ] + }, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 1", + "style": { + "bold": true + } + } + ] + } + ] + }, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 2", + "style": { + "bold": true + } + } + ] + } + ] + }, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 3", + "style": { + "bold": true + } + } + ] + } + ] + }, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 4", + "style": { + "bold": true + } + } + ] + } + ] + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + }, + { + "type": "raw_text", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + ], + "column_settings": [ + { + "align": "left", + "is_wrapped": false + }, + { + "align": "left", + "is_wrapped": false + }, + { + "align": "left", + "is_wrapped": false + }, + { + "align": "left", + "is_wrapped": false + }, + { + "align": "left", + "is_wrapped": false + } + ] } ], "attachments": [ diff --git a/tests/unit/messages/formats/block_kit/fixtures/table_block_8_1.json b/tests/unit/messages/formats/block_kit/fixtures/table_block_8_1.json index 9323cea71..9a9e228bd 100644 --- a/tests/unit/messages/formats/block_kit/fixtures/table_block_8_1.json +++ b/tests/unit/messages/formats/block_kit/fixtures/table_block_8_1.json @@ -1,11 +1,64 @@ { "blocks": [ { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "```Column 0\n----------\nLorem ip\nLorem ip\nLorem ip\nLorem ip\nLorem ip```" - } + "type": "table", + "rows": [ + [ + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 0", + "style": { + "bold": true + } + } + ] + } + ] + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ip" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ip" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ip" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ip" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ip" + } + ] + ], + "column_settings": [ + { + "align": "left", + "is_wrapped": false + } + ] } ], "attachments": [ diff --git a/tests/unit/messages/formats/block_kit/fixtures/table_block_8_2.json b/tests/unit/messages/formats/block_kit/fixtures/table_block_8_2.json index 1fe46a992..ac2f30dd0 100644 --- a/tests/unit/messages/formats/block_kit/fixtures/table_block_8_2.json +++ b/tests/unit/messages/formats/block_kit/fixtures/table_block_8_2.json @@ -1,11 +1,105 @@ { "blocks": [ { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "```Column 0 Column 1\n---------- ----------\nLorem ip Lorem ip\nLorem ip Lorem ip\nLorem ip Lorem ip\nLorem ip Lorem ip\nLorem ip Lorem ip```" - } + "type": "table", + "rows": [ + [ + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 0", + "style": { + "bold": true + } + } + ] + } + ] + }, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 1", + "style": { + "bold": true + } + } + ] + } + ] + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + } + ] + ], + "column_settings": [ + { + "align": "left", + "is_wrapped": false + }, + { + "align": "left", + "is_wrapped": false + } + ] } ], "attachments": [ diff --git a/tests/unit/messages/formats/block_kit/fixtures/table_block_8_3.json b/tests/unit/messages/formats/block_kit/fixtures/table_block_8_3.json index 3d65ebd40..c8d0d3849 100644 --- a/tests/unit/messages/formats/block_kit/fixtures/table_block_8_3.json +++ b/tests/unit/messages/formats/block_kit/fixtures/table_block_8_3.json @@ -1,11 +1,146 @@ { "blocks": [ { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "```Column 0 Column 1 Column 2\n---------- ---------- ----------\nLorem ip Lorem ip Lorem ip\nLorem ip Lorem ip Lorem ip\nLorem ip Lorem ip Lorem ip\nLorem ip Lorem ip Lorem ip\nLorem ip Lorem ip Lorem ip```" - } + "type": "table", + "rows": [ + [ + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 0", + "style": { + "bold": true + } + } + ] + } + ] + }, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 1", + "style": { + "bold": true + } + } + ] + } + ] + }, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 2", + "style": { + "bold": true + } + } + ] + } + ] + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + } + ] + ], + "column_settings": [ + { + "align": "left", + "is_wrapped": false + }, + { + "align": "left", + "is_wrapped": false + }, + { + "align": "left", + "is_wrapped": false + } + ] } ], "attachments": [ diff --git a/tests/unit/messages/formats/block_kit/fixtures/table_block_8_4.json b/tests/unit/messages/formats/block_kit/fixtures/table_block_8_4.json index 1617e03a0..be5ddcd53 100644 --- a/tests/unit/messages/formats/block_kit/fixtures/table_block_8_4.json +++ b/tests/unit/messages/formats/block_kit/fixtures/table_block_8_4.json @@ -1,11 +1,187 @@ { "blocks": [ { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "```Column 0 Column 1 Column 2 Column 3\n---------- ---------- ---------- ----------\nLorem ip Lorem ip Lorem ip Lorem ip\nLorem ip Lorem ip Lorem ip Lorem ip\nLorem ip Lorem ip Lorem ip Lorem ip\nLorem ip Lorem ip Lorem ip Lorem ip\nLorem ip Lorem ip Lorem ip Lorem ip```" - } + "type": "table", + "rows": [ + [ + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 0", + "style": { + "bold": true + } + } + ] + } + ] + }, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 1", + "style": { + "bold": true + } + } + ] + } + ] + }, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 2", + "style": { + "bold": true + } + } + ] + } + ] + }, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 3", + "style": { + "bold": true + } + } + ] + } + ] + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + } + ] + ], + "column_settings": [ + { + "align": "left", + "is_wrapped": false + }, + { + "align": "left", + "is_wrapped": false + }, + { + "align": "left", + "is_wrapped": false + }, + { + "align": "left", + "is_wrapped": false + } + ] } ], "attachments": [ diff --git a/tests/unit/messages/formats/block_kit/fixtures/table_block_8_5.json b/tests/unit/messages/formats/block_kit/fixtures/table_block_8_5.json index 2cceaa205..f0936b922 100644 --- a/tests/unit/messages/formats/block_kit/fixtures/table_block_8_5.json +++ b/tests/unit/messages/formats/block_kit/fixtures/table_block_8_5.json @@ -1,11 +1,228 @@ { "blocks": [ { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "```[\n {\n \"Column 0\": \"Lorem ip\",\n \"Column 1\": \"Lorem ip\",\n \"Column 2\": \"Lorem ip\",\n \"Column 3\": \"Lorem ip\",\n \"Column 4\": \"Lorem ip\"\n },\n {\n \"Column 0\": \"Lorem ip\",\n \"Column 1\": \"Lorem ip\",\n \"Column 2\": \"Lorem ip\",\n \"Column 3\": \"Lorem ip\",\n \"Column 4\": \"Lorem ip\"\n },\n {\n \"Column 0\": \"Lorem ip\",\n \"Column 1\": \"Lorem ip\",\n \"Column 2\": \"Lorem ip\",\n \"Column 3\": \"Lorem ip\",\n \"Column 4\": \"Lorem ip\"\n },\n {\n \"Column 0\": \"Lorem ip\",\n \"Column 1\": \"Lorem ip\",\n \"Column 2\": \"Lorem ip\",\n \"Column 3\": \"Lorem ip\",\n \"Column 4\": \"Lorem ip\"\n },\n {\n \"Column 0\": \"Lorem ip\",\n \"Column 1\": \"Lorem ip\",\n \"Column 2\": \"Lorem ip\",\n \"Column 3\": \"Lorem ip\",\n \"Column 4\": \"Lorem ip\"\n }\n]```" - } + "type": "table", + "rows": [ + [ + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 0", + "style": { + "bold": true + } + } + ] + } + ] + }, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 1", + "style": { + "bold": true + } + } + ] + } + ] + }, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 2", + "style": { + "bold": true + } + } + ] + } + ] + }, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 3", + "style": { + "bold": true + } + } + ] + } + ] + }, + { + "type": "rich_text", + "elements": [ + { + "type": "rich_text_section", + "elements": [ + { + "type": "text", + "text": "Column 4", + "style": { + "bold": true + } + } + ] + } + ] + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + } + ], + [ + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + }, + { + "type": "raw_text", + "text": "Lorem ip" + } + ] + ], + "column_settings": [ + { + "align": "left", + "is_wrapped": false + }, + { + "align": "left", + "is_wrapped": false + }, + { + "align": "left", + "is_wrapped": false + }, + { + "align": "left", + "is_wrapped": false + }, + { + "align": "left", + "is_wrapped": false + } + ] } ], "attachments": [ diff --git a/tests/unit/messages/formats/block_kit/test_block_kit.py b/tests/unit/messages/formats/block_kit/test_block_kit.py index 1fe44af46..2b9bffa74 100644 --- a/tests/unit/messages/formats/block_kit/test_block_kit.py +++ b/tests/unit/messages/formats/block_kit/test_block_kit.py @@ -1,6 +1,7 @@ import os from pathlib import Path +from elementary.messages.blocks import TableBlock from elementary.messages.formats.block_kit import ( FormattedBlockKitMessage, format_block_kit, @@ -36,3 +37,17 @@ def assert_expected_value( os.environ["TEST_SLACK_CHANNEL"], result ) assert_expected_json(result.dict(), expected_file_path) + + def test_table_block_none_and_empty_cells_produce_non_empty_text(self): + table = TableBlock.from_dicts( + [ + {"col_a": None, "col_b": "value"}, + {"col_a": "", "col_b": "other"}, + ] + ) + result = format_block_kit(MessageBody(blocks=[table])) + table_block = result.blocks[0] + assert table_block["type"] == "table" + for row in table_block["rows"][1:]: # skip header row + for cell in row: + assert cell["text"], f"raw_text cell must not be empty, got: {cell}"