summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/redmine/acts/mentionable.rb19
-rw-r--r--test/unit/lib/redmine/acts/mentionable_test.rb9
2 files changed, 19 insertions, 9 deletions
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.')