From af577a5854f8269bcc989356999203cfceaef326 Mon Sep 17 00:00:00 2001 From: Sam Date: Sun, 6 Mar 2016 09:12:59 +1100 Subject: [PATCH] FEATURE: like notification frequency of never --- .../discourse/controllers/preferences.js.es6 | 3 ++- .../like_notification_frequency_site_setting.rb | 1 + app/models/user_option.rb | 2 +- app/services/post_alerter.rb | 2 ++ config/locales/client.en.yml | 1 + spec/services/post_alerter_spec.rb | 14 ++++++++++++++ 6 files changed, 21 insertions(+), 2 deletions(-) diff --git a/app/assets/javascripts/discourse/controllers/preferences.js.es6 b/app/assets/javascripts/discourse/controllers/preferences.js.es6 index 4ca145f2d9a..005ff085a8f 100644 --- a/app/assets/javascripts/discourse/controllers/preferences.js.es6 +++ b/app/assets/javascripts/discourse/controllers/preferences.js.es6 @@ -77,7 +77,8 @@ export default Ember.Controller.extend(CanCheckEmails, { likeNotificationFrequencies: [{ name: I18n.t('user.like_notification_frequency.always'), value: 0 }, { name: I18n.t('user.like_notification_frequency.first_time_and_daily'), value: 1 }, - { name: I18n.t('user.like_notification_frequency.first_time'), value: 2 }], + { name: I18n.t('user.like_notification_frequency.first_time'), value: 2 }, + { name: I18n.t('user.like_notification_frequency.never'), value: 3 }], autoTrackDurations: [{ name: I18n.t('user.auto_track_options.never'), value: -1 }, { name: I18n.t('user.auto_track_options.immediately'), value: 0 }, diff --git a/app/models/like_notification_frequency_site_setting.rb b/app/models/like_notification_frequency_site_setting.rb index 7ff681d6742..33f009af576 100644 --- a/app/models/like_notification_frequency_site_setting.rb +++ b/app/models/like_notification_frequency_site_setting.rb @@ -12,6 +12,7 @@ class LikeNotificationFrequencySiteSetting < EnumSiteSetting { name: 'user.like_notification_frequency.always', value: 0 }, { name: 'user.like_notification_frequency.first_time_and_daily', value: 1 }, { name: 'user.like_notification_frequency.first_time', value: 2 }, + { name: 'user.like_notification_frequency.never', value: 3 }, ] end diff --git a/app/models/user_option.rb b/app/models/user_option.rb index 25ecee9aa60..91995e1b1c4 100644 --- a/app/models/user_option.rb +++ b/app/models/user_option.rb @@ -10,7 +10,7 @@ class UserOption < ActiveRecord::Base end def self.like_notification_frequency_type - @like_notification_frequency_type ||= Enum.new(always: 0, first_time_and_daily: 1, first_time: 2) + @like_notification_frequency_type ||= Enum.new(always: 0, first_time_and_daily: 1, first_time: 2, never: 3) end def set_defaults diff --git a/app/services/post_alerter.rb b/app/services/post_alerter.rb index 97cbcfc482b..47d9a1b9227 100644 --- a/app/services/post_alerter.rb +++ b/app/services/post_alerter.rb @@ -221,6 +221,8 @@ class PostAlerter return if user.blank? return if user.id == Discourse::SYSTEM_USER_ID + return if type == Notification.types[:liked] && user.user_option.like_notification_frequency == UserOption.like_notification_frequency_type[:never] + opts ||= {} # Make sure the user can see the post diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index 78ce98f7f69..3ca6e768ef2 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -634,6 +634,7 @@ en: always: "Always" first_time_and_daily: "First time a post is liked and daily" first_time: "First time a post is liked" + never: "Never" email_previous_replies: title: "Include previous replies at the bottom of emails" unless_emailed: "unless previously sent" diff --git a/spec/services/post_alerter_spec.rb b/spec/services/post_alerter_spec.rb index 82f3a0a274d..f029469692b 100644 --- a/spec/services/post_alerter_spec.rb +++ b/spec/services/post_alerter_spec.rb @@ -63,6 +63,20 @@ describe PostAlerter do expect(Notification.count(post_number: 1, topic_id: post.topic_id)).to eq(1) end + it 'notifies on does not notify when never is selected' do + ActiveRecord::Base.observers.enable :all + + post = Fabricate(:post, raw: 'I love waffles') + + post.user.user_option.update_columns(like_notification_frequency: + UserOption.like_notification_frequency_type[:never]) + + PostAction.act(evil_trout, post, PostActionType.types[:like]) + + + expect(Notification.count(post_number: 1, topic_id: post.topic_id)).to eq(0) + end + it 'notifies on likes correctly' do ActiveRecord::Base.observers.enable :all