From: Lunar <lunar@anargeek.net>
Date: Fri, 18 Jun 2021 15:03:33 +0000 (+0200)
Subject: Correction sur les rappels pour les adhésions de janvier
X-Git-Url: https://www.nos-oignons.net/gitweb/gestion-adh.git/commitdiff_plain/dbc09190540223245b4e75fc3c7ea2d0690a1a5b

Correction sur les rappels pour les adhésions de janvier
---

diff --git a/features/send-membership-reminders.feature b/features/send-membership-reminders.feature
index 89dfbd4..9526dd1 100644
--- a/features/send-membership-reminders.feature
+++ b/features/send-membership-reminders.feature
@@ -85,6 +85,29 @@ Fonctionnalité: prévenir les membres qu'il faut renouveler leur cotisation
     Lorsque j'exécute send-membership-reminders
     Alors un dernier rappel pour la cotisation doit avoir été envoyé
 
+  Scénario: Appel un mois avant si l’anniversaire est en décembre
+    Soit une base avec Fred qui a adhérée le 2017-12-05 et payé sa dernière cotisation le 2018-12-05
+    Lorsque j'exécute send-membership-reminders le 2019-11-05
+    Alors 1 email doit avoir été envoyé
+
+  Scénario: Appel 30 jours avant si l’anniversaire est en janvier
+    Soit une base avec Bruno qui a adhéré le 2018-01-05 et payé sa dernière cotisation le 2019-01-05
+    Lorsque j'exécute send-membership-reminders le 2019-12-06
+    Alors 1 email doit avoir été envoyé
+
+  Scénario: Premier rappel 10 jours avant si l’anniversaire est en janvier
+    Soit une base avec Bruno qui a adhéré le 2018-01-05 et payé sa dernière cotisation le 2019-01-05
+    Et qui a déjà reçu un appel le 2019-12-06
+    Lorsque j'exécute send-membership-reminders le 2019-12-26
+    Alors 1 email doit avoir été envoyé
+
+  Scénario: Deuxième rappel 2 jours avant si l’anniversaire est au 1er janvier
+    Soit une base avec Bruno qui a adhéré le 2018-01-01 et payé sa dernière cotisation le 2019-01-01
+    Et qui a déjà reçu un appel le 2019-12-02
+    Et qui a déjà reçu un appel le 2019-12-22
+    Lorsque j'exécute send-membership-reminders le 2019-12-30
+    Alors 1 email doit avoir été envoyé
+
   Scénario: Plusieurs messages
     Soit une base avec Pierre, à jour de cotisation
     Et avec Jane qui doit renouveler sa cotisation d'ici 10 jours
diff --git a/features/step_definitions/members.rb b/features/step_definitions/members.rb
index d3d9b7c..67d31c5 100644
--- a/features/step_definitions/members.rb
+++ b/features/step_definitions/members.rb
@@ -59,7 +59,7 @@ Given /^(?:une base )?avec (\w+)(, à jour de cotisation| qui n'a pas payé sa c
   create_new_member(name, joined_on, paid_on)
 end
 
-Given /^une base avec (\w+) qui a adhéré le ([0-9-]+) et payé sa dernière cotisation le ([0-9-]+)$/ do |name, joined_on, paid_on|
+Given /^une base avec (\w+) qui a adhérée? le ([0-9-]+) et payé sa dernière cotisation le ([0-9-]+)$/ do |name, joined_on, paid_on|
   create_new_member(name, joined_on, paid_on)
 end
 
@@ -118,6 +118,12 @@ Given /^qui a déjà reçu un appel (\d+) jours plus tôt$/ do |days_ago|
   end
 end
 
+Given /^qui a déjà reçu un appel le ([0-9-]+)$/ do |date|
+  Timecop.travel(Time.parse(date)) 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)
   File.write @file, render_member_file(EXTRA_MEMBER)
diff --git a/lib/nos_oignons.rb b/lib/nos_oignons.rb
index 72cea22..e753078 100644
--- a/lib/nos_oignons.rb
+++ b/lib/nos_oignons.rb
@@ -70,10 +70,10 @@ module NosOignons
 
     def send_membership_reminders!
       today = Time.now.to_date
+      reminders = NosOignons::Reminder.all.sort_by(&:days)
       NosOignons::Member.all.select(&:up_to_date?).each do |member|
-        next if member.membership_fee_paid_on.year == today.year
-        reminders = NosOignons::Reminder.all.sort_by(&:days)
-        anniversary = Time.new(today.year, member.joined_on.month,
+        next if member.membership_fee_paid_on.year == (today + reminders.last.days).year
+        anniversary = Time.new(today.next_month.year, member.joined_on.month,
                                member.joined_on.day).to_date
         next if member.membership_fee_paid_on >= anniversary - reminders.last.days
         reminders.each do |reminder|