From e9a0c186396abe6f1ea3b61fac213666a11a7a5d Mon Sep 17 00:00:00 2001 From: Ofek Weiss Date: Mon, 17 Feb 2025 16:49:07 +0200 Subject: [PATCH 1/4] Table Block --- elementary/messages/blocks.py | 18 +- elementary/messages/formats/adaptive_cards.py | 28 ++ elementary/messages/formats/block_kit.py | 19 ++ elementary/messages/message_body.py | 2 + .../monitor/alerts/alert_messages/builder.py | 12 +- ...-True_error-True_sample-True_env-True.json | 59 +++- ...True_error-True_sample-True_env-False.json | 59 +++- ...rue_error-False_sample-True_env-False.json | 59 +++- ...-True_error-True_sample-True_env-True.json | 59 +++- .../test_dbt_test_alert_message.py | 2 +- .../fixtures/table_block_200.json | 277 ++++++++++++++++++ .../fixtures/table_block_30.json | 277 ++++++++++++++++++ .../fixtures/table_block_8.json | 277 ++++++++++++++++++ .../unit/messages/formats/base_test_format.py | 28 ++ .../block_kit/fixtures/table_block_200.json | 16 + .../block_kit/fixtures/table_block_30.json | 16 + .../block_kit/fixtures/table_block_8.json | 16 + 17 files changed, 1187 insertions(+), 37 deletions(-) create mode 100644 tests/unit/messages/formats/adaptive_cards/fixtures/table_block_200.json create mode 100644 tests/unit/messages/formats/adaptive_cards/fixtures/table_block_30.json create mode 100644 tests/unit/messages/formats/adaptive_cards/fixtures/table_block_8.json create mode 100644 tests/unit/messages/formats/block_kit/fixtures/table_block_200.json create mode 100644 tests/unit/messages/formats/block_kit/fixtures/table_block_30.json create mode 100644 tests/unit/messages/formats/block_kit/fixtures/table_block_8.json diff --git a/elementary/messages/blocks.py b/elementary/messages/blocks.py index 34afff53c..a4ad8eda6 100644 --- a/elementary/messages/blocks.py +++ b/elementary/messages/blocks.py @@ -1,5 +1,5 @@ from enum import Enum -from typing import List, Optional, Union +from typing import Any, Dict, List, Optional, Union from pydantic import BaseModel from typing_extensions import Literal @@ -94,6 +94,21 @@ class FactListBlock(BaseBlock): facts: List[FactBlock] +class TableBlock(BaseBlock): + type: Literal["table"] = "table" + headers: List[str] + rows: List[List[Any]] + + @classmethod + def from_dicts(cls, data: List[Dict[str, Any]]) -> "TableBlock": + if not data: + return cls(headers=[], rows=[]) + + headers = list(data[0].keys()) + rows = [[row.get(header) for header in headers] for row in data] + return cls(headers=headers, rows=rows) + + class ExpandableBlock(BaseBlock): type: Literal["expandable"] = "expandable" title: str @@ -107,6 +122,7 @@ class ExpandableBlock(BaseBlock): DividerBlock, LinesBlock, FactListBlock, + TableBlock, "ExpandableBlock", ] diff --git a/elementary/messages/formats/adaptive_cards.py b/elementary/messages/formats/adaptive_cards.py index c58c95638..6d5837382 100644 --- a/elementary/messages/formats/adaptive_cards.py +++ b/elementary/messages/formats/adaptive_cards.py @@ -13,6 +13,7 @@ LineBlock, LinesBlock, LinkBlock, + TableBlock, TextBlock, TextStyle, ) @@ -118,6 +119,31 @@ def format_fact_list_block(block: FactListBlock) -> Dict[str, Any]: } +def format_table_block(block: TableBlock) -> Dict[str, Any]: + return { + "type": "Table", + "columns": [{"width": 1} for _ in block.headers], + "rows": [ + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": str(cell), + } + ], + } + for cell in row + ], + } + for row in [block.headers, *block.rows] + ], + } + + def format_message_block( block: MessageBlock, color: Optional[Color] = None ) -> List[Dict[str, Any]]: @@ -131,6 +157,8 @@ def format_message_block( return [format_fact_list_block(block)] elif isinstance(block, ExpandableBlock): return format_expandable_block(block) + elif isinstance(block, TableBlock): + return [format_table_block(block)] else: raise ValueError(f"Unsupported message block type: {type(block)}") diff --git a/elementary/messages/formats/block_kit.py b/elementary/messages/formats/block_kit.py index 7a1bae456..f6b119613 100644 --- a/elementary/messages/formats/block_kit.py +++ b/elementary/messages/formats/block_kit.py @@ -1,6 +1,7 @@ from typing import Any, Dict, List, Optional, Tuple from slack_sdk.models import blocks as slack_blocks +from tabulate import tabulate from elementary.messages.blocks import ( CodeBlock, @@ -15,6 +16,7 @@ LineBlock, LinesBlock, LinkBlock, + TableBlock, TextBlock, TextStyle, ) @@ -31,6 +33,7 @@ class BlockKitBuilder: _SECONDARY_FACT_CHUNK_SIZE = 2 _LONGEST_MARKDOWN_SUFFIX_LEN = 3 # length of markdown's code suffix (```) + _MAX_CELL_LENGTH = 11 def __init__(self) -> None: self._blocks: List[dict] = [] @@ -63,6 +66,12 @@ def _format_line_block_text(self, block: LineBlock) -> str: [self._format_inline_block(inline) for inline in block.inlines] ) + def _formate_table_cell(self, cell_value: Any) -> str: + value = str(cell_value) + if len(value) > self._MAX_CELL_LENGTH: + return value[: self._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 = ( @@ -157,6 +166,14 @@ def _add_divider_block(self, block: DividerBlock) -> None: self._add_block({"type": "divider"}) self._is_divided = True + def _add_table_block(self, block: TableBlock) -> None: + new_rows = [ + [self._formate_table_cell(cell) for cell in row] for row in block.rows + ] + new_headers = [self._formate_table_cell(cell) for cell in block.headers] + table = tabulate(new_rows, headers=new_headers, tablefmt="simple") + self._add_block(self._format_markdown_section(f"```{table}```")) + def _add_expandable_block(self, block: ExpandableBlock) -> None: """ Expandable blocks are not supported in Slack Block Kit. @@ -183,6 +200,8 @@ def _add_message_block(self, block: MessageBlock) -> None: self._add_divider_block(block) elif isinstance(block, ExpandableBlock): self._add_expandable_block(block) + elif isinstance(block, TableBlock): + self._add_table_block(block) else: raise ValueError(f"Unsupported message block type: {type(block)}") diff --git a/elementary/messages/message_body.py b/elementary/messages/message_body.py index b41a76208..69cccde70 100644 --- a/elementary/messages/message_body.py +++ b/elementary/messages/message_body.py @@ -10,6 +10,7 @@ FactListBlock, HeaderBlock, LinesBlock, + TableBlock, ) @@ -26,6 +27,7 @@ class Color(Enum): LinesBlock, FactListBlock, ExpandableBlock, + TableBlock, ] diff --git a/elementary/monitor/alerts/alert_messages/builder.py b/elementary/monitor/alerts/alert_messages/builder.py index 1865413bb..4c77d63b9 100644 --- a/elementary/monitor/alerts/alert_messages/builder.py +++ b/elementary/monitor/alerts/alert_messages/builder.py @@ -24,6 +24,7 @@ LineBlock, LinesBlock, LinkBlock, + TableBlock, TextBlock, TextStyle, ) @@ -284,9 +285,14 @@ def _get_result_blocks( ] ) ) - result_blocks.append( - JsonCodeBlock(content=result_sample), - ) + if isinstance(result_sample, list) and len(result_sample[0].keys()) < 4: + result_blocks.append( + TableBlock.from_dicts(result_sample), + ) + else: + result_blocks.append( + JsonCodeBlock(content=result_sample), + ) if result_query: result_blocks.append( LinesBlock( diff --git a/tests/unit/alerts/alert_messages/fixtures/adaptive_card_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/adaptive_card_dbt_test_alert_status-error_link-True_description-True_tags-True_owners-True_table-True_error-True_sample-True_env-True.json index c65fa48d3..c1990bafe 100644 --- a/tests/unit/alerts/alert_messages/fixtures/adaptive_card_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/adaptive_card_dbt_test_alert_status-error_link-True_description-True_tags-True_owners-True_table-True_error-True_sample-True_env-True.json @@ -117,16 +117,59 @@ "wrap": true }, { - "type": "Container", - "style": "emphasis", - "items": [ + "type": "Table", + "columns": [ { - "type": "RichTextBlock", - "inlines": [ + "width": 1 + }, + { + "width": 1 + } + ], + "rows": [ + { + "type": "TableRow", + "cells": [ { - "type": "TextRun", - "text": "{\n \"column1\": \"value1\",\n \"column2\": \"value2\"\n}", - "fontType": "Monospace" + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "column1" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "column2" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "value1" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "value2" + } + ] } ] } diff --git a/tests/unit/alerts/alert_messages/fixtures/adaptive_card_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/adaptive_card_dbt_test_alert_status-fail_link-True_description-True_tags-True_owners-True_table-True_error-True_sample-True_env-False.json index 72d30886c..9af9bbd6d 100644 --- a/tests/unit/alerts/alert_messages/fixtures/adaptive_card_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/adaptive_card_dbt_test_alert_status-fail_link-True_description-True_tags-True_owners-True_table-True_error-True_sample-True_env-False.json @@ -117,16 +117,59 @@ "wrap": true }, { - "type": "Container", - "style": "emphasis", - "items": [ + "type": "Table", + "columns": [ { - "type": "RichTextBlock", - "inlines": [ + "width": 1 + }, + { + "width": 1 + } + ], + "rows": [ + { + "type": "TableRow", + "cells": [ { - "type": "TextRun", - "text": "{\n \"column1\": \"value1\",\n \"column2\": \"value2\"\n}", - "fontType": "Monospace" + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "column1" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "column2" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "value1" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "value2" + } + ] } ] } diff --git a/tests/unit/alerts/alert_messages/fixtures/adaptive_card_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/adaptive_card_dbt_test_alert_status-warn_link-True_description-False_tags-True_owners-False_table-True_error-False_sample-True_env-False.json index c4c212a14..aeb9c70f4 100644 --- a/tests/unit/alerts/alert_messages/fixtures/adaptive_card_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/adaptive_card_dbt_test_alert_status-warn_link-True_description-False_tags-True_owners-False_table-True_error-False_sample-True_env-False.json @@ -92,16 +92,59 @@ "wrap": true }, { - "type": "Container", - "style": "emphasis", - "items": [ + "type": "Table", + "columns": [ { - "type": "RichTextBlock", - "inlines": [ + "width": 1 + }, + { + "width": 1 + } + ], + "rows": [ + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "column1" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "column2" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "value1" + } + ] + }, { - "type": "TextRun", - "text": "{\n \"column1\": \"value1\",\n \"column2\": \"value2\"\n}", - "fontType": "Monospace" + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "value2" + } + ] } ] } diff --git a/tests/unit/alerts/alert_messages/fixtures/adaptive_card_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/adaptive_card_dbt_test_alert_status-warn_link-True_description-True_tags-True_owners-True_table-True_error-True_sample-True_env-True.json index 2416b232e..839396d72 100644 --- a/tests/unit/alerts/alert_messages/fixtures/adaptive_card_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/adaptive_card_dbt_test_alert_status-warn_link-True_description-True_tags-True_owners-True_table-True_error-True_sample-True_env-True.json @@ -117,16 +117,59 @@ "wrap": true }, { - "type": "Container", - "style": "emphasis", - "items": [ + "type": "Table", + "columns": [ { - "type": "RichTextBlock", - "inlines": [ + "width": 1 + }, + { + "width": 1 + } + ], + "rows": [ + { + "type": "TableRow", + "cells": [ { - "type": "TextRun", - "text": "{\n \"column1\": \"value1\",\n \"column2\": \"value2\"\n}", - "fontType": "Monospace" + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "column1" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "column2" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "value1" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "value2" + } + ] } ] } diff --git a/tests/unit/alerts/alert_messages/test_dbt_test_alert_message.py b/tests/unit/alerts/alert_messages/test_dbt_test_alert_message.py index 9f72bf0c1..34947f6d5 100644 --- a/tests/unit/alerts/alert_messages/test_dbt_test_alert_message.py +++ b/tests/unit/alerts/alert_messages/test_dbt_test_alert_message.py @@ -78,7 +78,7 @@ def test_get_dbt_test_alert_message_body( test_description="Test description" if has_description else None, error_message="Test error message" if has_error else None, test_rows_sample=( - {"column1": "value1", "column2": "value2"} if has_sample else None + [{"column1": "value1", "column2": "value2"}] if has_sample else None ), test_results_query=None, test_params=None, diff --git a/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_200.json b/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_200.json new file mode 100644 index 000000000..a363becb1 --- /dev/null +++ b/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_200.json @@ -0,0 +1,277 @@ +{ + "type": "AdaptiveCard", + "body": [ + { + "type": "Container", + "separator": true, + "items": [ + { + "type": "Table", + "columns": [ + { + "width": 1 + }, + { + "width": 1 + }, + { + "width": 1 + }, + { + "width": 1 + } + ], + "rows": [ + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 0" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 1" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 2" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 3" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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" + } + ] + } + ] + } + ] + } + ] + } + ], + "version": "1.5" +} diff --git a/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_30.json b/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_30.json new file mode 100644 index 000000000..69dba0180 --- /dev/null +++ b/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_30.json @@ -0,0 +1,277 @@ +{ + "type": "AdaptiveCard", + "body": [ + { + "type": "Container", + "separator": true, + "items": [ + { + "type": "Table", + "columns": [ + { + "width": 1 + }, + { + "width": 1 + }, + { + "width": 1 + }, + { + "width": 1 + } + ], + "rows": [ + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 0" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 1" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 2" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 3" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + } + ] + } + ] + } + ] + } + ], + "version": "1.5" +} diff --git a/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_8.json b/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_8.json new file mode 100644 index 000000000..2afa3f5f8 --- /dev/null +++ b/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_8.json @@ -0,0 +1,277 @@ +{ + "type": "AdaptiveCard", + "body": [ + { + "type": "Container", + "separator": true, + "items": [ + { + "type": "Table", + "columns": [ + { + "width": 1 + }, + { + "width": 1 + }, + { + "width": 1 + }, + { + "width": 1 + } + ], + "rows": [ + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 0" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 1" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 2" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 3" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + } + ] + } + ] + } + ] + } + ], + "version": "1.5" +} diff --git a/tests/unit/messages/formats/base_test_format.py b/tests/unit/messages/formats/base_test_format.py index ccc3eeb3f..5b5812920 100644 --- a/tests/unit/messages/formats/base_test_format.py +++ b/tests/unit/messages/formats/base_test_format.py @@ -17,6 +17,7 @@ LineBlock, LinesBlock, LinkBlock, + TableBlock, TextBlock, TextStyle, ) @@ -325,3 +326,30 @@ def test_format_message_body_text_length(self, text_length: int): expected_file_path = self.get_expected_file_path(f"text_length_{text_length}") result = self.format(message_body) self.assert_expected_value(result, expected_file_path) + + @pytest.mark.parametrize( + "text_length", + [ + pytest.param(8, id="short_text"), + pytest.param(30, id="long_text"), + pytest.param(200, id="very_long_text"), + ], + ) + def test_format_table_block(self, text_length: int): + lorem_text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. " * ( + (text_length + 49) // 50 + ) + lorem_text = lorem_text[:text_length] + + column_count = 4 + row_count = 5 + + table_block = TableBlock( + headers=[f"Column {i}" for i in range(column_count)], + rows=[[lorem_text for _ in range(column_count)] for _ in range(row_count)], + ) + + message_body = MessageBody(blocks=[table_block]) + expected_file_path = self.get_expected_file_path(f"table_block_{text_length}") + result = self.format(message_body) + self.assert_expected_value(result, expected_file_path) diff --git a/tests/unit/messages/formats/block_kit/fixtures/table_block_200.json b/tests/unit/messages/formats/block_kit/fixtures/table_block_200.json new file mode 100644 index 000000000..94f2cb148 --- /dev/null +++ b/tests/unit/messages/formats/block_kit/fixtures/table_block_200.json @@ -0,0 +1,16 @@ +{ + "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..```" + } + } + ], + "attachments": [ + { + "blocks": [] + } + ] +} diff --git a/tests/unit/messages/formats/block_kit/fixtures/table_block_30.json b/tests/unit/messages/formats/block_kit/fixtures/table_block_30.json new file mode 100644 index 000000000..94f2cb148 --- /dev/null +++ b/tests/unit/messages/formats/block_kit/fixtures/table_block_30.json @@ -0,0 +1,16 @@ +{ + "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..```" + } + } + ], + "attachments": [ + { + "blocks": [] + } + ] +} diff --git a/tests/unit/messages/formats/block_kit/fixtures/table_block_8.json b/tests/unit/messages/formats/block_kit/fixtures/table_block_8.json new file mode 100644 index 000000000..1617e03a0 --- /dev/null +++ b/tests/unit/messages/formats/block_kit/fixtures/table_block_8.json @@ -0,0 +1,16 @@ +{ + "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```" + } + } + ], + "attachments": [ + { + "blocks": [] + } + ] +} From 509cbecc5dd1f20abeece44c6fb245d00b6f5794 Mon Sep 17 00:00:00 2001 From: Ofek Weiss Date: Mon, 17 Feb 2025 17:11:51 +0200 Subject: [PATCH 2/4] <= --- elementary/monitor/alerts/alert_messages/builder.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/elementary/monitor/alerts/alert_messages/builder.py b/elementary/monitor/alerts/alert_messages/builder.py index 4c77d63b9..e78096f39 100644 --- a/elementary/monitor/alerts/alert_messages/builder.py +++ b/elementary/monitor/alerts/alert_messages/builder.py @@ -285,7 +285,7 @@ def _get_result_blocks( ] ) ) - if isinstance(result_sample, list) and len(result_sample[0].keys()) < 4: + if isinstance(result_sample, list) and len(result_sample[0].keys()) <= 4: result_blocks.append( TableBlock.from_dicts(result_sample), ) From 85f1439fbf725edce43e457c1202d2d2973ab15f Mon Sep 17 00:00:00 2001 From: Ofek Weiss Date: Mon, 17 Feb 2025 17:27:22 +0200 Subject: [PATCH 3/4] pre-commit fixes --- dev-requirements.txt | 1 + elementary/messages/formats/block_kit.py | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/dev-requirements.txt b/dev-requirements.txt index 299f10888..3f2b022dc 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -18,3 +18,4 @@ types-PyYAML types-setuptools types-retry types-decorator +types-tabulate diff --git a/elementary/messages/formats/block_kit.py b/elementary/messages/formats/block_kit.py index f6b119613..8e02d1ad8 100644 --- a/elementary/messages/formats/block_kit.py +++ b/elementary/messages/formats/block_kit.py @@ -66,7 +66,7 @@ def _format_line_block_text(self, block: LineBlock) -> str: [self._format_inline_block(inline) for inline in block.inlines] ) - def _formate_table_cell(self, cell_value: Any) -> str: + def _format_table_cell(self, cell_value: Any) -> str: value = str(cell_value) if len(value) > self._MAX_CELL_LENGTH: return value[: self._MAX_CELL_LENGTH - 2] + ".." @@ -168,9 +168,9 @@ def _add_divider_block(self, block: DividerBlock) -> None: def _add_table_block(self, block: TableBlock) -> None: new_rows = [ - [self._formate_table_cell(cell) for cell in row] for row in block.rows + [self._format_table_cell(cell) for cell in row] for row in block.rows ] - new_headers = [self._formate_table_cell(cell) for cell in block.headers] + new_headers = [self._format_table_cell(cell) for cell in block.headers] table = tabulate(new_rows, headers=new_headers, tablefmt="simple") self._add_block(self._format_markdown_section(f"```{table}```")) From 6aa8036222114fff4172b8f8447554aa70aacf55 Mon Sep 17 00:00:00 2001 From: Ofek Weiss Date: Tue, 18 Feb 2025 11:18:50 +0200 Subject: [PATCH 4/4] dynamic max cell length --- elementary/messages/formats/block_kit.py | 33 +- .../fixtures/table_block_200_1.json | 106 ++++++ .../fixtures/table_block_200_2.json | 163 +++++++++ .../fixtures/table_block_200_3.json | 220 ++++++++++++ ..._block_200.json => table_block_200_4.json} | 0 .../fixtures/table_block_200_5.json | 334 ++++++++++++++++++ .../fixtures/table_block_30_1.json | 106 ++++++ .../fixtures/table_block_30_2.json | 163 +++++++++ .../fixtures/table_block_30_3.json | 220 ++++++++++++ ...le_block_30.json => table_block_30_4.json} | 0 .../fixtures/table_block_30_5.json | 334 ++++++++++++++++++ .../fixtures/table_block_8_1.json | 106 ++++++ .../fixtures/table_block_8_2.json | 163 +++++++++ .../fixtures/table_block_8_3.json | 220 ++++++++++++ ...able_block_8.json => table_block_8_4.json} | 0 .../fixtures/table_block_8_5.json | 334 ++++++++++++++++++ .../unit/messages/formats/base_test_format.py | 27 +- .../block_kit/fixtures/table_block_200_1.json | 16 + .../block_kit/fixtures/table_block_200_2.json | 16 + .../block_kit/fixtures/table_block_200_3.json | 16 + ..._block_200.json => table_block_200_4.json} | 0 .../block_kit/fixtures/table_block_200_5.json | 16 + .../block_kit/fixtures/table_block_30_1.json | 16 + .../block_kit/fixtures/table_block_30_2.json | 16 + .../block_kit/fixtures/table_block_30_3.json | 16 + ...le_block_30.json => table_block_30_4.json} | 0 .../block_kit/fixtures/table_block_30_5.json | 16 + .../block_kit/fixtures/table_block_8_1.json | 16 + .../block_kit/fixtures/table_block_8_2.json | 16 + .../block_kit/fixtures/table_block_8_3.json | 16 + ...able_block_8.json => table_block_8_4.json} | 0 .../block_kit/fixtures/table_block_8_5.json | 16 + 32 files changed, 2704 insertions(+), 17 deletions(-) create mode 100644 tests/unit/messages/formats/adaptive_cards/fixtures/table_block_200_1.json create mode 100644 tests/unit/messages/formats/adaptive_cards/fixtures/table_block_200_2.json create mode 100644 tests/unit/messages/formats/adaptive_cards/fixtures/table_block_200_3.json rename tests/unit/messages/formats/adaptive_cards/fixtures/{table_block_200.json => table_block_200_4.json} (100%) create mode 100644 tests/unit/messages/formats/adaptive_cards/fixtures/table_block_200_5.json create mode 100644 tests/unit/messages/formats/adaptive_cards/fixtures/table_block_30_1.json create mode 100644 tests/unit/messages/formats/adaptive_cards/fixtures/table_block_30_2.json create mode 100644 tests/unit/messages/formats/adaptive_cards/fixtures/table_block_30_3.json rename tests/unit/messages/formats/adaptive_cards/fixtures/{table_block_30.json => table_block_30_4.json} (100%) create mode 100644 tests/unit/messages/formats/adaptive_cards/fixtures/table_block_30_5.json create mode 100644 tests/unit/messages/formats/adaptive_cards/fixtures/table_block_8_1.json create mode 100644 tests/unit/messages/formats/adaptive_cards/fixtures/table_block_8_2.json create mode 100644 tests/unit/messages/formats/adaptive_cards/fixtures/table_block_8_3.json rename tests/unit/messages/formats/adaptive_cards/fixtures/{table_block_8.json => table_block_8_4.json} (100%) create mode 100644 tests/unit/messages/formats/adaptive_cards/fixtures/table_block_8_5.json create mode 100644 tests/unit/messages/formats/block_kit/fixtures/table_block_200_1.json create mode 100644 tests/unit/messages/formats/block_kit/fixtures/table_block_200_2.json create mode 100644 tests/unit/messages/formats/block_kit/fixtures/table_block_200_3.json rename tests/unit/messages/formats/block_kit/fixtures/{table_block_200.json => table_block_200_4.json} (100%) create mode 100644 tests/unit/messages/formats/block_kit/fixtures/table_block_200_5.json create mode 100644 tests/unit/messages/formats/block_kit/fixtures/table_block_30_1.json create mode 100644 tests/unit/messages/formats/block_kit/fixtures/table_block_30_2.json create mode 100644 tests/unit/messages/formats/block_kit/fixtures/table_block_30_3.json rename tests/unit/messages/formats/block_kit/fixtures/{table_block_30.json => table_block_30_4.json} (100%) create mode 100644 tests/unit/messages/formats/block_kit/fixtures/table_block_30_5.json create mode 100644 tests/unit/messages/formats/block_kit/fixtures/table_block_8_1.json create mode 100644 tests/unit/messages/formats/block_kit/fixtures/table_block_8_2.json create mode 100644 tests/unit/messages/formats/block_kit/fixtures/table_block_8_3.json rename tests/unit/messages/formats/block_kit/fixtures/{table_block_8.json => table_block_8_4.json} (100%) create mode 100644 tests/unit/messages/formats/block_kit/fixtures/table_block_8_5.json diff --git a/elementary/messages/formats/block_kit.py b/elementary/messages/formats/block_kit.py index 8e02d1ad8..9765aeeeb 100644 --- a/elementary/messages/formats/block_kit.py +++ b/elementary/messages/formats/block_kit.py @@ -1,3 +1,4 @@ +import json from typing import Any, Dict, List, Optional, Tuple from slack_sdk.models import blocks as slack_blocks @@ -33,7 +34,7 @@ class BlockKitBuilder: _SECONDARY_FACT_CHUNK_SIZE = 2 _LONGEST_MARKDOWN_SUFFIX_LEN = 3 # length of markdown's code suffix (```) - _MAX_CELL_LENGTH = 11 + _MAX_CELL_LENGTH_BY_COLUMN_COUNT = {4: 11, 3: 14, 2: 22, 1: 40, 0: 40} def __init__(self) -> None: self._blocks: List[dict] = [] @@ -66,10 +67,11 @@ 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) -> str: + def _format_table_cell(self, cell_value: Any, column_count: int) -> str: value = str(cell_value) - if len(value) > self._MAX_CELL_LENGTH: - return value[: self._MAX_CELL_LENGTH - 2] + ".." + 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: @@ -167,12 +169,23 @@ def _add_divider_block(self, block: DividerBlock) -> None: self._is_divided = True def _add_table_block(self, block: TableBlock) -> None: - new_rows = [ - [self._format_table_cell(cell) for cell in row] for row in block.rows - ] - new_headers = [self._format_table_cell(cell) for cell in block.headers] - table = tabulate(new_rows, headers=new_headers, tablefmt="simple") - self._add_block(self._format_markdown_section(f"```{table}```")) + column_count = len(block.headers) + if column_count not in self._MAX_CELL_LENGTH_BY_COLUMN_COUNT: + 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}```")) def _add_expandable_block(self, block: ExpandableBlock) -> None: """ diff --git a/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_200_1.json b/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_200_1.json new file mode 100644 index 000000000..9e62d3462 --- /dev/null +++ b/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_200_1.json @@ -0,0 +1,106 @@ +{ + "type": "AdaptiveCard", + "body": [ + { + "type": "Container", + "separator": true, + "items": [ + { + "type": "Table", + "columns": [ + { + "width": 1 + } + ], + "rows": [ + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 0" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "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" + } + ] + } + ] + } + ] + } + ] + } + ], + "version": "1.5" +} diff --git a/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_200_2.json b/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_200_2.json new file mode 100644 index 000000000..d4713a422 --- /dev/null +++ b/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_200_2.json @@ -0,0 +1,163 @@ +{ + "type": "AdaptiveCard", + "body": [ + { + "type": "Container", + "separator": true, + "items": [ + { + "type": "Table", + "columns": [ + { + "width": 1 + }, + { + "width": 1 + } + ], + "rows": [ + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 0" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 1" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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" + } + ] + } + ] + } + ] + } + ] + } + ], + "version": "1.5" +} diff --git a/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_200_3.json b/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_200_3.json new file mode 100644 index 000000000..2079b7cd9 --- /dev/null +++ b/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_200_3.json @@ -0,0 +1,220 @@ +{ + "type": "AdaptiveCard", + "body": [ + { + "type": "Container", + "separator": true, + "items": [ + { + "type": "Table", + "columns": [ + { + "width": 1 + }, + { + "width": 1 + }, + { + "width": 1 + } + ], + "rows": [ + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 0" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 1" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 2" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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" + } + ] + } + ] + } + ] + } + ] + } + ], + "version": "1.5" +} diff --git a/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_200.json b/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_200_4.json similarity index 100% rename from tests/unit/messages/formats/adaptive_cards/fixtures/table_block_200.json rename to tests/unit/messages/formats/adaptive_cards/fixtures/table_block_200_4.json diff --git a/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_200_5.json b/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_200_5.json new file mode 100644 index 000000000..dde2310c5 --- /dev/null +++ b/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_200_5.json @@ -0,0 +1,334 @@ +{ + "type": "AdaptiveCard", + "body": [ + { + "type": "Container", + "separator": true, + "items": [ + { + "type": "Table", + "columns": [ + { + "width": 1 + }, + { + "width": 1 + }, + { + "width": 1 + }, + { + "width": 1 + }, + { + "width": 1 + } + ], + "rows": [ + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 0" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 1" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 2" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 3" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 4" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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": "TableCell", + "items": [ + { + "type": "TextBlock", + "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" + } + ] + } + ] + } + ] + } + ] + } + ], + "version": "1.5" +} diff --git a/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_30_1.json b/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_30_1.json new file mode 100644 index 000000000..082c62f92 --- /dev/null +++ b/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_30_1.json @@ -0,0 +1,106 @@ +{ + "type": "AdaptiveCard", + "body": [ + { + "type": "Container", + "separator": true, + "items": [ + { + "type": "Table", + "columns": [ + { + "width": 1 + } + ], + "rows": [ + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 0" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + } + ] + } + ] + } + ] + } + ], + "version": "1.5" +} diff --git a/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_30_2.json b/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_30_2.json new file mode 100644 index 000000000..76b578a53 --- /dev/null +++ b/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_30_2.json @@ -0,0 +1,163 @@ +{ + "type": "AdaptiveCard", + "body": [ + { + "type": "Container", + "separator": true, + "items": [ + { + "type": "Table", + "columns": [ + { + "width": 1 + }, + { + "width": 1 + } + ], + "rows": [ + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 0" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 1" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + } + ] + } + ] + } + ] + } + ], + "version": "1.5" +} diff --git a/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_30_3.json b/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_30_3.json new file mode 100644 index 000000000..fc1334219 --- /dev/null +++ b/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_30_3.json @@ -0,0 +1,220 @@ +{ + "type": "AdaptiveCard", + "body": [ + { + "type": "Container", + "separator": true, + "items": [ + { + "type": "Table", + "columns": [ + { + "width": 1 + }, + { + "width": 1 + }, + { + "width": 1 + } + ], + "rows": [ + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 0" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 1" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 2" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + } + ] + } + ] + } + ] + } + ], + "version": "1.5" +} diff --git a/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_30.json b/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_30_4.json similarity index 100% rename from tests/unit/messages/formats/adaptive_cards/fixtures/table_block_30.json rename to tests/unit/messages/formats/adaptive_cards/fixtures/table_block_30_4.json diff --git a/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_30_5.json b/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_30_5.json new file mode 100644 index 000000000..80e32b148 --- /dev/null +++ b/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_30_5.json @@ -0,0 +1,334 @@ +{ + "type": "AdaptiveCard", + "body": [ + { + "type": "Container", + "separator": true, + "items": [ + { + "type": "Table", + "columns": [ + { + "width": 1 + }, + { + "width": 1 + }, + { + "width": 1 + }, + { + "width": 1 + }, + { + "width": 1 + } + ], + "rows": [ + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 0" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 1" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 2" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 3" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 4" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ipsum dolor sit amet, co" + } + ] + } + ] + } + ] + } + ] + } + ], + "version": "1.5" +} diff --git a/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_8_1.json b/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_8_1.json new file mode 100644 index 000000000..d0d880097 --- /dev/null +++ b/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_8_1.json @@ -0,0 +1,106 @@ +{ + "type": "AdaptiveCard", + "body": [ + { + "type": "Container", + "separator": true, + "items": [ + { + "type": "Table", + "columns": [ + { + "width": 1 + } + ], + "rows": [ + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 0" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + } + ] + } + ] + } + ] + } + ], + "version": "1.5" +} diff --git a/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_8_2.json b/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_8_2.json new file mode 100644 index 000000000..9f8f074cd --- /dev/null +++ b/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_8_2.json @@ -0,0 +1,163 @@ +{ + "type": "AdaptiveCard", + "body": [ + { + "type": "Container", + "separator": true, + "items": [ + { + "type": "Table", + "columns": [ + { + "width": 1 + }, + { + "width": 1 + } + ], + "rows": [ + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 0" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 1" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + } + ] + } + ] + } + ] + } + ], + "version": "1.5" +} diff --git a/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_8_3.json b/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_8_3.json new file mode 100644 index 000000000..621b01587 --- /dev/null +++ b/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_8_3.json @@ -0,0 +1,220 @@ +{ + "type": "AdaptiveCard", + "body": [ + { + "type": "Container", + "separator": true, + "items": [ + { + "type": "Table", + "columns": [ + { + "width": 1 + }, + { + "width": 1 + }, + { + "width": 1 + } + ], + "rows": [ + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 0" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 1" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 2" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + } + ] + } + ] + } + ] + } + ], + "version": "1.5" +} diff --git a/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_8.json b/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_8_4.json similarity index 100% rename from tests/unit/messages/formats/adaptive_cards/fixtures/table_block_8.json rename to tests/unit/messages/formats/adaptive_cards/fixtures/table_block_8_4.json diff --git a/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_8_5.json b/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_8_5.json new file mode 100644 index 000000000..803ef2e28 --- /dev/null +++ b/tests/unit/messages/formats/adaptive_cards/fixtures/table_block_8_5.json @@ -0,0 +1,334 @@ +{ + "type": "AdaptiveCard", + "body": [ + { + "type": "Container", + "separator": true, + "items": [ + { + "type": "Table", + "columns": [ + { + "width": 1 + }, + { + "width": 1 + }, + { + "width": 1 + }, + { + "width": 1 + }, + { + "width": 1 + } + ], + "rows": [ + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 0" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 1" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 2" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 3" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Column 4" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + } + ] + }, + { + "type": "TableRow", + "cells": [ + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + }, + { + "type": "TableCell", + "items": [ + { + "type": "TextBlock", + "text": "Lorem ip" + } + ] + } + ] + } + ] + } + ] + } + ], + "version": "1.5" +} diff --git a/tests/unit/messages/formats/base_test_format.py b/tests/unit/messages/formats/base_test_format.py index 5b5812920..aaaa8109b 100644 --- a/tests/unit/messages/formats/base_test_format.py +++ b/tests/unit/messages/formats/base_test_format.py @@ -328,20 +328,31 @@ def test_format_message_body_text_length(self, text_length: int): self.assert_expected_value(result, expected_file_path) @pytest.mark.parametrize( - "text_length", + "text_length,column_count", [ - pytest.param(8, id="short_text"), - pytest.param(30, id="long_text"), - pytest.param(200, id="very_long_text"), + pytest.param(8, 5, id="short_text_5_columns"), + pytest.param(30, 5, id="long_text_5_columns"), + pytest.param(200, 5, id="very_long_text_5_columns"), + pytest.param(8, 4, id="short_text_4_columns"), + pytest.param(30, 4, id="long_text_4_columns"), + pytest.param(200, 4, id="very_long_text_4_columns"), + pytest.param(8, 3, id="short_text_3_columns"), + pytest.param(30, 3, id="long_text_3_columns"), + pytest.param(200, 3, id="very_long_text_3_columns"), + pytest.param(8, 2, id="short_text_2_columns"), + pytest.param(30, 2, id="long_text_2_columns"), + pytest.param(200, 2, id="very_long_text_2_columns"), + pytest.param(8, 1, id="short_text_1_column"), + pytest.param(30, 1, id="long_text_1_column"), + pytest.param(200, 1, id="very_long_text_1_column"), ], ) - def test_format_table_block(self, text_length: int): + def test_format_table_block(self, text_length: int, column_count: int): lorem_text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. " * ( (text_length + 49) // 50 ) lorem_text = lorem_text[:text_length] - column_count = 4 row_count = 5 table_block = TableBlock( @@ -350,6 +361,8 @@ def test_format_table_block(self, text_length: int): ) message_body = MessageBody(blocks=[table_block]) - expected_file_path = self.get_expected_file_path(f"table_block_{text_length}") + expected_file_path = self.get_expected_file_path( + f"table_block_{text_length}_{column_count}" + ) result = self.format(message_body) self.assert_expected_value(result, expected_file_path) 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 new file mode 100644 index 000000000..0ffbc88b2 --- /dev/null +++ b/tests/unit/messages/formats/block_kit/fixtures/table_block_200_1.json @@ -0,0 +1,16 @@ +{ + "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..```" + } + } + ], + "attachments": [ + { + "blocks": [] + } + ] +} 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 new file mode 100644 index 000000000..6ad6af65e --- /dev/null +++ b/tests/unit/messages/formats/block_kit/fixtures/table_block_200_2.json @@ -0,0 +1,16 @@ +{ + "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..```" + } + } + ], + "attachments": [ + { + "blocks": [] + } + ] +} 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 new file mode 100644 index 000000000..9253322f7 --- /dev/null +++ b/tests/unit/messages/formats/block_kit/fixtures/table_block_200_3.json @@ -0,0 +1,16 @@ +{ + "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 ..```" + } + } + ], + "attachments": [ + { + "blocks": [] + } + ] +} diff --git a/tests/unit/messages/formats/block_kit/fixtures/table_block_200.json b/tests/unit/messages/formats/block_kit/fixtures/table_block_200_4.json similarity index 100% rename from tests/unit/messages/formats/block_kit/fixtures/table_block_200.json rename to tests/unit/messages/formats/block_kit/fixtures/table_block_200_4.json 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 new file mode 100644 index 000000000..a9e7416dc --- /dev/null +++ b/tests/unit/messages/formats/block_kit/fixtures/table_block_200_5.json @@ -0,0 +1,16 @@ +{ + "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...```" + } + } + ], + "attachments": [ + { + "blocks": [] + } + ] +} 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 new file mode 100644 index 000000000..fbed4f006 --- /dev/null +++ b/tests/unit/messages/formats/block_kit/fixtures/table_block_30_1.json @@ -0,0 +1,16 @@ +{ + "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```" + } + } + ], + "attachments": [ + { + "blocks": [] + } + ] +} 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 new file mode 100644 index 000000000..6ad6af65e --- /dev/null +++ b/tests/unit/messages/formats/block_kit/fixtures/table_block_30_2.json @@ -0,0 +1,16 @@ +{ + "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..```" + } + } + ], + "attachments": [ + { + "blocks": [] + } + ] +} 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 new file mode 100644 index 000000000..9253322f7 --- /dev/null +++ b/tests/unit/messages/formats/block_kit/fixtures/table_block_30_3.json @@ -0,0 +1,16 @@ +{ + "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 ..```" + } + } + ], + "attachments": [ + { + "blocks": [] + } + ] +} diff --git a/tests/unit/messages/formats/block_kit/fixtures/table_block_30.json b/tests/unit/messages/formats/block_kit/fixtures/table_block_30_4.json similarity index 100% rename from tests/unit/messages/formats/block_kit/fixtures/table_block_30.json rename to tests/unit/messages/formats/block_kit/fixtures/table_block_30_4.json 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 new file mode 100644 index 000000000..fd021cbd2 --- /dev/null +++ b/tests/unit/messages/formats/block_kit/fixtures/table_block_30_5.json @@ -0,0 +1,16 @@ +{ + "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]```" + } + } + ], + "attachments": [ + { + "blocks": [] + } + ] +} 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 new file mode 100644 index 000000000..9323cea71 --- /dev/null +++ b/tests/unit/messages/formats/block_kit/fixtures/table_block_8_1.json @@ -0,0 +1,16 @@ +{ + "blocks": [ + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "```Column 0\n----------\nLorem ip\nLorem ip\nLorem ip\nLorem ip\nLorem ip```" + } + } + ], + "attachments": [ + { + "blocks": [] + } + ] +} 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 new file mode 100644 index 000000000..1fe46a992 --- /dev/null +++ b/tests/unit/messages/formats/block_kit/fixtures/table_block_8_2.json @@ -0,0 +1,16 @@ +{ + "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```" + } + } + ], + "attachments": [ + { + "blocks": [] + } + ] +} 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 new file mode 100644 index 000000000..3d65ebd40 --- /dev/null +++ b/tests/unit/messages/formats/block_kit/fixtures/table_block_8_3.json @@ -0,0 +1,16 @@ +{ + "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```" + } + } + ], + "attachments": [ + { + "blocks": [] + } + ] +} diff --git a/tests/unit/messages/formats/block_kit/fixtures/table_block_8.json b/tests/unit/messages/formats/block_kit/fixtures/table_block_8_4.json similarity index 100% rename from tests/unit/messages/formats/block_kit/fixtures/table_block_8.json rename to tests/unit/messages/formats/block_kit/fixtures/table_block_8_4.json 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 new file mode 100644 index 000000000..2cceaa205 --- /dev/null +++ b/tests/unit/messages/formats/block_kit/fixtures/table_block_8_5.json @@ -0,0 +1,16 @@ +{ + "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]```" + } + } + ], + "attachments": [ + { + "blocks": [] + } + ] +}