Add a buffer in determining whether to remind a user about assignments
This commit is contained in:
parent
6c3fd0f088
commit
fc82ba7607
|
@ -20,6 +20,8 @@ module Jobs
|
||||||
Group.assign_allowed_groups.pluck(:id).join(",")
|
Group.assign_allowed_groups.pluck(:id).join(",")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
REMINDER_BUFFER_MINUTES = 10
|
||||||
|
|
||||||
def user_ids
|
def user_ids
|
||||||
global_frequency = SiteSetting.remind_assigns_frequency
|
global_frequency = SiteSetting.remind_assigns_frequency
|
||||||
frequency =
|
frequency =
|
||||||
|
@ -46,7 +48,7 @@ module Jobs
|
||||||
AND #{frequency} > 0
|
AND #{frequency} > 0
|
||||||
AND (
|
AND (
|
||||||
last_reminder.value IS NULL OR
|
last_reminder.value IS NULL OR
|
||||||
last_reminder.value::TIMESTAMP <= CURRENT_TIMESTAMP - ('1 MINUTE'::INTERVAL * #{frequency})
|
last_reminder.value::TIMESTAMP <= CURRENT_TIMESTAMP - ('1 MINUTE'::INTERVAL * #{frequency}) + ('1 MINUTE'::INTERVAL * #{REMINDER_BUFFER_MINUTES})
|
||||||
)
|
)
|
||||||
AND assignments.updated_at::TIMESTAMP <= CURRENT_TIMESTAMP - ('1 MINUTE'::INTERVAL * #{frequency})
|
AND assignments.updated_at::TIMESTAMP <= CURRENT_TIMESTAMP - ('1 MINUTE'::INTERVAL * #{frequency})
|
||||||
AND assignments.assigned_to_type = 'User'
|
AND assignments.assigned_to_type = 'User'
|
||||||
|
|
|
@ -3,12 +3,13 @@
|
||||||
require "rails_helper"
|
require "rails_helper"
|
||||||
|
|
||||||
RSpec.describe Jobs::EnqueueReminders do
|
RSpec.describe Jobs::EnqueueReminders do
|
||||||
let(:assign_allowed_group) { Group.find_by(name: "staff") }
|
fab!(:assign_allowed_group) { Fabricate(:group) }
|
||||||
let(:user) { Fabricate(:user, groups: [assign_allowed_group]) }
|
fab!(:user) { Fabricate(:user, groups: [assign_allowed_group]) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
SiteSetting.remind_assigns_frequency = RemindAssignsFrequencySiteSettings::MONTHLY_MINUTES
|
SiteSetting.remind_assigns_frequency = RemindAssignsFrequencySiteSettings::MONTHLY_MINUTES
|
||||||
SiteSetting.assign_enabled = true
|
SiteSetting.assign_enabled = true
|
||||||
|
SiteSetting.assign_allowed_on_groups = "#{assign_allowed_group.id}"
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "#execute" do
|
describe "#execute" do
|
||||||
|
@ -47,6 +48,16 @@ RSpec.describe Jobs::EnqueueReminders do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "assignment frequency" do
|
describe "assignment frequency" do
|
||||||
|
it "enqueues a reminder if the user reminder frequency is 1 day and the last reminded at is almost 1 day" do
|
||||||
|
user.custom_fields[PendingAssignsReminder::REMINDERS_FREQUENCY] = RemindAssignsFrequencySiteSettings::DAILY_MINUTES
|
||||||
|
user.custom_fields[PendingAssignsReminder::REMINDED_AT] = 1.days.ago
|
||||||
|
user.save
|
||||||
|
|
||||||
|
assign_multiple_tasks_to(user, assigned_on: 1.day.ago - 1.minute)
|
||||||
|
|
||||||
|
assert_reminders_enqueued(1)
|
||||||
|
end
|
||||||
|
|
||||||
it "does not enqueue a reminder if it's too soon" do
|
it "does not enqueue a reminder if it's too soon" do
|
||||||
user.upsert_custom_fields(PendingAssignsReminder::REMINDED_AT => 1.days.ago)
|
user.upsert_custom_fields(PendingAssignsReminder::REMINDED_AT => 1.days.ago)
|
||||||
assign_multiple_tasks_to(user)
|
assign_multiple_tasks_to(user)
|
||||||
|
|
Loading…
Reference in New Issue