From 591b007c1ce32e1d92ea9a177d02058fa992a434 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Mon, 5 Dec 2022 10:07:34 +1100 Subject: [PATCH] Tests for linking payments with expenses --- app/Jobs/Bank/MatchBankTransactions.php | 3 + tests/Feature/Bank/BankTransactionTest.php | 67 ++++++++++++++++++++++ 2 files changed, 70 insertions(+) diff --git a/app/Jobs/Bank/MatchBankTransactions.php b/app/Jobs/Bank/MatchBankTransactions.php index 2643c4b9fb2c..183f18ad7245 100644 --- a/app/Jobs/Bank/MatchBankTransactions.php +++ b/app/Jobs/Bank/MatchBankTransactions.php @@ -178,6 +178,8 @@ class MatchBankTransactions implements ShouldQueue $this->bt->expense_id = $expense->id; $this->bt->status_id = BankTransaction::STATUS_CONVERTED; + $this->bt->vendor_id = $expense->vendor_id; + $this->bt->ninja_category_id = $expense->category_id; $this->bt->save(); } @@ -201,6 +203,7 @@ class MatchBankTransactions implements ShouldQueue $this->bt->payment_id = $payment->id; $this->bt->status_id = BankTransaction::STATUS_CONVERTED; + $this->bt->invoice_ids = collect($payment->invoices)->pluck('hashed_id')->implode(','); $this->bt->save(); } diff --git a/tests/Feature/Bank/BankTransactionTest.php b/tests/Feature/Bank/BankTransactionTest.php index c115faa4b97d..8f96ccda2dd7 100644 --- a/tests/Feature/Bank/BankTransactionTest.php +++ b/tests/Feature/Bank/BankTransactionTest.php @@ -14,6 +14,8 @@ namespace Tests\Feature\Bank; use App\Factory\BankIntegrationFactory; use App\Factory\BankTransactionFactory; +use App\Factory\InvoiceFactory; +use App\Factory\InvoiceItemFactory; use App\Models\BankTransaction; use App\Models\Invoice; use Illuminate\Foundation\Testing\DatabaseTransactions; @@ -57,6 +59,9 @@ class BankTransactionTest extends TestCase $bt->base_type = 'DEBIT'; $bt->save(); + $this->expense->vendor_id = $this->vendor->id; + $this->expense->save(); + $data = []; $data['transactions'][] = [ @@ -73,10 +78,72 @@ class BankTransactionTest extends TestCase $this->assertEquals($this->expense->refresh()->transaction_id, $bt->id); $this->assertEquals($bt->refresh()->expense_id, $this->expense->id); + $this->assertEquals($this->vendor->id, $bt->vendor_id); $this->assertEquals(BankTransaction::STATUS_CONVERTED, $bt->status_id); } + public function testLinkingManuallyPaidInvoices() + { + + $invoice = InvoiceFactory::create($this->company->id, $this->user->id); + $invoice->client_id = $this->client->id; + $invoice->status_id = Invoice::STATUS_SENT; + $invoice->number = "InvoiceMatchingNumber123"; + $line_items = []; + + $item = InvoiceItemFactory::create(); + $item->quantity = 1; + $item->cost = 325; + $item->type_id = 1; + + $line_items[] = $item; + + $invoice->line_items = $line_items; + + $invoice = $invoice->calc()->getInvoice(); + + $invoice->service()->markPaid(); + + $p = $invoice->payments->first(); + + + $bi = BankIntegrationFactory::create($this->company->id, $this->user->id, $this->account->id); + $bi->save(); + + $bt = BankTransactionFactory::create($this->company->id, $this->user->id); + $bt->bank_integration_id = $bi->id; + $bt->status_id = BankTransaction::STATUS_UNMATCHED; + $bt->description = 'InvoiceMatchingNumber123'; + $bt->amount = 325; + $bt->currency_code = $this->client->currency()->code; + $bt->date = now()->format('Y-m-d'); + $bt->transaction_id = 1234567890; + $bt->category_id = 10000003; + $bt->base_type = 'CREDIT'; + $bt->save(); + + $data = []; + + $data['transactions'][] = [ + 'id' => $bt->hashed_id, + 'payment_id' => $p->hashed_id + ]; + + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token, + ])->postJson('/api/v1/bank_transactions/match', $data); + + $response->assertStatus(200); + + $this->assertEquals($p->refresh()->transaction_id, $bt->id); + $this->assertEquals($bt->refresh()->payment_id, $p->id); + $this->assertEquals(BankTransaction::STATUS_CONVERTED, $bt->status_id); + $this->assertEquals($invoice->hashed_id, $bt->invoice_ids); + + } + public function testLinkPaymentToTransaction() {