Parameterize Member#regenerate_notifications

This commit is contained in:
Hugo Peixoto 2023-01-24 23:06:12 +00:00
parent b3bc4bc411
commit da34afc882
2 changed files with 13 additions and 7 deletions

View File

@ -48,7 +48,7 @@ class Member < ApplicationRecord
save! save!
end end
def regenerate_notifications def regenerate_notifications(from=Date.today)
notifications.where(status: 'scheduled').delete_all notifications.where(status: 'scheduled').delete_all
dates = notifications.pluck(:to_be_sent_on) dates = notifications.pluck(:to_be_sent_on)
@ -63,7 +63,7 @@ class Member < ApplicationRecord
{ to_be_sent_on: expires_on + 60.days, template: "expired_60d_ago" }, { to_be_sent_on: expires_on + 60.days, template: "expired_60d_ago" },
{ to_be_sent_on: expires_on + 90.days, template: "cancelled" }, { to_be_sent_on: expires_on + 90.days, template: "cancelled" },
].reject do |n| ].reject do |n|
n[:to_be_sent_on].past? || dates.include?(n[:to_be_sent_on]) n[:to_be_sent_on].before?(from) || dates.include?(n[:to_be_sent_on])
end.each do |n| end.each do |n|
notifications.create(n.merge(status: "scheduled")) notifications.create(n.merge(status: "scheduled"))
end end

View File

@ -13,32 +13,32 @@ class MemberTest < ActiveSupport::TestCase
test "no expired in the first year and 90 days" do test "no expired in the first year and 90 days" do
(1.year + 90.days).in_days.to_i.times do |n| (1.year + 90.days).in_days.to_i.times do |n|
Timecop.freeze(Date.today + n.days) do Timecop.freeze(Date.today + n.days) do
assert_not_equal @member.expected_status, :cancelled assert_not_equal :cancelled, @member.expected_status
end end
end end
end end
test "expired after 1 year and 90 days" do test "expired after 1 year and 90 days" do
Timecop.freeze(Date.today + 1.year + 90.days) do Timecop.freeze(Date.today + 1.year + 90.days) do
assert_equal @member.expected_status, :cancelled assert_equal :cancelled, @member.expected_status
end end
end end
test "regenerate notifications creates all 6 notifications" do test "regenerate notifications creates all 6 notifications" do
@member.regenerate_notifications @member.regenerate_notifications
assert_equal @member.notifications.count, 6 assert_equal 6, @member.notifications.count
end end
test "regenerate_notifications does not create notifications in the past" do test "regenerate_notifications does not create notifications in the past" do
Timecop.freeze(Date.today + 1.year) do Timecop.freeze(Date.today + 1.year) do
@member.regenerate_notifications @member.regenerate_notifications
assert_equal @member.notifications.count, 4 assert_equal 4, @member.notifications.count
end end
Timecop.freeze(Date.today + 2.year) do Timecop.freeze(Date.today + 2.year) do
@member.regenerate_notifications @member.regenerate_notifications
assert_equal @member.notifications.count, 0 assert_equal 0, @member.notifications.count
end end
end end
@ -52,4 +52,10 @@ class MemberTest < ActiveSupport::TestCase
assert_equal 1, @member.notifications.where(status: 'sent').count assert_equal 1, @member.notifications.where(status: 'sent').count
assert_equal 5, @member.notifications.where(status: 'scheduled').count assert_equal 5, @member.notifications.where(status: 'scheduled').count
end end
test "regenerate_notifications when given a date generates only notifications after that date" do
@member.regenerate_notifications(Date.today + 1.year)
assert_equal 4, @member.notifications.count
end
end end