Parameterize Member#regenerate_notifications

main
Hugo Peixoto 8 months ago
parent b3bc4bc411
commit da34afc882
  1. 4
      app/models/member.rb
  2. 16
      test/models/member_test.rb

@ -48,7 +48,7 @@ class Member < ApplicationRecord
save!
end
def regenerate_notifications
def regenerate_notifications(from=Date.today)
notifications.where(status: 'scheduled').delete_all
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 + 90.days, template: "cancelled" },
].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|
notifications.create(n.merge(status: "scheduled"))
end

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

Loading…
Cancel
Save