Parameterize Member#regenerate_notifications
This commit is contained in:
parent
b3bc4bc411
commit
da34afc882
@ -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
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user