From 84dd24c07025668f57fbdc4872cdbb4abe13cf2a Mon Sep 17 00:00:00 2001 From: David Bomba Date: Fri, 2 Jul 2021 09:48:11 +1000 Subject: [PATCH 1/3] Tests for credit balances --- app/Services/Client/ClientService.php | 1 + tests/Unit/CreditBalanceTest.php | 79 +++++++++++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 tests/Unit/CreditBalanceTest.php diff --git a/app/Services/Client/ClientService.php b/app/Services/Client/ClientService.php index 7b1b27dcfcad..9289a53604f1 100644 --- a/app/Services/Client/ClientService.php +++ b/app/Services/Client/ClientService.php @@ -51,6 +51,7 @@ class ClientService $credits = $this->client->credits ->where('is_deleted', false) ->where('balance', '>', 0) + ->where('due_date', '<=', now()) ->sortBy('created_at'); return Number::roundValue($credits->sum('balance'), $this->client->currency()->precision); diff --git a/tests/Unit/CreditBalanceTest.php b/tests/Unit/CreditBalanceTest.php new file mode 100644 index 000000000000..d8fb81761ed5 --- /dev/null +++ b/tests/Unit/CreditBalanceTest.php @@ -0,0 +1,79 @@ +faker = \Faker\Factory::create(); + } + + public function testCreditBalance() + { + + $account = Account::factory()->create(); + $user = User::factory()->create( + ['account_id' => $account->id, 'email' => $this->faker->safeEmail] + ); + + $company = Company::factory()->create(['account_id' => $account->id]); + $client = Client::factory()->create(['company_id' => $company->id, 'user_id' => $user->id]); + + $credit = Credit::factory()->create([ + 'user_id' => $user->id, + 'company_id' => $company->id, + 'client_id' => $client->id, + 'balance' => 10, + 'number' => 'testing-number-01', + 'status_id' => Credit::STATUS_SENT, + ]); + + $this->assertEquals($client->service()->getCreditBalance(), 10); + } + + + public function testExpiredCreditBalance() + { + + $account = Account::factory()->create(); + $user = User::factory()->create( + ['account_id' => $account->id, 'email' => $this->faker->safeEmail] + ); + + $company = Company::factory()->create(['account_id' => $account->id]); + $client = Client::factory()->create(['company_id' => $company->id, 'user_id' => $user->id]); + + $credit = Credit::factory()->create([ + 'user_id' => $user->id, + 'company_id' => $company->id, + 'client_id' => $client->id, + 'balance' => 10, + 'due_date' => now()->addDays(5), + 'number' => 'testing-number-02', + 'status_id' => Credit::STATUS_SENT, + ]); + + $this->assertEquals($client->service()->getCreditBalance(), 0); + + } +} From 651e72da6b2b3b78059d6360d1994a6dc462d6a1 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Fri, 2 Jul 2021 10:06:26 +1000 Subject: [PATCH 2/3] Lean Mock Data Trait --- tests/MockUnitData.php | 71 ++++++++++++++++++++++++++++++++ tests/Unit/CreditBalanceTest.php | 38 ++++++----------- 2 files changed, 84 insertions(+), 25 deletions(-) create mode 100644 tests/MockUnitData.php diff --git a/tests/MockUnitData.php b/tests/MockUnitData.php new file mode 100644 index 000000000000..c0baea083e25 --- /dev/null +++ b/tests/MockUnitData.php @@ -0,0 +1,71 @@ +faker = \Faker\Factory::create(); + + $this->account = Account::factory()->create(); + + $this->user = User::factory()->create([ + 'account_id' => $this->account->id, + 'email' => $this->faker->safeEmail + ]); + + $this->company = Company::factory()->create([ + 'account_id' => $this->account->id + ]); + + $this->client = Client::factory()->create([ + 'user_id' => $this->user->id, + 'company_id' => $this->company->id + ]); + + $this->primary_contact = ClientContact::factory()->create([ + 'user_id' => $this->user->id, + 'client_id' => $this->client->id, + 'company_id' => $this->company->id, + 'is_primary' => 1, + ]); + + ClientContact::factory()->count(2)->create([ + 'user_id' => $this->user->id, + 'client_id' => $this->client->id, + 'company_id' => $this->company->id, + ]); + + } +} \ No newline at end of file diff --git a/tests/Unit/CreditBalanceTest.php b/tests/Unit/CreditBalanceTest.php index d8fb81761ed5..263409b4a854 100644 --- a/tests/Unit/CreditBalanceTest.php +++ b/tests/Unit/CreditBalanceTest.php @@ -15,6 +15,7 @@ use App\Models\Client; use App\Models\Company; use App\Models\Credit; use App\Models\User; +use Tests\MockUnitData; use Tests\TestCase; /** @@ -22,58 +23,45 @@ use Tests\TestCase; */ class CreditBalanceTest extends TestCase { + use MockUnitData; + public function setUp() :void { parent::setUp(); - $this->faker = \Faker\Factory::create(); + + $this->makeTestData(); } public function testCreditBalance() { - $account = Account::factory()->create(); - $user = User::factory()->create( - ['account_id' => $account->id, 'email' => $this->faker->safeEmail] - ); - - $company = Company::factory()->create(['account_id' => $account->id]); - $client = Client::factory()->create(['company_id' => $company->id, 'user_id' => $user->id]); - $credit = Credit::factory()->create([ - 'user_id' => $user->id, - 'company_id' => $company->id, - 'client_id' => $client->id, + 'user_id' => $this->user->id, + 'company_id' => $this->company->id, + 'client_id' => $this->client->id, 'balance' => 10, 'number' => 'testing-number-01', 'status_id' => Credit::STATUS_SENT, ]); - $this->assertEquals($client->service()->getCreditBalance(), 10); + $this->assertEquals($this->client->service()->getCreditBalance(), 10); } public function testExpiredCreditBalance() { - $account = Account::factory()->create(); - $user = User::factory()->create( - ['account_id' => $account->id, 'email' => $this->faker->safeEmail] - ); - - $company = Company::factory()->create(['account_id' => $account->id]); - $client = Client::factory()->create(['company_id' => $company->id, 'user_id' => $user->id]); - $credit = Credit::factory()->create([ - 'user_id' => $user->id, - 'company_id' => $company->id, - 'client_id' => $client->id, + 'user_id' => $this->user->id, + 'company_id' => $this->company->id, + 'client_id' => $this->client->id, 'balance' => 10, 'due_date' => now()->addDays(5), 'number' => 'testing-number-02', 'status_id' => Credit::STATUS_SENT, ]); - $this->assertEquals($client->service()->getCreditBalance(), 0); + $this->assertEquals($this->client->service()->getCreditBalance(), 0); } } From ee729d8da0c0503af8c17c4c543702ce677dcf66 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Fri, 2 Jul 2021 10:43:32 +1000 Subject: [PATCH 3/3] fixes for setup flow --- .env.example | 18 ++++++------------ app/Http/Controllers/SetupController.php | 21 +++++++++++---------- config/ninja.php | 4 ++-- 3 files changed, 19 insertions(+), 24 deletions(-) diff --git a/.env.example b/.env.example index f84708528ee5..76a3928a4063 100644 --- a/.env.example +++ b/.env.example @@ -5,20 +5,14 @@ APP_DEBUG=false APP_URL=http://localhost -DB_CONNECTION=db-ninja-01 +DB_CONNECTION=mysql MULTI_DB_ENABLED=false -DB_HOST1=localhost -DB_DATABASE1=ninja -DB_USERNAME1=ninja -DB_PASSWORD1=ninja -DB_PORT1=3306 - -DB_HOST2=localhost -DB_DATABASE2=ninja2 -DB_USERNAME2=ninja -DB_PASSWORD2=ninja -DB_PORT2=3306 +DB_HOST=localhost +DB_DATABASE=ninja +DB_USERNAME=ninja +DB_PASSWORD=ninja +DB_PORT=3306 DEMO_MODE=false diff --git a/app/Http/Controllers/SetupController.php b/app/Http/Controllers/SetupController.php index b788f816bf0b..d726225f0cb7 100644 --- a/app/Http/Controllers/SetupController.php +++ b/app/Http/Controllers/SetupController.php @@ -109,11 +109,11 @@ class SetupController extends Controller 'REQUIRE_HTTPS' => $request->input('https') ? 'true' : 'false', 'APP_DEBUG' => 'false', - 'DB_HOST1' => $request->input('db_host'), - 'DB_PORT1' => $request->input('db_port'), - 'DB_DATABASE1' => $request->input('db_database'), - 'DB_USERNAME1' => $request->input('db_username'), - 'DB_PASSWORD1' => $request->input('db_password'), + 'DB_HOST' => $request->input('db_host'), + 'DB_PORT' => $request->input('db_port'), + 'DB_DATABASE' => $request->input('db_database'), + 'DB_USERNAME' => $request->input('db_username'), + 'DB_PASSWORD' => $request->input('db_password'), 'MAIL_MAILER' => $mail_driver, 'MAIL_PORT' => $request->input('mail_port'), @@ -125,6 +125,7 @@ class SetupController extends Controller 'MAIL_PASSWORD' => $request->input('mail_password'), 'NINJA_ENVIRONMENT' => 'selfhost', + 'DB_CONNECTION' => 'mysql', ]; if (config('ninja.db.multi_db_enabled')) { @@ -133,11 +134,11 @@ class SetupController extends Controller if (config('ninja.preconfigured_install')) { // Database connection was already configured. Don't let the user override it. - unset($env_values['DB_HOST1']); - unset($env_values['DB_PORT1']); - unset($env_values['DB_DATABASE1']); - unset($env_values['DB_USERNAME1']); - unset($env_values['DB_PASSWORD1']); + unset($env_values['DB_HOST']); + unset($env_values['DB_PORT']); + unset($env_values['DB_DATABASE']); + unset($env_values['DB_USERNAME']); + unset($env_values['DB_PASSWORD']); } try { diff --git a/config/ninja.php b/config/ninja.php index 675ce11ae92d..53dd12331057 100644 --- a/config/ninja.php +++ b/config/ninja.php @@ -14,8 +14,8 @@ return [ 'require_https' => env('REQUIRE_HTTPS', true), 'app_url' => rtrim(env('APP_URL', ''), '/'), 'app_domain' => env('APP_DOMAIN', 'invoicing.co'), - 'app_version' => '5.2.7', - 'app_tag' => '5.2.7', + 'app_version' => '5.2.8', + 'app_tag' => '5.2.8', 'minimum_client_version' => '5.0.16', 'terms_version' => '1.0.1', 'api_secret' => env('API_SECRET', ''),