diff --git a/app/Http/Controllers/CompanyUserController.php b/app/Http/Controllers/CompanyUserController.php index 2f6e23168e3d..e14d1a9b0907 100644 --- a/app/Http/Controllers/CompanyUserController.php +++ b/app/Http/Controllers/CompanyUserController.php @@ -11,12 +11,13 @@ namespace App\Http\Controllers; -use App\Http\Requests\CompanyUser\UpdateCompanyUserRequest; -use App\Models\CompanyUser; use App\Models\User; +use App\Models\CompanyUser; +use Illuminate\Http\Response; use App\Transformers\CompanyUserTransformer; use Illuminate\Database\Eloquent\ModelNotFoundException; -use Illuminate\Http\Response; +use App\Http\Requests\CompanyUser\UpdateCompanyUserRequest; +use App\Http\Requests\CompanyUser\UpdateCompanyUserPreferencesRequest; class CompanyUserController extends BaseController { @@ -131,6 +132,24 @@ class CompanyUserController extends BaseController return $this->itemResponse($company_user->fresh()); } + public function updatePreferences(UpdateCompanyUserPreferencesRequest $request, User $user) + { + $company = auth()->user()->company(); + + $company_user = CompanyUser::whereUserId($user->id)->whereCompanyId($company->id)->first(); + + if (! $company_user) { + throw new ModelNotFoundException(ctrans('texts.company_user_not_found')); + return; + } + + $company_user->react_settings = $request->react_settings; + $company_user->save(); + + return $this->itemResponse($company_user->fresh()); + } + + /** * Remove the specified resource from storage. * diff --git a/routes/api.php b/routes/api.php index c1e24993bfcc..42fdfb810966 100644 --- a/routes/api.php +++ b/routes/api.php @@ -179,6 +179,7 @@ Route::group(['middleware' => ['throttle:api', 'api_db', 'token_auth', 'locale'] Route::post('company_gateways/bulk', [CompanyGatewayController::class, 'bulk'])->name('company_gateways.bulk'); Route::put('company_users/{user}', [CompanyUserController::class, 'update']); + Route::put('company_users/{user}/preferences', [CompanyUserController::class, 'updatePreferences']); Route::resource('credits', CreditController::class); // name = (credits. index / create / show / update / destroy / edit Route::put('credits/{credit}/upload', [CreditController::class, 'upload'])->name('credits.upload'); diff --git a/tests/Integration/UpdateCompanyUserTest.php b/tests/Integration/UpdateCompanyUserTest.php index 63c0ad09e663..505dcafc8eb1 100644 --- a/tests/Integration/UpdateCompanyUserTest.php +++ b/tests/Integration/UpdateCompanyUserTest.php @@ -35,6 +35,71 @@ class UpdateCompanyUserTest extends TestCase $this->makeTestData(); } + + public function testUpdatingCompanyUserReactSettings() + { + + $company_user = CompanyUser::whereUserId($this->user->id)->whereCompanyId($this->company->id)->first(); + + $this->user->company_user = $company_user; + + $settings = [ + 'react_settings' => [ + 'show_pdf_preview' => true, + 'react_notification_link' => false + ], + ]; + + $response = null; + + try { + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token, + ])->put('/api/v1/company_users/'.$this->encodePrimaryKey($this->user->id).'/preferences', $settings); + } catch (ValidationException $e) { + $message = json_decode($e->validator->getMessageBag(), 1); + $this->assertNotNull($message); + } + + $response->assertStatus(200); + + $arr = $response->json(); + + $this->assertTrue($arr['data']['react_settings']['show_pdf_preview']); + $this->assertFalse($arr['data']['react_settings']['react_notification_link']); + + + $settings = [ + 'react_settings' => [ + 'show_pdf_preview' => false, + 'react_notification_link' => true + ], + ]; + + $response = null; + + try { + $response = $this->withHeaders([ + 'X-API-SECRET' => config('ninja.api_secret'), + 'X-API-TOKEN' => $this->token, + ])->put('/api/v1/company_users/'.$this->encodePrimaryKey($this->user->id).'/preferences', $settings); + } catch (ValidationException $e) { + $message = json_decode($e->validator->getMessageBag(), 1); + $this->assertNotNull($message); + } + + $response->assertStatus(200); + + $arr = $response->json(); + + $this->assertFalse($arr['data']['react_settings']['show_pdf_preview']); + $this->assertTrue($arr['data']['react_settings']['react_notification_link']); + + + } + + public function testUpdatingCompanyUserAsAdmin() { // User::unguard(); @@ -67,4 +132,6 @@ class UpdateCompanyUserTest extends TestCase $this->assertEquals('ninja', $arr['data']['settings']['invoice']); } + + }