From 2cadcad48565961eb42b0d3bc4d871cafecb1ef8 Mon Sep 17 00:00:00 2001 From: Thomas Calemark Date: Sun, 6 Mar 2022 05:23:31 +0100 Subject: [PATCH] Fix currency settings error (#821) * Fixed issue with currency error on change after transactions * organized imports --- .../UpdateCompanySettingsController.php | 8 ++- tests/Feature/Admin/CompanySettingTest.php | 61 +++++++++++++++++++ 2 files changed, 67 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/V1/Admin/Settings/UpdateCompanySettingsController.php b/app/Http/Controllers/V1/Admin/Settings/UpdateCompanySettingsController.php index 128be75e..2589e4f8 100644 --- a/app/Http/Controllers/V1/Admin/Settings/UpdateCompanySettingsController.php +++ b/app/Http/Controllers/V1/Admin/Settings/UpdateCompanySettingsController.php @@ -6,6 +6,7 @@ use Crater\Http\Controllers\Controller; use Crater\Http\Requests\UpdateSettingsRequest; use Crater\Models\Company; use Crater\Models\CompanySetting; +use Illuminate\Support\Arr; class UpdateCompanySettingsController extends Controller { @@ -20,10 +21,13 @@ class UpdateCompanySettingsController extends Controller $company = Company::find($request->header('company')); $this->authorize('manage company', $company); - $companyCurrency = CompanySetting::getSetting('currency', $request->header('company')); $data = $request->settings; - if ($companyCurrency !== $data['currency'] && $company->hasTransactions()) { + if ( + Arr::exists($data, 'currency') && + (CompanySetting::getSetting('currency', $company->id) !== $data['currency']) && + $company->hasTransactions() + ) { return response()->json([ 'success' => false, 'message' => 'Cannot update company currency after transactions are created.' diff --git a/tests/Feature/Admin/CompanySettingTest.php b/tests/Feature/Admin/CompanySettingTest.php index 04b22550..613dd6bd 100644 --- a/tests/Feature/Admin/CompanySettingTest.php +++ b/tests/Feature/Admin/CompanySettingTest.php @@ -3,6 +3,9 @@ use Crater\Http\Controllers\V1\Admin\Settings\CompanyController; use Crater\Http\Requests\CompanyRequest; use Crater\Http\Requests\ProfileRequest; +use Crater\Models\Invoice; +use Crater\Models\InvoiceItem; +use Crater\Models\Tax; use Crater\Models\User; use Illuminate\Support\Facades\Artisan; use Laravel\Sanctum\Sanctum; @@ -120,6 +123,64 @@ test('update settings', function () { } }); +test('update settings without currency setting', function () { + + $settings = [ + 'notification_email' => 'noreply@crater.in', + ]; + + $response = postJson('/api/v1/company/settings', ['settings' => $settings]); + + $response->assertOk() + ->assertJson([ + 'success' => true, + ]); + + foreach ($settings as $key => $value) { + $this->assertDatabaseHas('company_settings', [ + 'option' => $key, + 'value' => $value, + ]); + } +}); + +test('update currency settings after company has currency and transactions is not allowed', function () { + $settings = [ + 'currency' => 1, + ]; + + $response = postJson('/api/v1/company/settings', ['settings' => $settings]); + + $response->assertOk() + ->assertJson([ + 'success' => true, + ]); + + Invoice::factory() + ->raw([ + 'taxes' => [Tax::factory()->raw()], + 'items' => [InvoiceItem::factory()->raw()], + ]); + + $settings = [ + 'currency' => 2, + ]; + + $response = postJson('/api/v1/company/settings', ['settings' => $settings]); + + $response->assertOK() + ->assertJson([ + 'success' => false, + 'message' => 'Cannot update company currency after transactions are created.' + ]); + + + $this->assertDatabaseHas('company_settings', [ + 'option' => 'currency', + 'value' => 1, + ]); +}); + test('get notification email settings', function () { $data['settings'] = [ 'currency',