Skip to content

Commit 1bc42f5

Browse files
committed
fix mentions
1 parent 0842516 commit 1bc42f5

File tree

4 files changed

+56
-12
lines changed

4 files changed

+56
-12
lines changed

packages/slackBotFunction/app/slack/slack_events.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ def process_async_slack_event(event: Dict[str, Any], event_id: str, client: WebC
271271
conversation_key, thread_root = conversation_key_and_root(event=event)
272272
if message_text.lower().startswith(constants.PULL_REQUEST_PREFIX):
273273
try:
274-
pull_request_id, _ = extract_pull_request_id(message_text)
274+
pull_request_id, _ = extract_pull_request_id(text=message_text)
275275
forward_event_to_pull_request_lambda(
276276
pull_request_id=pull_request_id, event=event, event_id=event_id, store_pull_request_id=True
277277
)

packages/slackBotFunction/app/utils/handler_utils.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -162,15 +162,20 @@ def strip_mentions(message_text: str) -> str:
162162

163163

164164
def extract_pull_request_id(text: str) -> Tuple[str | None, str]:
165-
# Regex: PULL_REQUEST_PREFIX + optional space + number + space + rest of text
166-
pattern = re.escape(constants.PULL_REQUEST_PREFIX) + r"\s*(\d+)\s+(.+)"
167-
match = re.match(pattern, text)
168-
if not match:
169-
logger.warning("Can not extract pull request id from text", extra={"text": text})
170-
return None, text
171-
pr_number = int(match.group(1))
172-
rest_text = match.group(2)
173-
return pr_number, rest_text
165+
prefix = re.escape(constants.PULL_REQUEST_PREFIX) # safely escape for regex
166+
pattern = rf"^(<[^>]+>\s*)?{prefix}\s*(\d+)\b"
167+
168+
match = re.match(pattern, text, flags=re.IGNORECASE)
169+
if match:
170+
mention = match.group(1) or ""
171+
pr_number = match.group(2)
172+
173+
# Remove the matched part (mention + prefix + number)
174+
remaining_text = text[match.end() :].strip()
175+
cleaned_text = f"{mention}{remaining_text}".strip()
176+
return pr_number, cleaned_text
177+
178+
return None, text.strip()
174179

175180

176181
def conversation_key_and_root(event: Dict[str, Any]) -> Tuple[str, str]:

packages/slackBotFunction/tests/test_handler_utils.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,3 +320,42 @@ def test_is_duplicate_event_no_item(
320320

321321
# assertions
322322
assert result is False
323+
324+
325+
def test_extract_pull_request_id_extracts_when_no_mention():
326+
# setup mocks
327+
if "app.utils.handler_utils" in sys.modules:
328+
del sys.modules["app.utils.handler_utils"]
329+
from app.utils.handler_utils import extract_pull_request_id
330+
331+
# perform operation
332+
pr_id, text = extract_pull_request_id("pr:12345 some question")
333+
# assertions
334+
assert pr_id == "12345"
335+
assert text == "some question"
336+
337+
338+
def test_extract_pull_request_id_extracts_when_no_pull_request():
339+
# setup mocks
340+
if "app.utils.handler_utils" in sys.modules:
341+
del sys.modules["app.utils.handler_utils"]
342+
from app.utils.handler_utils import extract_pull_request_id
343+
344+
# perform operation
345+
pr_id, text = extract_pull_request_id("some question")
346+
# assertions
347+
assert pr_id is None
348+
assert text == "some question"
349+
350+
351+
def test_extract_pull_request_id_extracts_when_there_is_a_mention():
352+
# setup mocks
353+
if "app.utils.handler_utils" in sys.modules:
354+
del sys.modules["app.utils.handler_utils"]
355+
from app.utils.handler_utils import extract_pull_request_id
356+
357+
# perform operation
358+
pr_id, text = extract_pull_request_id("<@U123> pr:12345 some question")
359+
# assertions
360+
assert pr_id == "12345"
361+
assert text == "<@U123> some question"

packages/slackBotFunction/tests/test_slack_events.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ def test_process_async_slack_event_pull_request_with_mention(
5757
) as mock_process_slack_message:
5858
process_async_slack_event(event=slack_event_data, event_id="evt123", client=mock_client)
5959
mock_forward_event_to_pull_request_lambda.assert_called_once_with(
60-
pull_request_id=123,
60+
pull_request_id="123",
6161
event=slack_event_data,
6262
event_id="evt123",
6363
store_pull_request_id=True,
@@ -93,7 +93,7 @@ def test_process_async_slack_event_pull_request_with_no_mention(
9393
) as mock_process_slack_message:
9494
process_async_slack_event(event=slack_event_data, event_id="evt123", client=mock_client)
9595
mock_forward_event_to_pull_request_lambda.assert_called_once_with(
96-
pull_request_id=123,
96+
pull_request_id="123",
9797
event=slack_event_data,
9898
event_id="evt123",
9999
store_pull_request_id=True,

0 commit comments

Comments
 (0)