From: Marius Balteanu Date: Mon, 20 Jun 2022 15:17:00 +0000 (+0000) Subject: Merged r21660 to 5.0-stable (#37138). X-Git-Tag: 5.0.2~6 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=3e12fc1831fba8026e6988b552b24a1918307c5e;p=redmine.git Merged r21660 to 5.0-stable (#37138). git-svn-id: https://svn.redmine.org/redmine/branches/5.0-stable@21665 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- diff --git a/lib/redmine/acts/mentionable.rb b/lib/redmine/acts/mentionable.rb index 264d1f50b..1629bbe41 100644 --- a/lib/redmine/acts/mentionable.rb +++ b/lib/redmine/acts/mentionable.rb @@ -90,19 +90,20 @@ module Redmine content = content.gsub(%r{(~~~|```)(.*?)(~~~|```)}m, '') end - users = content.scan(MENTION_PATTERN).flatten + content.scan(MENTION_PATTERN).flatten end MENTION_PATTERN = / - (?:^|\W) # beginning of string or non-word char - @((?>[a-z0-9][a-z0-9-]*)) # @username - (?!\/) # without a trailing slash + (?:^|\W) + @([A-Za-z0-9_\-@\.]*?) (?= - \.+[ \t\W]| # dots followed by space or non-word character - \.+$| # dots at end of line - [^0-9a-zA-Z_.]| # non-word character except dot - $ # end of line - ) + (?=[[:punct:]][^A-Za-z0-9_\/])| + ,| + \.+$| + \s| + \]| + <| + $) /ix end end diff --git a/test/unit/lib/redmine/acts/mentionable_test.rb b/test/unit/lib/redmine/acts/mentionable_test.rb index 9badcd6d2..cf01c3289 100644 --- a/test/unit/lib/redmine/acts/mentionable_test.rb +++ b/test/unit/lib/redmine/acts/mentionable_test.rb @@ -34,6 +34,15 @@ class Redmine::Acts::MentionableTest < ActiveSupport::TestCase assert_equal [User.find(3)], issue.mentioned_users end + def test_mentioned_users_with_user_mention_having_mail_as_login + user = User.generate!(login: "foo@example.net") + User.add_to_project(user, Project.find(1), Role.find(1)) + + issue = Issue.generate!(project_id: 1, description: '@dlopper and @foo@example.net') + + assert_equal [User.find(3), user], issue.mentioned_users + end + def test_mentioned_users_with_multiple_mentions issue = Issue.generate!(project_id: 1, description: 'Hello @dlopper, @jsmith.')