Feature #13919 » feature_13919_v2.patch
| app/helpers/application_helper.rb | ||
|---|---|---|
| 54 | 54 |
name = h(user.name(options[:format])) |
| 55 | 55 |
if user.active? || (User.current.admin? && user.logged?) |
| 56 | 56 |
only_path = options[:only_path].nil? ? true : options[:only_path] |
| 57 |
link_to name, user_url(user, :only_path => only_path), :class => user.css_classes |
|
| 57 |
css_classes = options[:class] ? "#{user.css_classes} #{options[:class]}" : user.css_classes
|
|
| 58 |
link_to name, user_url(user, :only_path => only_path), :class => css_classes |
|
| 58 | 59 |
else |
| 59 | 60 |
name |
| 60 | 61 |
end |
| ... | ... | |
| 990 | 991 |
if p = Project.visible.find_by_id(oid) |
| 991 | 992 |
link = link_to_project(p, {:only_path => only_path}, :class => 'project')
|
| 992 | 993 |
end |
| 993 |
when 'user' |
|
| 994 |
u = User.visible.find_by(:id => oid, :type => 'User') |
|
| 995 |
link = link_to_user(u, :only_path => only_path) if u |
|
| 996 | 994 |
end |
| 997 | 995 |
elsif sep == ':' |
| 998 | 996 |
name = remove_double_quotes(identifier) |
| ... | ... | |
| 1051 | 1049 |
if p = Project.visible.where("identifier = :s OR LOWER(name) = :s", :s => name.downcase).first
|
| 1052 | 1050 |
link = link_to_project(p, {:only_path => only_path}, :class => 'project')
|
| 1053 | 1051 |
end |
| 1054 |
when 'user' |
|
| 1055 |
u = User.visible.find_by("LOWER(login) = :s AND type = 'User'", :s => name.downcase)
|
|
| 1056 |
link = link_to_user(u, :only_path => only_path) if u |
|
| 1057 | 1052 |
end |
| 1058 |
elsif sep == "@" |
|
| 1059 |
name = remove_double_quotes(identifier) |
|
| 1060 |
u = User.visible.find_by("LOWER(login) = :s AND type = 'User'", :s => name.downcase)
|
|
| 1061 |
link = link_to_user(u, :only_path => only_path) if u |
|
| 1053 |
end |
|
| 1054 |
if link.nil? && $~ |
|
| 1055 |
user = User.mentioned_user($~.named_captures.symbolize_keys) |
|
| 1056 |
if user |
|
| 1057 |
css_classes = (user.notify_mentioned_user?(obj) ? 'notified' : nil) |
|
| 1058 |
link = link_to_user(user, :only_path => only_path, :class => css_classes) |
|
| 1059 |
end |
|
| 1062 | 1060 |
end |
| 1063 | 1061 |
end |
| 1064 | 1062 |
(leading + (link || "#{project_prefix}#{prefix}#{repo_prefix}#{sep}#{identifier}#{comment_suffix}"))
|
| app/models/document.rb | ||
|---|---|---|
| 63 | 63 |
end |
| 64 | 64 | |
| 65 | 65 |
def notified_users |
| 66 |
project.notified_users.reject {|user| !visible?(user)}
|
|
| 66 |
project.notified_users.select {|user| user.allowed_to_view_notify_target?(self) }
|
|
| 67 | 67 |
end |
| 68 | 68 | |
| 69 | 69 |
private |
| app/models/issue.rb | ||
|---|---|---|
| 1040 | 1040 |
notified += project.notified_users |
| 1041 | 1041 |
notified.uniq! |
| 1042 | 1042 |
# Remove users that can not view the issue |
| 1043 |
notified.reject! {|user| !visible?(user)}
|
|
| 1044 |
notified |
|
| 1043 |
notified.select {|user| user.allowed_to_view_notify_target?(self)}
|
|
| 1045 | 1044 |
end |
| 1046 | 1045 | |
| 1047 | 1046 |
# Returns the email addresses that should be notified |
| app/models/journal.rb | ||
|---|---|---|
| 143 | 143 | |
| 144 | 144 |
def notified_users |
| 145 | 145 |
notified = journalized.notified_users |
| 146 |
if private_notes? |
|
| 147 |
notified = notified.select {|user| user.allowed_to?(:view_private_notes, journalized.project)}
|
|
| 148 |
end |
|
| 149 |
notified |
|
| 146 |
notified.select{ |u| u.allowed_to_view_notify_target?(self) }
|
|
| 150 | 147 |
end |
| 151 | 148 | |
| 152 | 149 |
def recipients |
| app/models/mailer.rb | ||
|---|---|---|
| 92 | 92 |
# Mailer.deliver_issue_add(issue) |
| 93 | 93 |
def self.deliver_issue_add(issue) |
| 94 | 94 |
users = issue.notified_users | issue.notified_watchers |
| 95 |
users |= mentioned_users(issue.description, issue) |
|
| 95 | 96 |
users.each do |user| |
| 96 | 97 |
issue_add(user, issue).deliver_later |
| 97 | 98 |
end |
| ... | ... | |
| 126 | 127 |
# Mailer.deliver_issue_edit(journal) |
| 127 | 128 |
def self.deliver_issue_edit(journal) |
| 128 | 129 |
users = journal.notified_users | journal.notified_watchers |
| 130 |
users |= mentioned_users(journal.notes, journal) |
|
| 129 | 131 |
users.select! do |user| |
| 130 | 132 |
journal.notes? || journal.visible_details(user).any? |
| 131 | 133 |
end |
| ... | ... | |
| 151 | 153 |
# Mailer.deliver_document_added(document, author) |
| 152 | 154 |
def self.deliver_document_added(document, author) |
| 153 | 155 |
users = document.notified_users |
| 156 |
users |= mentioned_users(document.description, document) |
|
| 154 | 157 |
users.each do |user| |
| 155 | 158 |
document_added(user, document, author).deliver_later |
| 156 | 159 |
end |
| ... | ... | |
| 219 | 222 |
# Mailer.deliver_news_added(news) |
| 220 | 223 |
def self.deliver_news_added(news) |
| 221 | 224 |
users = news.notified_users | news.notified_watchers_for_added_news |
| 225 |
users |= mentioned_users(news.description, news) |
|
| 222 | 226 |
users.each do |user| |
| 223 | 227 |
news_added(user, news).deliver_later |
| 224 | 228 |
end |
| ... | ... | |
| 246 | 250 |
def self.deliver_news_comment_added(comment) |
| 247 | 251 |
news = comment.commented |
| 248 | 252 |
users = news.notified_users | news.notified_watchers |
| 253 |
users |= mentioned_users(comment.content, news) |
|
| 249 | 254 |
users.each do |user| |
| 250 | 255 |
news_comment_added(user, comment).deliver_later |
| 251 | 256 |
end |
| ... | ... | |
| 273 | 278 |
users = message.notified_users |
| 274 | 279 |
users |= message.root.notified_watchers |
| 275 | 280 |
users |= message.board.notified_watchers |
| 281 |
users |= mentioned_users(message.content, message) |
|
| 276 | 282 | |
| 277 | 283 |
users.each do |user| |
| 278 | 284 |
message_posted(user, message).deliver_later |
| ... | ... | |
| 300 | 306 |
# Mailer.deliver_wiki_content_added(wiki_content) |
| 301 | 307 |
def self.deliver_wiki_content_added(wiki_content) |
| 302 | 308 |
users = wiki_content.notified_users | wiki_content.page.wiki.notified_watchers |
| 309 |
users |= mentioned_users(wiki_content.text, wiki_content) |
|
| 303 | 310 |
users.each do |user| |
| 304 | 311 |
wiki_content_added(user, wiki_content).deliver_later |
| 305 | 312 |
end |
| ... | ... | |
| 331 | 338 |
users = wiki_content.notified_users |
| 332 | 339 |
users |= wiki_content.page.notified_watchers |
| 333 | 340 |
users |= wiki_content.page.wiki.notified_watchers |
| 341 |
users |= mentioned_users(wiki_content.text, wiki_content) |
|
| 334 | 342 | |
| 335 | 343 |
users.each do |user| |
| 336 | 344 |
wiki_content_updated(user, wiki_content).deliver_later |
| ... | ... | |
| 760 | 768 |
@references_objects ||= [] |
| 761 | 769 |
@references_objects << object |
| 762 | 770 |
end |
| 771 | ||
| 772 |
def self.mentioned_users(text, obj) |
|
| 773 |
users = [] |
|
| 774 |
return users if text.blank? |
|
| 775 |
text.scan(ApplicationHelper::LINKS_RE) do |_| |
|
| 776 |
target = User.mentioned_user($~.named_captures.symbolize_keys) |
|
| 777 |
next if target.blank? || users.include?(target) |
|
| 778 |
users << target if target.notify_mentioned_user?(obj) |
|
| 779 |
end |
|
| 780 |
users |
|
| 781 |
end |
|
| 763 | 782 |
end |
| 764 | 783 | |
| app/models/message.rb | ||
|---|---|---|
| 105 | 105 |
end |
| 106 | 106 | |
| 107 | 107 |
def notified_users |
| 108 |
project.notified_users.reject {|user| !visible?(user)}
|
|
| 108 |
project.notified_users.select {|user| user.allowed_to_view_notify_target?(self) }
|
|
| 109 | 109 |
end |
| 110 | 110 | |
| 111 | 111 |
private |
| app/models/news.rb | ||
|---|---|---|
| 56 | 56 |
end |
| 57 | 57 | |
| 58 | 58 |
def notified_users |
| 59 |
project.users.select {|user| user.notify_about?(self) && user.allowed_to?(:view_news, project)}
|
|
| 59 |
project.users.select {|user| user.notify_about?(self) && user.allowed_to_view_notify_target?(self)}
|
|
| 60 | 60 |
end |
| 61 | 61 | |
| 62 | 62 |
def recipients |
| app/models/user.rb | ||
|---|---|---|
| 797 | 797 |
RequestStore.store[:current_user] ||= User.anonymous |
| 798 | 798 |
end |
| 799 | 799 | |
| 800 |
# Return the mentioned user to based on the match data |
|
| 801 |
# of ApplicationHelper::LINKS_RE. |
|
| 802 |
# user:jsmith -> Link to user with login jsmith |
|
| 803 |
# @jsmith -> Link to user with login jsmith |
|
| 804 |
# user#2 -> Link to user with id 2 |
|
| 805 |
def self.mentioned_user(match_data) |
|
| 806 |
return nil if match_data[:esc] |
|
| 807 |
sep = match_data[:sep1] || match_data[:sep2] || match_data[:sep3] || match_data[:sep4] |
|
| 808 |
identifier = match_data[:identifier1] || match_data[:identifier2] || match_data[:identifier3] |
|
| 809 |
prefix = match_data[:prefix] |
|
| 810 |
if (sep == '#' || sep == '##') && prefix == 'user' |
|
| 811 |
User.visible.find_by(:id => identifier.to_i, :type => 'User') |
|
| 812 |
elsif sep == '@' || (sep == ':' && prefix == 'user') |
|
| 813 |
name = identifier.gsub(%r{^"(.*)"$}, "\\1")
|
|
| 814 |
User.find_by_login(CGI.unescapeHTML(name).downcase) |
|
| 815 |
end |
|
| 816 |
end |
|
| 817 | ||
| 818 |
# Return true if notify the mentioned user. |
|
| 819 |
def notify_mentioned_user?(object) |
|
| 820 |
self.active? && |
|
| 821 |
self.mail.present? && |
|
| 822 |
self.mail_notification.present? && self.mail_notification != 'none' && |
|
| 823 |
self.allowed_to_view_notify_target?(object) |
|
| 824 |
end |
|
| 825 | ||
| 826 |
# Return true if the user is allowed to view the notify target. |
|
| 827 |
def allowed_to_view_notify_target?(object) |
|
| 828 |
case object |
|
| 829 |
when Journal |
|
| 830 |
self.allowed_to_view_notify_target?(object.journalized) && |
|
| 831 |
(!object.private_notes? || self.allowed_to?(:view_private_notes, object.journalized.project)) |
|
| 832 |
when Comment |
|
| 833 |
self.allowed_to_view_notify_target?(object.commented) |
|
| 834 |
when nil |
|
| 835 |
false |
|
| 836 |
else |
|
| 837 |
object.visible?(self) |
|
| 838 |
end |
|
| 839 |
end |
|
| 840 | ||
| 800 | 841 |
# Returns the anonymous user. If the anonymous user does not exist, it is created. There can be only |
| 801 | 842 |
# one anonymous user per database. |
| 802 | 843 |
def self.anonymous |
| app/models/wiki_content.rb | ||
|---|---|---|
| 53 | 53 |
end |
| 54 | 54 | |
| 55 | 55 |
def notified_users |
| 56 |
project.notified_users.reject {|user| !visible?(user)}
|
|
| 56 |
project.notified_users.select {|user| user.allowed_to_view_notify_target?(self) }
|
|
| 57 | 57 |
end |
| 58 | 58 | |
| 59 | 59 |
# Returns the mail addresses of users that should be notified |
| test/helpers/application_helper_test.rb | ||
|---|---|---|
| 1562 | 1562 |
assert_equal ::I18n.t(:label_user_anonymous), t |
| 1563 | 1563 |
end |
| 1564 | 1564 | |
| 1565 |
def test_link_to_user_with_class_name_should_include_class |
|
| 1566 |
user = User.find(2) |
|
| 1567 |
result = link_to("John Smith", "/users/2", :class => "user active test")
|
|
| 1568 |
assert_equal result, link_to_user(user, :class => 'test') |
|
| 1569 |
end |
|
| 1570 | ||
| 1565 | 1571 |
def test_link_to_attachment |
| 1566 | 1572 |
a = Attachment.find(3) |
| 1567 | 1573 |
assert_equal '<a href="/attachments/3">logo.gif</a>', |
| test/unit/mailer_test.rb | ||
|---|---|---|
| 365 | 365 |
assert_include 'dlopper@somenet.foo', recipients |
| 366 | 366 |
end |
| 367 | 367 | |
| 368 |
def test_issue_added_should_notify_mentioned_users |
|
| 369 |
# Non-public project issue |
|
| 370 |
issue = Issue.find(4) |
|
| 371 |
# Developer |
|
| 372 |
user = User.find(8) |
|
| 373 |
assert issue.visible?(user) |
|
| 374 | ||
| 375 |
# Notify mentioned users. |
|
| 376 |
["user##{user.id}", "@#{user.login}", "user:#{user.login}"].each do |description|
|
|
| 377 |
issue.update(:description => description) |
|
| 378 |
ActionMailer::Base.deliveries.clear |
|
| 379 |
Mailer.deliver_issue_add(issue) |
|
| 380 |
assert_include user.mail, recipients |
|
| 381 |
end |
|
| 382 | ||
| 383 |
# Do not notify unauthorized mentioned users. |
|
| 384 |
Role.find(2).remove_permission!(:view_issues) |
|
| 385 |
assert_not issue.visible?(user.reload) |
|
| 386 |
issue.update(:description => "user##{user.id}")
|
|
| 387 |
ActionMailer::Base.deliveries.clear |
|
| 388 |
Mailer.deliver_issue_add(issue) |
|
| 389 |
assert_not_include user.mail, recipients |
|
| 390 |
end |
|
| 391 | ||
| 368 | 392 |
def test_issue_add_should_send_mail_to_all_user_email_address |
| 369 | 393 |
EmailAddress.create!(:user_id => 3, :address => 'otheremail@somenet.foo') |
| 370 | 394 |
issue = Issue.find(1) |
| ... | ... | |
| 534 | 558 |
end |
| 535 | 559 |
end |
| 536 | 560 | |
| 561 |
def test_issue_edit_should_notify_mentioned_users |
|
| 562 |
# Non-public project journal |
|
| 563 |
issue = Issue.find(4) |
|
| 564 |
journal = Journal.generate!(:notes => '', :details => [JournalDetail.new], :journalized => issue) |
|
| 565 |
# Developer |
|
| 566 |
user = User.find(8) |
|
| 567 | ||
| 568 |
# Notify mentioned users. |
|
| 569 |
["user##{user.id}", "@#{user.login}", "user:#{user.login}"].each do |note|
|
|
| 570 |
journal.update(:notes => note) |
|
| 571 |
Mailer.deliver_issue_edit(journal) |
|
| 572 |
assert_include user.mail, recipients |
|
| 573 |
ActionMailer::Base.deliveries.clear |
|
| 574 |
end |
|
| 575 | ||
| 576 |
# Do not notify mentioned users without view_private_notes permission and journal is private. |
|
| 577 |
Role.find(2).remove_permission!(:view_private_notes) |
|
| 578 |
journal.update(:notes => "user##{user.id}", :private_notes => true)
|
|
| 579 |
Mailer.deliver_issue_edit(journal) |
|
| 580 |
assert_not_include user.mail, recipients |
|
| 581 |
ActionMailer::Base.deliveries.clear |
|
| 582 |
end |
|
| 583 | ||
| 537 | 584 |
def test_version_file_added |
| 538 | 585 |
attachements = [ Attachment.find_by_container_type('Version') ]
|
| 539 | 586 |
assert Mailer.deliver_attachments_added(attachements) |
| ... | ... | |
| 565 | 612 |
assert_not_include user2.mail, recipients |
| 566 | 613 |
end |
| 567 | 614 | |
| 615 |
def test_news_added_should_notify_mentioned_users |
|
| 616 |
project = Project.find(1) |
|
| 617 |
news = project.news.first |
|
| 618 |
user = User.find(8) # non member |
|
| 619 |
assert news.visible?(user) |
|
| 620 | ||
| 621 |
# Notify mentioned users. |
|
| 622 |
["user##{user.id}", "@#{user.login}", "user:#{user.login}"].each do |description|
|
|
| 623 |
news.update(:description => description) |
|
| 624 |
Mailer.deliver_news_added(news) |
|
| 625 |
assert_include user.mail, recipients |
|
| 626 |
ActionMailer::Base.deliveries.clear |
|
| 627 |
end |
|
| 628 | ||
| 629 |
# Do not notify unauthorized mentioned users. |
|
| 630 |
Role.non_member.remove_permission!(:view_news) |
|
| 631 |
assert_not news.visible?(user.reload) |
|
| 632 |
news.update(:description => "user##{user.id}")
|
|
| 633 |
Mailer.deliver_news_added(news) |
|
| 634 |
assert_not_include user.mail, recipients |
|
| 635 |
ActionMailer::Base.deliveries.clear |
|
| 636 |
end |
|
| 637 | ||
| 638 |
def test_news_comment_added_should_notify_mentioned_users |
|
| 639 |
project = Project.find(1) # public project |
|
| 640 |
news = project.news.first |
|
| 641 |
comment = news.comments.first |
|
| 642 |
user = User.find(8) # non member |
|
| 643 |
assert news.visible?(user) |
|
| 644 | ||
| 645 |
# Notify mentioned users. |
|
| 646 |
["user##{user.id}", "@#{user.login}", "user:#{user.login}"].each do |text|
|
|
| 647 |
comment.update(:content => text) |
|
| 648 |
Mailer.deliver_news_comment_added(comment) |
|
| 649 |
assert_include user.mail, recipients |
|
| 650 |
ActionMailer::Base.deliveries.clear |
|
| 651 |
end |
|
| 652 | ||
| 653 |
# Do not notify unauthorized mentioned users. |
|
| 654 |
Role.non_member.remove_permission!(:view_news) |
|
| 655 |
assert_not news.visible?(user.reload) |
|
| 656 |
comment.update(:content => "user##{user.id}")
|
|
| 657 |
Mailer.deliver_news_comment_added(comment) |
|
| 658 |
assert_not_include user.mail, recipients |
|
| 659 |
ActionMailer::Base.deliveries.clear |
|
| 660 |
end |
|
| 661 | ||
| 568 | 662 |
def test_wiki_content_added |
| 569 | 663 |
content = WikiContent.find(1) |
| 570 | 664 |
assert_difference 'ActionMailer::Base.deliveries.size', 2 do |
| ... | ... | |
| 577 | 671 |
end |
| 578 | 672 |
end |
| 579 | 673 | |
| 674 |
def test_wiki_content_added_should_notify_mentioned_users |
|
| 675 |
# Non-public project wiki_content |
|
| 676 |
project = Project.find(2) |
|
| 677 |
wiki_content = project.wiki.pages.first.content |
|
| 678 |
user = User.find(8) |
|
| 679 |
assert wiki_content.visible?(user) |
|
| 680 | ||
| 681 |
# Notify mentioned users. |
|
| 682 |
["user##{user.id}", "@#{user.login}", "user:#{user.login}"].each do |text|
|
|
| 683 |
wiki_content.update(:text => text) |
|
| 684 |
Mailer.deliver_wiki_content_added(wiki_content) |
|
| 685 |
assert_include user.mail, recipients |
|
| 686 |
ActionMailer::Base.deliveries.clear |
|
| 687 |
end |
|
| 688 | ||
| 689 |
# Do not notify unauthorized mentioned users. |
|
| 690 |
Role.find(2).remove_permission!(:view_wiki_pages) |
|
| 691 |
assert_not wiki_content.visible?(user.reload) |
|
| 692 |
wiki_content.update(:text => "user##{user.id}")
|
|
| 693 |
Mailer.deliver_wiki_content_added(wiki_content) |
|
| 694 |
assert_not_include user.mail, recipients |
|
| 695 |
ActionMailer::Base.deliveries.clear |
|
| 696 |
end |
|
| 697 | ||
| 580 | 698 |
def test_wiki_content_updated |
| 581 | 699 |
content = WikiContent.find(1) |
| 582 | 700 |
assert Mailer.deliver_wiki_content_updated(content) |
| ... | ... | |
| 946 | 1064 |
Mailer.email_addresses(User.find(2)).sort |
| 947 | 1065 |
end |
| 948 | 1066 | |
| 1067 |
def test_document_added_should_notify_mentioned_users |
|
| 1068 |
# Non-public project document |
|
| 1069 |
project = Project.find(2) |
|
| 1070 |
project.enable_module!(:documents) |
|
| 1071 |
document = Document.generate!(:project => project) |
|
| 1072 |
# Developer |
|
| 1073 |
user = User.find(8) |
|
| 1074 |
assert document.visible?(user) |
|
| 1075 | ||
| 1076 |
# Notify mentioned users. |
|
| 1077 |
["user##{user.id}", "@#{user.login}", "user:#{user.login}"].each do |description|
|
|
| 1078 |
document.update(:description => description) |
|
| 1079 |
Mailer.deliver_document_added(document, User.first) |
|
| 1080 |
assert_include user.mail, recipients |
|
| 1081 |
ActionMailer::Base.deliveries.clear |
|
| 1082 |
end |
|
| 1083 | ||
| 1084 |
# Do not notify unauthorized mentioned users. |
|
| 1085 |
Role.find(2).remove_permission!(:view_documents) |
|
| 1086 |
assert_not document.visible?(user.reload) |
|
| 1087 |
document.update(:description => "user##{user.id}")
|
|
| 1088 |
Mailer.deliver_document_added(document, User.first) |
|
| 1089 |
assert_not_include user.mail, recipients |
|
| 1090 |
ActionMailer::Base.deliveries.clear |
|
| 1091 |
end |
|
| 1092 | ||
| 1093 |
def test_message_posted_should_notify_mentioned_users |
|
| 1094 |
# Non-public project message |
|
| 1095 |
project = Project.find(2) |
|
| 1096 |
message = project.boards.first.messages.first |
|
| 1097 |
user = User.find(8) |
|
| 1098 |
assert message.visible?(user) |
|
| 1099 | ||
| 1100 |
# Notify mentioned users. |
|
| 1101 |
["user##{user.id}", "@#{user.login}", "user:#{user.login}"].each do |text|
|
|
| 1102 |
message.update(:content => text) |
|
| 1103 |
Mailer.deliver_message_posted(message) |
|
| 1104 |
assert_include user.mail, recipients |
|
| 1105 |
ActionMailer::Base.deliveries.clear |
|
| 1106 |
end |
|
| 1107 | ||
| 1108 |
# Do not notify unauthorized mentioned users. |
|
| 1109 |
Role.find(2).remove_permission!(:view_messages) |
|
| 1110 |
assert_not message.visible?(user.reload) |
|
| 1111 |
message.update(:content => "user##{user.id}")
|
|
| 1112 |
Mailer.deliver_message_posted(message) |
|
| 1113 |
assert_not_include user.mail, recipients |
|
| 1114 |
ActionMailer::Base.deliveries.clear |
|
| 1115 |
end |
|
| 1116 | ||
| 949 | 1117 |
private |
| 950 | 1118 | |
| 951 | 1119 |
# Returns an array of email addresses to which emails were sent |
| test/unit/user_test.rb | ||
|---|---|---|
| 461 | 461 |
assert_nil changeset.reload.user_id |
| 462 | 462 |
end |
| 463 | 463 | |
| 464 |
def test_mentioned_user |
|
| 465 |
# user#id |
|
| 466 |
match_data = { :esc => nil, :prefix => 'user', :sep1 => '#', :identifier1 => '1' }
|
|
| 467 |
assert_equal User.mentioned_user(match_data), User.find(1) |
|
| 468 | ||
| 469 |
# user:login |
|
| 470 |
match_data = { :esc => nil, :prefix => 'user', :sep3 => ':', :identifier2 => 'admin' }
|
|
| 471 |
assert_equal User.mentioned_user(match_data), User.find_by_login('admin')
|
|
| 472 | ||
| 473 |
# @login |
|
| 474 |
match_data = { :esc => nil, :sep4 => '@', :identifier3 => 'admin' }
|
|
| 475 |
assert_equal User.mentioned_user(match_data), User.find_by_login('admin')
|
|
| 476 |
end |
|
| 477 | ||
| 478 |
def test_notify_mentioned_user? |
|
| 479 |
issue = Issue.first |
|
| 480 |
user = User.find(2) |
|
| 481 |
assert user.notify_mentioned_user?(issue) |
|
| 482 | ||
| 483 |
user.roles_for_project(issue.project).first.remove_permission!(:view_issues) |
|
| 484 |
assert_not user.reload.notify_mentioned_user?(issue) |
|
| 485 |
end |
|
| 486 | ||
| 487 |
def test_allowed_to_view_notify_target |
|
| 488 |
issue = Issue.first |
|
| 489 |
user = User.find(2) |
|
| 490 | ||
| 491 |
assert issue.visible?(user) |
|
| 492 |
assert user.allowed_to_view_notify_target?(issue) |
|
| 493 | ||
| 494 |
user.roles_for_project(issue.project).first.remove_permission!(:view_issues) |
|
| 495 |
user.reload |
|
| 496 |
assert_not issue.visible?(user) |
|
| 497 |
assert_not user.allowed_to_view_notify_target?(issue) |
|
| 498 |
end |
|
| 499 | ||
| 500 |
def test_allowed_to_view_notify_target_with_journal |
|
| 501 |
journal = Journal.first |
|
| 502 |
user = User.find(3) |
|
| 503 | ||
| 504 |
assert journal.issue.visible?(user) |
|
| 505 |
assert user.allowed_to_view_notify_target?(journal) |
|
| 506 | ||
| 507 |
journal.update(:private_notes => true) |
|
| 508 |
Role.find(2).remove_permission!(:view_private_note) |
|
| 509 |
assert_not user.reload.allowed_to_view_notify_target?(journal) |
|
| 510 | ||
| 511 |
journal.update(:private_notes => false) |
|
| 512 |
Role.find(2).remove_permission!(:view_issues) |
|
| 513 |
assert_not user.reload.allowed_to_view_notify_target?(journal) |
|
| 514 |
end |
|
| 515 | ||
| 516 |
def test_allowed_to_view_notify_target_with_comment |
|
| 517 |
comment = Comment.first |
|
| 518 |
user = User.find(3) |
|
| 519 | ||
| 520 |
assert comment.commented.visible?(user) |
|
| 521 |
assert user.allowed_to_view_notify_target?(comment) |
|
| 522 | ||
| 523 |
Role.find(2).remove_permission!(:view_news) |
|
| 524 |
assert_not user.reload.allowed_to_view_notify_target?(comment) |
|
| 525 |
end |
|
| 526 | ||
| 464 | 527 |
def test_anonymous_user_should_not_be_destroyable |
| 465 | 528 |
assert_no_difference 'User.count' do |
| 466 | 529 |
assert_equal false, User.anonymous.destroy |