From e4b0aba5a0fdd8560c3d1c5c7a720f86f2e17e01 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Fri, 24 May 2019 15:13:17 +1000 Subject: [PATCH] Working on tests for recurring invoice cron --- .../InvoiceToRecurringInvoiceFactory.php | 61 ++++++++++++++++++ app/Factory/RecurringInvoiceFactory.php | 1 + .../2014_10_13_000000_create_users_table.php | 1 + tests/Feature/RecurringInvoicesCronTest.php | 49 ++++++++++++++ tests/MockAccountData.php | 64 ++++++++++++++++++- 5 files changed, 175 insertions(+), 1 deletion(-) create mode 100644 app/Factory/InvoiceToRecurringInvoiceFactory.php create mode 100644 tests/Feature/RecurringInvoicesCronTest.php diff --git a/app/Factory/InvoiceToRecurringInvoiceFactory.php b/app/Factory/InvoiceToRecurringInvoiceFactory.php new file mode 100644 index 000000000000..ca749ec43d9f --- /dev/null +++ b/app/Factory/InvoiceToRecurringInvoiceFactory.php @@ -0,0 +1,61 @@ +status_id = RecurringInvoice::STATUS_DRAFT; + $recurring_invoice->discount = $invoice->discount; + $recurring_invoice->invoice_number = ''; + $recurring_invoice->is_amount_discount = $recurringinvoice->is_amount_discount; + $recurring_invoice->po_number = $recurringinvoice->po_number; + $recurring_invoice->footer = $recurringinvoice->footer; + $recurring_invoice->terms = $recurringinvoice->terms; + $recurring_invoice->public_notes = $recurringinvoice->public_notes; + $recurring_invoice->private_notes = $recurringinvoice->private_notes; + $recurring_invoice->invoice_date = date_create()->format('Y-m-d'); + $recurring_invoice->due_date = $recurringinvoice->due_date; //todo calculate based on terms + $recurring_invoice->is_deleted = $recurringinvoice->is_deleted; + $recurring_invoice->line_items = $recurringinvoice->line_items; + $recurring_invoice->settings = $recurringinvoice->settings; + $recurring_invoice->tax_name1 = $recurringinvoice->tax_name1; + $recurring_invoice->tax_rate1 = $recurringinvoice->tax_rate1; + $recurring_invoice->tax_name2 = $recurringinvoice->tax_name2; + $recurring_invoice->tax_rate2 = $recurringinvoice->tax_rate2; + $recurring_invoice->custom_value1 = $recurringinvoice->custom_value1; + $recurring_invoice->custom_value2 = $recurringinvoice->custom_value2; + $recurring_invoice->custom_value3 = $recurringinvoice->custom_value3; + $recurring_invoice->custom_value4 = $recurringinvoice->custom_value4; + $recurring_invoice->amount = $recurringinvoice->amount; + $recurring_invoice->balance = $recurringinvoice->balance; + $recurring_invoice->user_id = $recurringinvoice->user_id; + $recurring_invoice->company_id = $recurringinvoice->company_id; + $recurring_invoice->frequency_id = RecurringInvoice::FREQUENCY_MONTHLY; + $recurring_invoice->start_date = null; + $recurring_invoice->last_sent_date = null; + $recurring_invoice->next_send_date = null; + $recurring_invoice->remaining_cycles = 0; + + return $recurring_invoice; + } + +} diff --git a/app/Factory/RecurringInvoiceFactory.php b/app/Factory/RecurringInvoiceFactory.php index 7974aa1aae3a..f66205f7c614 100644 --- a/app/Factory/RecurringInvoiceFactory.php +++ b/app/Factory/RecurringInvoiceFactory.php @@ -24,6 +24,7 @@ class RecurringInvoiceFactory $invoice->discount = 0; $invoice->is_amount_discount = true; $invoice->po_number = ''; + $invoice->invoice_number = ''; $invoice->footer = ''; $invoice->terms = ''; $invoice->public_notes = ''; diff --git a/database/migrations/2014_10_13_000000_create_users_table.php b/database/migrations/2014_10_13_000000_create_users_table.php index 7086de6bf125..20e900a19526 100644 --- a/database/migrations/2014_10_13_000000_create_users_table.php +++ b/database/migrations/2014_10_13_000000_create_users_table.php @@ -422,6 +422,7 @@ class CreateUsersTable extends Migration $t->unsignedInteger('company_id')->index(); $t->unsignedInteger('status_id')->index(); + $t->text('invoice_number')->nullable(); $t->float('discount'); $t->boolean('is_amount_discount'); diff --git a/tests/Feature/RecurringInvoicesCronTest.php b/tests/Feature/RecurringInvoicesCronTest.php new file mode 100644 index 000000000000..c611d1416351 --- /dev/null +++ b/tests/Feature/RecurringInvoicesCronTest.php @@ -0,0 +1,49 @@ +makeTestData(); + + + } + + public function testCountCorrectNumberOfRecurringInvoicesDue() + { + //spin up 5 valid and 1 invalid recurring invoices + + + } + +} diff --git a/tests/MockAccountData.php b/tests/MockAccountData.php index c533ace569e4..6d03a20b8b19 100644 --- a/tests/MockAccountData.php +++ b/tests/MockAccountData.php @@ -14,6 +14,7 @@ namespace Tests; use App\Factory\ClientFactory; use App\Factory\InvoiceFactory; use App\Factory\InvoiceItemFactory; +use App\Factory\InvoiceToRecurringInvoiceFactory; use App\Helpers\Invoice\InvoiceCalc; use App\Jobs\Company\UpdateCompanyLedgerWithInvoice; use App\Models\Client; @@ -21,6 +22,7 @@ use App\Models\Credit; use App\Models\Invoice; use App\Models\Quote; use App\Models\RecurringInvoice; +use App\Utils\Traits\GeneratesNumberCounter; use App\Utils\Traits\MakesHash; use Illuminate\Support\Carbon; use Illuminate\Support\Facades\Log; @@ -33,7 +35,7 @@ trait MockAccountData { use MakesHash; - + use GeneratesNumberCounter; public $account; public $company; @@ -85,6 +87,66 @@ trait MockAccountData UpdateCompanyLedgerWithInvoice::dispatchNow($this->invoice, $this->invoice->amount); + + $recurring_invoice = InvoiceToRecurringInvoiceFactory::create($this->invoice); + $recurring_invoice->next_send_date = Carbon::now(); + $recurring_invoice->status_id = RecurringInvoice::STATUS_ACTIVE; + $recurring_invoice->remaining_cycles = 2; + $recurring_invoice->start_date = Carbon::now(); + $recurring_invoice->save(); + + $recurring_invoice->invoice_number = $this->getNextNumber(); + $recurring_invoice->save() + + $recurring_invoice = InvoiceToRecurringInvoiceFactory::create($this->invoice); + $recurring_invoice->next_send_date = Carbon::now()->addMinutes(2); + $recurring_invoice->status_id = RecurringInvoice::STATUS_ACTIVE; + $recurring_invoice->remaining_cycles = 2; + $recurring_invoice->start_date = Carbon::now(); + $recurring_invoice->save(); + + $recurring_invoice->invoice_number = $this->getNextNumber(); + $recurring_invoice->save() + + $recurring_invoice = InvoiceToRecurringInvoiceFactory::create($this->invoice); + $recurring_invoice->next_send_date = Carbon::now()->addMinutes(10); + $recurring_invoice->status_id = RecurringInvoice::STATUS_ACTIVE; + $recurring_invoice->remaining_cycles = 2; + $recurring_invoice->start_date = Carbon::now(); + $recurring_invoice->save(); + + $recurring_invoice->invoice_number = $this->getNextNumber(); + $recurring_invoice->save() + + $recurring_invoice = InvoiceToRecurringInvoiceFactory::create($this->invoice); + $recurring_invoice->next_send_date = Carbon::now()->addMinutes(15); + $recurring_invoice->status_id = RecurringInvoice::STATUS_ACTIVE; + $recurring_invoice->remaining_cycles = 2; + $recurring_invoice->start_date = Carbon::now(); + $recurring_invoice->save(); + + $recurring_invoice->invoice_number = $this->getNextNumber(); + $recurring_invoice->save() + + $recurring_invoice = InvoiceToRecurringInvoiceFactory::create($this->invoice); + $recurring_invoice->next_send_date = Carbon::now()->addMinutes(20); + $recurring_invoice->status_id = RecurringInvoice::STATUS_ACTIVE; + $recurring_invoice->remaining_cycles = 2; + $recurring_invoice->start_date = Carbon::now(); + $recurring_invoice->save(); + + $recurring_invoice->invoice_number = $this->getNextNumber(); + $recurring_invoice->save() + + $recurring_invoice = InvoiceToRecurringInvoiceFactory::create($this->invoice); + $recurring_invoice->next_send_date = Carbon::now()->addDays(10); + $recurring_invoice->status_id = RecurringInvoice::STATUS_ACTIVE; + $recurring_invoice->remaining_cycles = 2; + $recurring_invoice->start_date = Carbon::now(); + $recurring_invoice->save(); + + $recurring_invoice->invoice_number = $this->getNextNumber(); + $recurring_invoice->save() }