From 167c022752e162910ffaddc29e449412c3f83717 Mon Sep 17 00:00:00 2001 From: Lunar Date: Sun, 9 Jun 2013 08:51:55 +0200 Subject: [PATCH] Fix send-membership-reminders broken logic --- features/send-membership-reminders.feature | 6 ++++++ features/step_definitions/members.rb | 15 ++++++++++++++- lib/nos_oignons.rb | 12 +++++------- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/features/send-membership-reminders.feature b/features/send-membership-reminders.feature index cc8507b..88609e5 100644 --- a/features/send-membership-reminders.feature +++ b/features/send-membership-reminders.feature @@ -30,6 +30,11 @@ Fonctionnalité: prévenir les membres qu'il faut renouveller leur cotisation 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 @@ -44,6 +49,7 @@ Fonctionnalité: prévenir les membres qu'il faut renouveller leur cotisation 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é diff --git a/features/step_definitions/members.rb b/features/step_definitions/members.rb index 6e84484..0dc8d5f 100644 --- a/features/step_definitions/members.rb +++ b/features/step_definitions/members.rb @@ -40,7 +40,8 @@ Given /^une base avec (\w+) qui a adhéré le ([0-9-]+) et payé sa dernière co 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 @@ -50,12 +51,24 @@ Given /^une nouvelle adhésion de (\w+)$/ do |name| 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) diff --git a/lib/nos_oignons.rb b/lib/nos_oignons.rb index 2a5d414..4ecd3c4 100644 --- a/lib/nos_oignons.rb +++ b/lib/nos_oignons.rb @@ -35,14 +35,12 @@ module NosOignons 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 -- 2.39.2