]> nos-oignons.net Git - gestion-adh.git/commitdiff
Fix send-membership-reminders broken logic
authorLunar <lunar@anargeek.net>
Sun, 9 Jun 2013 06:51:55 +0000 (08:51 +0200)
committerLunar <lunar@anargeek.net>
Sun, 9 Jun 2013 06:51:55 +0000 (08:51 +0200)
features/send-membership-reminders.feature
features/step_definitions/members.rb
lib/nos_oignons.rb

index cc8507b3a761d13458140d1a08afff53b6cd2504..88609e5b10cdff0ccbfe87b6f81588984095886b 100644 (file)
@@ -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é
 
index 6e84484178f47f3dec2e53071adbe6917f157da9..0dc8d5fd3aeab50f69ec3d0253bb8d036deb680c 100644 (file)
@@ -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)
index 2a5d4143464cc3c1e8b5919465f7dc30644999bf..4ecd3c4b7e23600c50d8b3c38c5adae4e48b5d56 100644 (file)
@@ -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