From f42de7f949d17ad6179d7dd628256112dd0599cd Mon Sep 17 00:00:00 2001 From: David Bomba Date: Wed, 26 May 2021 09:43:23 +1000 Subject: [PATCH] Tests for reminders --- app/Utils/Traits/MakesReminders.php | 54 +++++++++++++++++++---------- tests/Feature/ReminderTest.php | 47 +++++++++++++++++++++---- 2 files changed, 77 insertions(+), 24 deletions(-) diff --git a/app/Utils/Traits/MakesReminders.php b/app/Utils/Traits/MakesReminders.php index aca4e99ea1..b650de23b4 100644 --- a/app/Utils/Traits/MakesReminders.php +++ b/app/Utils/Traits/MakesReminders.php @@ -34,76 +34,94 @@ trait MakesReminders $date_collection = collect(); - if ($settings->schedule_reminder1 == 'after_invoice_date' && + if (is_null($this->reminder1_sent) && + $settings->schedule_reminder1 == 'after_invoice_date' && $settings->num_days_reminder1 > 0) { $reminder_date = Carbon::parse($this->date)->addDays($settings->num_days_reminder1); + nlog("reminder 1 = after invoice date = {$reminder_date}"); if ($reminder_date->gt(Carbon::parse($this->next_send_date))); - $date_collection->push($reminder_date->format('Y-m-d')); + $date_collection->push($reminder_date->format('Y-m-d')); nlog('after_invoice_date pushed to collection'); } - if ($settings->schedule_reminder1 == 'before_due_date' && + if (is_null($this->reminder1_sent) && + $settings->schedule_reminder1 == 'before_due_date' && $settings->num_days_reminder1 > 0) { $reminder_date = Carbon::parse($this->due_date)->subDays($settings->num_days_reminder1); + nlog("reminder 1 = before_due_date = {$reminder_date}"); if ($reminder_date->gt(Carbon::parse($this->next_send_date))); - $date_collection->push($reminder_date->format('Y-m-d')); + $date_collection->push($reminder_date->format('Y-m-d')); nlog('before_due_date pushed to collection'); } - if ($settings->schedule_reminder1 == 'after_due_date' && + if (is_null($this->reminder1_sent) && + $settings->schedule_reminder1 == 'after_due_date' && $settings->num_days_reminder1 > 0) { $reminder_date = Carbon::parse($this->due_date)->addDays($settings->num_days_reminder1); + nlog("reminder 1 = after_due_date = {$reminder_date}"); if ($reminder_date->gt(Carbon::parse($this->next_send_date))); - $date_collection->push($reminder_date->format('Y-m-d')); + $date_collection->push($reminder_date->format('Y-m-d')); nlog('after_due_date pushed to collection'); } - if ($settings->schedule_reminder2 == 'after_invoice_date' && + if (is_null($this->reminder2_sent) && + $settings->schedule_reminder2 == 'after_invoice_date' && $settings->num_days_reminder2 > 0) { $reminder_date = Carbon::parse($this->date)->addDays($settings->num_days_reminder2); + nlog("reminder 2 = after_invoice_date = {$reminder_date}"); if ($reminder_date->gt(Carbon::parse($this->next_send_date))); - $date_collection->push($reminder_date->format('Y-m-d')); + $date_collection->push($reminder_date->format('Y-m-d')); nlog('after_invoice_date pushed to collection'); } - if ($settings->schedule_reminder2 == 'before_due_date' && + if (is_null($this->reminder2_sent) && + $settings->schedule_reminder2 == 'before_due_date' && $settings->num_days_reminder2 > 0) { $reminder_date = Carbon::parse($this->due_date)->subDays($settings->num_days_reminder2); + nlog("reminder 2 = before_due_date = {$reminder_date}"); if ($reminder_date->gt(Carbon::parse($this->next_send_date))); - $date_collection->push($reminder_date->format('Y-m-d')); + $date_collection->push($reminder_date->format('Y-m-d')); nlog('before_due_date pushed to collection'); } - if ($settings->schedule_reminder2 == 'after_due_date' && + if (is_null($this->reminder2_sent) && + $settings->schedule_reminder2 == 'after_due_date' && $settings->num_days_reminder2 > 0) { $reminder_date = Carbon::parse($this->due_date)->addDays($settings->num_days_reminder2); + nlog("reminder 2 = after_due_date = {$reminder_date}"); if ($reminder_date->gt(Carbon::parse($this->next_send_date))); - $date_collection->push($reminder_date->format('Y-m-d')); + $date_collection->push($reminder_date->format('Y-m-d')); nlog('after_due_date pushed to collection'); } - if ($settings->schedule_reminder3 == 'after_invoice_date' && + if (is_null($this->reminder3_sent) && + $settings->schedule_reminder3 == 'after_invoice_date' && $settings->num_days_reminder3 > 0) { $reminder_date = Carbon::parse($this->date)->addDays($settings->num_days_reminder3); + nlog("reminder 3 = after_invoice_date = {$reminder_date}"); if ($reminder_date->gt(Carbon::parse($this->next_send_date))); - $date_collection->push($reminder_date->format('Y-m-d')); + $date_collection->push($reminder_date->format('Y-m-d')); nlog('after_invoice_date pushed to collection'); } - if ($settings->schedule_reminder3 == 'before_due_date' && + if (is_null($this->reminder3_sent) && + $settings->schedule_reminder3 == 'before_due_date' && $settings->num_days_reminder3 > 0) { $reminder_date = Carbon::parse($this->due_date)->subDays($settings->num_days_reminder3); + nlog("reminder 3 = before_due_date = {$reminder_date}"); if ($reminder_date->gt(Carbon::parse($this->next_send_date))); - $date_collection->push($reminder_date->format('Y-m-d')); + $date_collection->push($reminder_date->format('Y-m-d')); nlog('before_due_date pushed to collection'); } - if ($settings->schedule_reminder3 == 'after_due_date' && + if (is_null($this->reminder3_sent) && + $settings->schedule_reminder3 == 'after_due_date' && $settings->num_days_reminder3 > 0) { $reminder_date = Carbon::parse($this->due_date)->addDays($settings->num_days_reminder3); + nlog("reminder 3 = after_due_date = {$reminder_date}"); if ($reminder_date->gt(Carbon::parse($this->next_send_date))); - $date_collection->push($reminder_date->format('Y-m-d')); + $date_collection->push($reminder_date->format('Y-m-d')); nlog('after_due_date pushed to collection'); } $this->next_send_date = $date_collection->sort()->first(); diff --git a/tests/Feature/ReminderTest.php b/tests/Feature/ReminderTest.php index 13e161c2c3..8ed4c6bea5 100644 --- a/tests/Feature/ReminderTest.php +++ b/tests/Feature/ReminderTest.php @@ -85,24 +85,59 @@ class ReminderTest extends TestCase public function testReminderNextSendRecalculation() { - $this->invoice->date = now()->subDays(1)->format('Y-m-d'); + $this->invoice->date = now()->subDays(2)->format('Y-m-d'); $this->invoice->due_date = Carbon::now()->addDays(30)->format('Y-m-d'); - $this->invoice->reminder1_sent = now()->format('Y-m-d'); + $this->invoice->reminder1_sent = now()->subDays(1)->format('Y-m-d'); $settings = $this->company->settings; $settings->enable_reminder1 = true; $settings->schedule_reminder1 = 'after_invoice_date'; $settings->num_days_reminder1 = 1; $settings->enable_reminder2 = true; - $settings->schedule_reminder2 = 'before_due_date'; - $settings->num_days_reminder2 = 1; + $settings->schedule_reminder2 = 'after_invoice_date'; + $settings->num_days_reminder2 = 2; $settings->enable_reminder3 = true; - $settings->schedule_reminder3 = 'after_due_date'; - $settings->num_days_reminder3 = 1; + $settings->schedule_reminder3 = 'after_invoice_date'; + $settings->num_days_reminder3 = 3; $this->company->settings = $settings; $this->invoice->service()->markSent(); $this->invoice->setReminder($settings); + + $this->invoice->fresh(); + + $this->assertEquals($this->invoice->next_send_date, now()->format('Y-m-d')); } + + + public function testReminder3NextSendRecalculation() + { + + $this->invoice->date = now()->subDays(3)->format('Y-m-d'); + $this->invoice->due_date = Carbon::now()->addDays(30)->format('Y-m-d'); + $this->invoice->reminder1_sent = now()->subDays(2)->format('Y-m-d'); + $this->invoice->reminder2_sent = now()->subDays(1)->format('Y-m-d'); + + $settings = $this->company->settings; + $settings->enable_reminder1 = true; + $settings->schedule_reminder1 = 'after_invoice_date'; + $settings->num_days_reminder1 = 1; + $settings->enable_reminder2 = true; + $settings->schedule_reminder2 = 'after_invoice_date'; + $settings->num_days_reminder2 = 2; + $settings->enable_reminder3 = true; + $settings->schedule_reminder3 = 'after_invoice_date'; + $settings->num_days_reminder3 = 3; + + $this->company->settings = $settings; + $this->invoice->service()->markSent(); + $this->invoice->setReminder($settings); + + $this->invoice->fresh(); + + $this->assertEquals($this->invoice->next_send_date, now()->format('Y-m-d')); + + } + }