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
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.')