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
 
   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
 
   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)
 
 
     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|