Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions slack_bolt/listener_matcher/builtins.py
Original file line number Diff line number Diff line change
Expand Up @@ -292,7 +292,7 @@ def func(body: Dict[str, Any]) -> bool:
return workflow_step_edit(constraints["callback_id"], asyncio)

raise BoltError(f"type: {action_type} is unsupported")
elif "action_id" in constraints:
elif "action_id" in constraints or "block_id" in constraints:
# The default value is "block_actions"
return block_action(constraints, asyncio)

Expand All @@ -313,8 +313,11 @@ def _block_action(
elif isinstance(constraints, dict):
# block_id matching is optional
block_id: Optional[Union[str, Pattern]] = constraints.get("block_id")
action_id: Optional[Union[str, Pattern]] = constraints.get("action_id")
if block_id is None and action_id is None:
return False
block_id_matched = block_id is None or _matches(block_id, action.get("block_id"))
action_id_matched = _matches(constraints["action_id"], action["action_id"])
action_id_matched = action_id is None or _matches(action_id, action.get("action_id"))
return block_id_matched and action_id_matched


Expand Down
9 changes: 9 additions & 0 deletions tests/scenario_tests/test_block_actions.py
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,15 @@ def test_default_type_no_block_id(self):
assert response.status == 200
assert_auth_test_count(self, 1)

def test_default_type_no_action_id(self):
app = App(client=self.web_client, signing_secret=self.signing_secret)
app.action({"block_id": "b"})(simple_listener)

request = self.build_valid_request()
response = app.dispatch(request)
assert response.status == 200
assert_auth_test_count(self, 1)

def test_default_type_and_unmatched_block_id(self):
app = App(client=self.web_client, signing_secret=self.signing_secret)
app.action({"action_id": "a", "block_id": "bbb"})(simple_listener)
Expand Down
13 changes: 13 additions & 0 deletions tests/scenario_tests_async/test_block_actions.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,19 @@ async def test_default_type_no_block_id(self):
assert response.status == 200
await assert_auth_test_count_async(self, 1)

@pytest.mark.asyncio
async def test_default_type_no_action_id(self):
app = AsyncApp(
client=self.web_client,
signing_secret=self.signing_secret,
)
app.action({"block_id": "b"})(simple_listener)

request = self.build_valid_request()
response = await app.async_dispatch(request)
assert response.status == 200
await assert_auth_test_count_async(self, 1)

@pytest.mark.asyncio
async def test_default_type_unmatched_block_id(self):
app = AsyncApp(
Expand Down