Lorsque j'exécute send-membership-reminders
Alors aucun email ne doit avoir été envoyé
+ Scénario: Pas de messages pour une adhésion récente
+ Soit une nouvelle adhésion de Jane qui a payé sa cotisation il y a 2 jours
+ Lorsque j'exécute send-membership-reminders
+ Alors aucun email ne doit avoir été envoyé
+
Scénario: Un seul envoi par membre
Soit une base avec Jane qui doit renouveller sa cotisation d'ici 30 jours
Lorsque j'exécute send-membership-reminders
Scénario: Premier rappel
Soit une base avec Jane qui doit renouveller sa cotisation d'ici 10 jours
+ Et qui a déjà reçu un appel 20 jours plus tôt
Lorsque j'exécute send-membership-reminders
Alors un premier rappel pour la cotisation doit avoir été envoyé
end
Given /^(?:une base )?avec (\w+) qui doit renouveller sa cotisation d'ici (\d+) jours$/ do |name, days_before_anniversary|
- paid_on = Time.now.to_date - days_before_anniversary.to_i
+ now = Time.now
+ paid_on = Time.new(now.year - 1, now.month, now.day).to_date + days_before_anniversary.to_i
joined_on = paid_on
create_new_member(name, joined_on, paid_on)
end
create_new_member(name, joined_on, joined_on)
end
+Given /^une nouvelle adhésion de (\w+) qui a payé sa cotisation il y a (\d+) jours$/ do |name, days|
+ joined_on = (Time.now.to_date - days.to_i).strftime('%Y-%m-%d')
+ create_new_member(name, joined_on, joined_on)
+end
+
+
Given /^elle avait déjà reçu des appels l'année précédente$/ do
Timecop.travel(Time.now.to_date - 375) do
NosOignons::ReminderDb.instance.record(OpenStruct.new(@last_member))
end
end
+Given /^qui a déjà reçu un appel (\d+) jours plus tôt$/ do |days_ago|
+ Timecop.travel(Time.now.to_date - days_ago.to_i) do
+ NosOignons::ReminderDb.instance.record(OpenStruct.new(@last_member))
+ end
+end
+
When /^j'ajoute une fiche correcte pour une nouvelle adhésion$/ do
@file = member_filename_for_id(new_id)
write_file @file, render_member_file(EXTRA_MEMBER)
def send_membership_reminders!
today = Time.now.to_date
NosOignons::Member.all.select(&:up_to_date?).each do |member|
+ anniversary = Time.new(today.year, member.joined_on.month,
+ member.joined_on.day).to_date
+ next if member.membership_fee_paid_on >= anniversary
+ next if member.reminded_on && member.reminded_on >= today
NosOignons::Reminder.all.sort_by(&:days).reverse.each do |reminder|
- anniversary = Time.new(today.year, member.joined_on.month,
- member.joined_on.day).to_date
-
- next if member.membership_fee_paid_on > anniversary
- next if member.membership_fee_paid_on > today - reminder.days
- next if anniversary > today - reminder.days
- next if member.reminded_on && member.reminded_on >= today
+ next if anniversary < today + reminder.days
member.remind(reminder)
break