Feature #37978 » add-email-notification-option-only-i-watch.patch
| app/models/project.rb | ||
|---|---|---|
| 626 | 626 | |
| 627 | 627 |
# Returns the users that should be notified on project events |
| 628 | 628 |
def notified_users |
| 629 |
users.where('members.mail_notification = ? OR users.mail_notification = ?', true, 'all')
|
|
| 629 |
users.where('(members.mail_notification = ? OR users.mail_notification = ?) AND users.mail_notification <> ?', true, 'all', 'only_i_watch')
|
|
| 630 | 630 |
end |
| 631 | 631 | |
| 632 | 632 |
# Returns a scope of all custom fields enabled for project issues |
| app/models/user.rb | ||
|---|---|---|
| 77 | 77 |
['selected', :label_user_mail_option_selected], |
| 78 | 78 |
['only_my_events', :label_user_mail_option_only_my_events], |
| 79 | 79 |
['only_assigned', :label_user_mail_option_only_assigned], |
| 80 |
['only_i_watch', :label_user_mail_option_only_i_watch], |
|
| 80 | 81 |
['only_owner', :label_user_mail_option_only_owner], |
| 81 | 82 |
['none', :label_user_mail_option_none] |
| 82 | 83 |
] |
| ... | ... | |
| 816 | 817 |
def notify_about?(object) |
| 817 | 818 |
if mail_notification == 'all' |
| 818 | 819 |
true |
| 819 |
elsif mail_notification.blank? || mail_notification == 'none' |
|
| 820 |
elsif mail_notification.blank? || mail_notification == 'none' || mail_notification == 'only_i_watch'
|
|
| 820 | 821 |
false |
| 821 | 822 |
else |
| 822 | 823 |
case object |
| config/locales/en.yml | ||
|---|---|---|
| 946 | 946 |
label_user_mail_option_none: "No events" |
| 947 | 947 |
label_user_mail_option_only_my_events: "Only for things I watch or I'm involved in" |
| 948 | 948 |
label_user_mail_option_only_assigned: "Only for things I watch or I am assigned to" |
| 949 |
label_user_mail_option_only_i_watch: "Only for things I watch" |
|
| 949 | 950 |
label_user_mail_option_only_owner: "Only for things I watch or I am the owner of" |
| 950 | 951 |
label_user_mail_no_self_notified: "I don't want to be notified of changes that I make myself" |
| 951 | 952 |
label_user_mail_notify_about_high_priority_issues_html: "Also notify me about issues with a priority of <em>%{prio}</em> or higher"
|
| config/locales/ja.yml | ||
|---|---|---|
| 759 | 759 |
label_user_mail_option_none: "通知しない" |
| 760 | 760 |
label_user_mail_option_only_my_events: "ウォッチ中または自分が関係しているもの" |
| 761 | 761 |
label_user_mail_option_only_assigned: "ウォッチ中または自分が担当しているもの" |
| 762 |
label_user_mail_option_only_i_watch: "ウォッチ中のもの" |
|
| 762 | 763 |
label_user_mail_option_only_owner: "ウォッチ中または自分が作成したもの" |
| 763 | 764 |
label_user_mail_no_self_notified: 自分自身による変更の通知は不要 |
| 764 | 765 |
label_registration_activation_by_email: メールでアカウントを有効化 |
| test/unit/project_test.rb | ||
|---|---|---|
| 1051 | 1051 |
only_owned_user = User.generate!(:mail_notification => 'only_owner') |
| 1052 | 1052 |
Member.create!(:project => project, :roles => [role], :principal => only_owned_user) |
| 1053 | 1053 | |
| 1054 |
only_i_watch_user = User.generate!(:mail_notification => 'only_i_watch') |
|
| 1055 |
Member.create!(:project => project, :roles => [role], :mail_notification => true, :principal => only_i_watch_user) |
|
| 1056 | ||
| 1054 | 1057 |
assert project.notified_users.include?(user_with_membership_notification), |
| 1055 | 1058 |
"should include members with a mail notification" |
| 1056 | 1059 |
assert project.notified_users.include?(all_events_user), |
| ... | ... | |
| 1063 | 1066 |
"should not include users with the 'only_assigned' notification option" |
| 1064 | 1067 |
assert !project.notified_users.include?(only_owned_user), |
| 1065 | 1068 |
"should not include users with the 'only_owner' notification option" |
| 1069 |
assert !project.notified_users.include?(only_i_watch_user), |
|
| 1070 |
"should not include users with the 'only_i_watch' notification option" |
|
| 1066 | 1071 |
end |
| 1067 | 1072 | |
| 1068 | 1073 |
def test_override_roles_without_builtin_group_memberships |
| test/unit/user_test.rb | ||
|---|---|---|
| 1043 | 1043 | |
| 1044 | 1044 |
def test_valid_notification_options |
| 1045 | 1045 |
# without memberships |
| 1046 |
assert_equal 5, User.find(7).valid_notification_options.size
|
|
| 1046 |
assert_equal 6, User.find(7).valid_notification_options.size
|
|
| 1047 | 1047 |
# with memberships |
| 1048 |
assert_equal 6, User.find(2).valid_notification_options.size
|
|
| 1048 |
assert_equal 7, User.find(2).valid_notification_options.size
|
|
| 1049 | 1049 |
end |
| 1050 | 1050 | |
| 1051 | 1051 |
def test_valid_notification_options_class_method |
| 1052 |
assert_equal 5, User.valid_notification_options.size
|
|
| 1053 |
assert_equal 5, User.valid_notification_options(User.find(7)).size
|
|
| 1054 |
assert_equal 6, User.valid_notification_options(User.find(2)).size
|
|
| 1052 |
assert_equal 6, User.valid_notification_options.size
|
|
| 1053 |
assert_equal 6, User.valid_notification_options(User.find(7)).size
|
|
| 1054 |
assert_equal 7, User.valid_notification_options(User.find(2)).size
|
|
| 1055 | 1055 |
end |
| 1056 | 1056 | |
| 1057 | 1057 |
def test_notified_project_ids_setter_should_coerce_to_unique_integer_array |
| ... | ... | |
| 1261 | 1261 |
assert_equal expected.include?(option), user.notify_about?(issue) |
| 1262 | 1262 |
end |
| 1263 | 1263 |
end |
| 1264 | ||
| 1265 |
[author, assignee, member].each do |user| |
|
| 1266 |
user.mail_notification = 'all' |
|
| 1267 |
assert user.notify_about?(issue) |
|
| 1268 |
%w(none only_i_watch).each do |option| |
|
| 1269 | ||
| 1270 |
user.mail_notification = option |
|
| 1271 |
assert !user.notify_about?(issue) |
|
| 1272 |
end |
|
| 1273 |
end |
|
| 1264 | 1274 |
end |
| 1265 | 1275 | |
| 1266 | 1276 |
def test_notify_about_issue_for_previous_assignee |
| ... | ... | |
| 1292 | 1302 | |
| 1293 | 1303 |
User::MAIL_NOTIFICATION_OPTIONS.map(&:first).each do |option| |
| 1294 | 1304 |
user.mail_notification = option |
| 1295 |
assert_equal (option != 'none'), user.notify_about?(news) |
|
| 1305 |
assert_equal (option != 'none' && option != 'only_i_watch'), user.notify_about?(news)
|
|
| 1296 | 1306 |
end |
| 1297 | 1307 |
end |
| 1298 | 1308 | |