FIX: Only send reminders to moderators and admins.

This commit is contained in:
Guo Xiang Tan 2019-04-30 12:00:59 +08:00
parent 760d331f42
commit 8b06b7cb4c
3 changed files with 27 additions and 6 deletions

View File

@ -7,12 +7,27 @@ class RemindAssignsFrequencySiteSettings < EnumSiteSetting
values.any? { |v| v[:value] == val.to_i }
end
DAILY_MINUTES = 24 * 60 * 1
MONTHLY_MINUTES = DAILY_MINUTES * 30
QUARTERLY_MINUTES = DAILY_MINUTES * 90
def self.values
@values ||= [
{ name: 'discourse_assign.reminders_frequency.never', value: 0 },
{ name: 'discourse_assign.reminders_frequency.daily', value: 1440 },
{ name: 'discourse_assign.reminders_frequency.monthly', value: 43200 },
{ name: 'discourse_assign.reminders_frequency.quarterly', value: 131400 }
{
name: 'discourse_assign.reminders_frequency.never', value: 0
},
{
name: 'discourse_assign.reminders_frequency.daily',
value: DAILY_MINUTES
},
{
name: 'discourse_assign.reminders_frequency.monthly',
value: MONTHLY_MINUTES
},
{
name: 'discourse_assign.reminders_frequency.quarterly',
value: QUARTERLY_MINUTES
}
]
end

View File

@ -21,7 +21,9 @@ module Jobs
LEFT OUTER JOIN user_custom_fields ON topic_custom_fields.value::INT = user_custom_fields.user_id
AND user_custom_fields.name = '#{PendingAssignsReminder::REMINDED_AT}'
SQL
).where(<<~SQL
).joins("INNER JOIN users ON topic_custom_fields.value::INT = users.id")
.where("users.moderator OR users.admin")
.where(<<~SQL
user_custom_fields.value IS NULL OR
user_custom_fields.value::TIMESTAMP <= CURRENT_TIMESTAMP - ('1 MINUTE'::INTERVAL * #{interval})
SQL

View File

@ -1,7 +1,11 @@
require 'rails_helper'
RSpec.describe Jobs::EnqueueReminders do
let(:user) { Fabricate(:user) }
let(:user) { Fabricate(:user, admin: true) }
before do
SiteSetting.remind_assigns_frequency = RemindAssignsFrequencySiteSettings::MONTHLY_MINUTES
end
describe '#execute' do
it 'does not enqueue reminders when there are no assigned tasks' do