From cba7e7b2bd5e63e5d34ccd25949c0b312e9cd413 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Fri, 15 Aug 2025 09:37:21 +1000 Subject: [PATCH] Fixes for tests --- app/Models/Client.php | 2 +- app/Providers/StaticServiceProvider.php | 1 + .../Export/ReportCsvGenerationTest.php | 20 ++++ tests/Feature/ProjectApiTest.php | 2 +- tests/MockAccountData.php | 107 +++++++++++------- tests/TestCase.php | 1 - tests/Unit/AutoBillInvoiceTest.php | 5 +- tests/Unit/Chart/ChartCurrencyTest.php | 47 ++++++-- tests/Unit/CompanyDocumentsTest.php | 2 +- tests/Unit/EInvoiceTest.php | 2 +- tests/Unit/EntityTest.php | 2 +- tests/Unit/FactoryCreationTest.php | 2 +- tests/Unit/GeneratesCounterTest.php | 2 +- tests/_bootstrap.php | 11 -- 14 files changed, 138 insertions(+), 68 deletions(-) diff --git a/app/Models/Client.php b/app/Models/Client.php index cc204188df..8ba23516f6 100644 --- a/app/Models/Client.php +++ b/app/Models/Client.php @@ -495,7 +495,7 @@ class Client extends BaseModel implements HasLocalePreference return $item->id == $currency_id; }); - }); + }) ?? \App\Models\Currency::find($this->getSetting('currency_id')); } diff --git a/app/Providers/StaticServiceProvider.php b/app/Providers/StaticServiceProvider.php index 07677af7d4..d82675fcaa 100644 --- a/app/Providers/StaticServiceProvider.php +++ b/app/Providers/StaticServiceProvider.php @@ -263,6 +263,7 @@ class StaticServiceProvider extends ServiceProvider }); + nlog("static service provider registered"); } public function boot() diff --git a/tests/Feature/Export/ReportCsvGenerationTest.php b/tests/Feature/Export/ReportCsvGenerationTest.php index 3c159d968f..b403498121 100644 --- a/tests/Feature/Export/ReportCsvGenerationTest.php +++ b/tests/Feature/Export/ReportCsvGenerationTest.php @@ -27,6 +27,7 @@ use App\Models\Credit; use App\Models\Expense; use App\Models\Invoice; use App\Models\User; +use App\Repositories\InvoiceRepository; use App\Utils\Traits\MakesHash; use Illuminate\Routing\Middleware\ThrottleRequests; use Illuminate\Support\Facades\Http; @@ -652,6 +653,9 @@ $this->account->forceDelete(); ]); + $repo = new InvoiceRepository(); + $invoice = $repo->save([], $invoice); + $log = '[[1689547165,1689550765,"sumtin",true]]'; \App\Models\Task::factory()->create([ @@ -912,6 +916,11 @@ $this->account->forceDelete(); $invoice->client->paid_to_date = 0; $invoice->push(); + +$repo = new InvoiceRepository(); +$invoice = $repo->save([], $invoice); + + $invoice->service()->markPaid()->save(); $data = [ @@ -1262,6 +1271,10 @@ $this->account->forceDelete(); 'terms' => 'Terms', ]); + $repo = new InvoiceRepository(); + $invoice = $repo->save([], $invoice); + + $data = [ 'date_range' => 'all', 'report_keys' => ["client.name","invoice.number","invoice.amount","payment.date", "payment.amount","invoice.user"], @@ -1452,6 +1465,9 @@ $this->account->forceDelete(); ] ]); +$repo = new InvoiceRepository(); +$invoice = $repo->save([], $invoice); + $data = [ 'date_range' => 'all', 'report_keys' => ["client.name","invoice.number","invoice.amount","payment.date", "payment.amount", "item.quantity", "item.cost", "item.line_total", "item.discount", "item.notes", "item.product_key", "item.custom_value1", "item.tax_name1", "item.tax_rate1",], @@ -1844,6 +1860,10 @@ $this->account->forceDelete(); 'terms' => 'Terms', ]); + $repo = new InvoiceRepository(); + $invoice = $repo->save([], $invoice); + + $invoice->service()->markPaid()->save(); $data = [ diff --git a/tests/Feature/ProjectApiTest.php b/tests/Feature/ProjectApiTest.php index d1c064b232..afda82037a 100644 --- a/tests/Feature/ProjectApiTest.php +++ b/tests/Feature/ProjectApiTest.php @@ -32,7 +32,7 @@ use Illuminate\Foundation\Testing\DatabaseTransactions; class ProjectApiTest extends TestCase { use MakesHash; - use DatabaseTransactions; + // use DatabaseTransactions; use MockAccountData; protected $faker; diff --git a/tests/MockAccountData.php b/tests/MockAccountData.php index 9099959d39..b2cf963e09 100644 --- a/tests/MockAccountData.php +++ b/tests/MockAccountData.php @@ -11,59 +11,62 @@ namespace Tests; -use App\DataMapper\ClientRegistrationFields; -use App\DataMapper\ClientSettings; -use App\DataMapper\CompanySettings; -use App\Factory\CompanyUserFactory; -use App\Factory\CreditFactory; -use App\Factory\InvoiceFactory; -use App\Factory\InvoiceInvitationFactory; -use App\Factory\InvoiceItemFactory; -use App\Factory\InvoiceToRecurringInvoiceFactory; -use App\Factory\PurchaseOrderFactory; -use App\Helpers\Invoice\InvoiceSum; -use App\Jobs\Company\CreateCompanyTaskStatuses; -use App\Models\Account; -use App\Models\BankIntegration; -use App\Models\BankTransaction; -use App\Models\BankTransactionRule; +use App\Models\Task; +use App\Models\User; +use App\Models\Quote; use App\Models\Client; -use App\Models\ClientContact; -use App\Models\Company; -use App\Models\CompanyGateway; -use App\Models\CompanyToken; -use App\Models\Country; use App\Models\Credit; -use App\Models\CreditInvitation; +use App\Models\Vendor; +use App\Models\Account; +use App\Models\Company; +use App\Models\Country; use App\Models\Expense; -use App\Models\ExpenseCategory; -use App\Models\GroupSetting; -use App\Models\InvoiceInvitation; use App\Models\Payment; use App\Models\Product; use App\Models\Project; -use App\Models\PurchaseOrderInvitation; -use App\Models\Quote; +use App\Models\TaxRate; +use App\Models\Currency; +use App\Models\Scheduler; +use App\Models\TaskStatus; +use App\Utils\TruthSource; +use App\Models\CompanyToken; +use App\Models\GroupSetting; +use App\Models\ClientContact; +use App\Models\VendorContact; +use App\Factory\CreditFactory; +use App\Models\CompanyGateway; +use App\Models\RecurringQuote; +use Illuminate\Support\Carbon; +use App\Factory\InvoiceFactory; +use App\Models\BankIntegration; +use App\Models\BankTransaction; +use App\Models\ExpenseCategory; use App\Models\QuoteInvitation; +use App\Utils\Traits\MakesHash; +use App\Models\CreditInvitation; use App\Models\RecurringExpense; use App\Models\RecurringInvoice; -use App\Models\RecurringQuote; -use App\Models\Scheduler; -use App\Models\Task; -use App\Models\TaskStatus; -use App\Models\TaxRate; -use App\Models\User; -use App\Models\Vendor; -use App\Models\VendorContact; -use App\Utils\Traits\GeneratesCounter; -use App\Utils\Traits\MakesHash; -use App\Utils\TruthSource; -use Illuminate\Support\Carbon; -use Illuminate\Support\Facades\Artisan; -use Illuminate\Support\Facades\Cache; +use App\Models\InvoiceInvitation; +use App\DataMapper\ClientSettings; +use App\DataMapper\CompanySettings; +use App\Factory\CompanyUserFactory; +use App\Factory\InvoiceItemFactory; +use App\Helpers\Invoice\InvoiceSum; +use App\Models\BankTransactionRule; use Illuminate\Support\Facades\Hash; +use App\Factory\PurchaseOrderFactory; +use Illuminate\Support\Facades\Cache; +use App\Utils\Traits\GeneratesCounter; use Illuminate\Support\Facades\Schema; +use App\Models\PurchaseOrderInvitation; +use App\Repositories\InvoiceRepository; +use Illuminate\Support\Facades\Artisan; use Illuminate\Support\Facades\Storage; +use App\Factory\InvoiceInvitationFactory; +use App\DataMapper\ClientRegistrationFields; +use App\Jobs\Company\CreateCompanyTaskStatuses; +use App\Repositories\RecurringInvoiceRepository; +use App\Factory\InvoiceToRecurringInvoiceFactory; /** * Class MockAccountData. @@ -208,6 +211,18 @@ trait MockAccountData Artisan::call('db:seed', ['--force' => true]); } + + app()->singleton('currencies', function ($app) { + + $resource = Currency::query()->orderBy('name')->get(); + + Cache::forever('currencies', $resource); + + return $resource; + + }); + + $this->faker = \Faker\Factory::create(); $fake_email = $this->faker->email(); @@ -309,9 +324,13 @@ trait MockAccountData 'company_id' => $this->company->id, ]); + // $client_settings = ClientSettings::defaults(); + // $client_settings->currency_id = '1'; + $this->client = Client::factory()->create([ 'user_id' => $user_id, 'company_id' => $this->company->id, + // 'settings' => $client_settings, ]); Storage::makeDirectory($this->company->company_key.'/'.$this->client->client_hash.'/invoices', 0755, true); @@ -439,6 +458,9 @@ trait MockAccountData 'uses_inclusive_taxes' => false, ]); + $repo = new RecurringInvoiceRepository(); + $this->recurring_invoice = $repo->save([], $this->recurring_invoice); + $this->recurring_invoice_calc = new InvoiceSum($this->recurring_invoice); $this->recurring_invoice_calc->build(); $this->recurring_invoice = $this->recurring_invoice_calc->getRecurringInvoice(); @@ -480,6 +502,9 @@ trait MockAccountData $this->invoice->fresh()->service()->markSent(); // $this->invoice->service()->markSent(); + $repo = new InvoiceRepository(); + $this->invoice = $repo->save([], $this->invoice); + $this->quote = Quote::factory()->create([ 'user_id' => $user_id, 'client_id' => $this->client->id, diff --git a/tests/TestCase.php b/tests/TestCase.php index a9c24851b4..b889dd12c8 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -14,7 +14,6 @@ abstract class TestCase extends BaseTestCase protected function setUp(): void { parent::setUp(); - } } diff --git a/tests/Unit/AutoBillInvoiceTest.php b/tests/Unit/AutoBillInvoiceTest.php index 77ed0b65de..96c27c88ce 100644 --- a/tests/Unit/AutoBillInvoiceTest.php +++ b/tests/Unit/AutoBillInvoiceTest.php @@ -14,6 +14,7 @@ namespace Tests\Unit; use Illuminate\Foundation\Testing\DatabaseTransactions; use Tests\MockAccountData; use Tests\TestCase; +use Illuminate\Support\Facades\Artisan; /** * @@ -21,7 +22,7 @@ use Tests\TestCase; */ class AutoBillInvoiceTest extends TestCase { - use DatabaseTransactions; + // use DatabaseTransactions; use MockAccountData; protected function setUp(): void @@ -29,10 +30,12 @@ class AutoBillInvoiceTest extends TestCase parent::setUp(); $this->makeTestData(); + } public function testAutoBillFunctionality() { + $this->assertEquals('1', $this->client->settings->currency_id); $this->assertEquals($this->client->balance, 10); $this->assertEquals($this->client->paid_to_date, 0); $this->assertEquals($this->client->credit_balance, 10); diff --git a/tests/Unit/Chart/ChartCurrencyTest.php b/tests/Unit/Chart/ChartCurrencyTest.php index e50db739e3..359b790ce7 100644 --- a/tests/Unit/Chart/ChartCurrencyTest.php +++ b/tests/Unit/Chart/ChartCurrencyTest.php @@ -14,13 +14,14 @@ namespace Tests\Unit\Chart; use Tests\TestCase; use App\Models\Client; use App\Models\Company; +use App\Models\Expense; use App\Models\Invoice; use App\Models\Currency; use Tests\MockAccountData; use App\DataMapper\ClientSettings; use App\DataMapper\CompanySettings; -use App\Models\Expense; use App\Services\Chart\ChartService; +use App\Repositories\InvoiceRepository; use Illuminate\Foundation\Testing\DatabaseTransactions; /** @@ -30,7 +31,7 @@ use Illuminate\Foundation\Testing\DatabaseTransactions; class ChartCurrencyTest extends TestCase { use MockAccountData; - use DatabaseTransactions; + // use DatabaseTransactions; protected function setUp(): void { @@ -72,6 +73,8 @@ class ChartCurrencyTest extends TestCase 'user_id' => $this->user->id, 'company_id' => $company->id, 'settings' => $settings, + 'balance' => 0, + 'paid_to_date' => 0, ]); Currency::query()->where('id', 1)->update(['exchange_rate' => 1]); @@ -84,9 +87,10 @@ class ChartCurrencyTest extends TestCase 'user_id' => $this->user->id, 'company_id' => $company->id, 'settings' => $settings, + 'balance' => 0, + 'paid_to_date' => 0, ]); - $i1 = Invoice::factory()->create([ 'client_id' => $usd->id, 'user_id' => $this->user->id, @@ -96,7 +100,18 @@ class ChartCurrencyTest extends TestCase 'paid_to_date' => 0, 'status_id' => 2, 'date' => now(), - 'due_date' => now() + 'due_date' => now(), + 'line_items' => [ + [ + 'product_key' => 'product_1', + 'quantity' => 1, + 'cost' => 100, + ] + ], + 'tax_rate1' => 0, + 'tax_rate2' => 0, + 'tax_rate3' => 0, +'discount' => 0, ]); $i2 = Invoice::factory()->create([ @@ -108,19 +123,37 @@ class ChartCurrencyTest extends TestCase 'paid_to_date' => 0, 'status_id' => 2, 'date' => now(), - 'due_date' => now() + 'due_date' => now(), + 'line_items' => [ + [ + 'product_key' => 'product_1', + 'quantity' => 1, + 'cost' => 100, + ] + ], + 'tax_rate1' => 0, + 'tax_rate2' => 0, + 'tax_rate3' => 0, +'discount' => 0, ]); + $repo = new InvoiceRepository(); + $i1 = $repo->save([], $i1); + $i2 = $repo->save([], $i2); + $i1->service()->markPaid()->save(); $i2->service()->markPaid()->save(); + +$this->assertEquals(100, $i1->amount); +$this->assertEquals(100, $i2->amount); + $cs = new ChartService($company, $this->user, true); $results = $cs->totals('1970-01-01', '2050-01-01'); + nlog($results); $this->assertCount(2, $results['currencies']); - // nlog($results); - $this->assertEquals('USD', $results['currencies'][1]); $this->assertEquals('GBP', $results['currencies'][2]); diff --git a/tests/Unit/CompanyDocumentsTest.php b/tests/Unit/CompanyDocumentsTest.php index 317eaed54a..34e835b90f 100644 --- a/tests/Unit/CompanyDocumentsTest.php +++ b/tests/Unit/CompanyDocumentsTest.php @@ -23,7 +23,7 @@ use Tests\TestCase; class CompanyDocumentsTest extends TestCase { use MockAccountData; - use DatabaseTransactions; + // use DatabaseTransactions; protected function setUp(): void { diff --git a/tests/Unit/EInvoiceTest.php b/tests/Unit/EInvoiceTest.php index 88715bb061..95b7ef984b 100644 --- a/tests/Unit/EInvoiceTest.php +++ b/tests/Unit/EInvoiceTest.php @@ -29,7 +29,7 @@ use Illuminate\Foundation\Testing\DatabaseTransactions; class EInvoiceTest extends TestCase { use MockAccountData; - use DatabaseTransactions; + // use DatabaseTransactions; protected function setUp(): void { diff --git a/tests/Unit/EntityTest.php b/tests/Unit/EntityTest.php index 448a4c464d..5cebbf190f 100644 --- a/tests/Unit/EntityTest.php +++ b/tests/Unit/EntityTest.php @@ -34,7 +34,7 @@ use Illuminate\Foundation\Testing\DatabaseTransactions; class EntityTest extends TestCase { use MockAccountData; - use DatabaseTransactions; + // use DatabaseTransactions; public $invoice; diff --git a/tests/Unit/FactoryCreationTest.php b/tests/Unit/FactoryCreationTest.php index 11d301037b..9ed6933fe3 100644 --- a/tests/Unit/FactoryCreationTest.php +++ b/tests/Unit/FactoryCreationTest.php @@ -30,7 +30,7 @@ use Tests\TestCase; class FactoryCreationTest extends TestCase { use MakesHash; - use DatabaseTransactions; + // use DatabaseTransactions; use MockAccountData; protected function setUp(): void diff --git a/tests/Unit/GeneratesCounterTest.php b/tests/Unit/GeneratesCounterTest.php index 27fcd167dd..28d904a1de 100644 --- a/tests/Unit/GeneratesCounterTest.php +++ b/tests/Unit/GeneratesCounterTest.php @@ -39,7 +39,7 @@ use Illuminate\Foundation\Testing\DatabaseTransactions; class GeneratesCounterTest extends TestCase { use GeneratesCounter; - use DatabaseTransactions; + // use DatabaseTransactions; use MakesHash; use MockAccountData; diff --git a/tests/_bootstrap.php b/tests/_bootstrap.php index a631610f58..b3d9bbc7f3 100644 --- a/tests/_bootstrap.php +++ b/tests/_bootstrap.php @@ -1,12 +1 @@