Skip to content

Commit

Permalink
Fix #903 by parsing elements in ActionsBlock
Browse files Browse the repository at this point in the history
  • Loading branch information
KharchenkoDmitriy authored and seratch committed Dec 24, 2020
1 parent 4e45242 commit 7d32abb
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 3 deletions.
2 changes: 1 addition & 1 deletion slack/web/classes/blocks.py
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ def __init__(
super().__init__(type=self.type, block_id=block_id)
show_unknown_key_warning(self, others)

self.elements = elements
self.elements = BlockElement.parse_all(elements)

@JsonValidator(f"elements attribute cannot exceed {elements_max_length} elements")
def _validate_elements_length(self):
Expand Down
33 changes: 31 additions & 2 deletions tests/web/classes/test_blocks.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,15 @@
ImageBlock,
SectionBlock, InputBlock, FileBlock, Block, CallBlock,
)
from slack.web.classes.elements import ButtonElement, ImageElement, LinkButtonElement
from slack.web.classes.elements import (
ButtonElement,
ImageElement,
LinkButtonElement,
StaticSelectElement,
OverflowMenuElement,
Option,
)

from slack.web.classes.objects import PlainTextObject, MarkdownTextObject
from . import STRING_3001_CHARS

Expand Down Expand Up @@ -426,6 +434,28 @@ def test_json(self):
with self.assertRaises(SlackObjectFormationError):
ActionsBlock(elements=self.elements * 3).to_dict()

def test_element_parsing(self):
elements = [
ButtonElement(text="Click me", action_id="reg_button", value="1"),
StaticSelectElement(options=[Option(value='SelectOption')]),
ImageElement(image_url='url', alt_text='alt-text'),
OverflowMenuElement(options=[Option(value='MenuOption1'), Option(value='MenuOption2')]),
]
input = {
"type": "actions",
"block_id": "actionblock789",
"elements": [
e.to_dict() for e in elements
],
}
parsed_elements = ActionsBlock(**input).elements
self.assertEqual(len(elements), len(parsed_elements))
for original, parsed in zip(elements, parsed_elements):
self.assertEqual(type(original), type(parsed))
self.assertDictEqual(original.to_dict(), parsed.to_dict())




# ----------------------------------------------
# Context
Expand Down Expand Up @@ -743,4 +773,3 @@ def test_text_length_151(self):
}
with self.assertRaises(SlackObjectFormationError):
HeaderBlock(**input).validate_json()

0 comments on commit 7d32abb

Please sign in to comment.