Dedicated update route for company user preferences

This commit is contained in:
David Bomba 2023-06-22 12:07:03 +10:00
parent 3081907cad
commit a4c14084da
3 changed files with 90 additions and 3 deletions

View File

@ -11,12 +11,13 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Http\Requests\CompanyUser\UpdateCompanyUserRequest;
use App\Models\CompanyUser;
use App\Models\User; use App\Models\User;
use App\Models\CompanyUser;
use Illuminate\Http\Response;
use App\Transformers\CompanyUserTransformer; use App\Transformers\CompanyUserTransformer;
use Illuminate\Database\Eloquent\ModelNotFoundException; 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 class CompanyUserController extends BaseController
{ {
@ -131,6 +132,24 @@ class CompanyUserController extends BaseController
return $this->itemResponse($company_user->fresh()); 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. * Remove the specified resource from storage.
* *

View File

@ -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::post('company_gateways/bulk', [CompanyGatewayController::class, 'bulk'])->name('company_gateways.bulk');
Route::put('company_users/{user}', [CompanyUserController::class, 'update']); 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::resource('credits', CreditController::class); // name = (credits. index / create / show / update / destroy / edit
Route::put('credits/{credit}/upload', [CreditController::class, 'upload'])->name('credits.upload'); Route::put('credits/{credit}/upload', [CreditController::class, 'upload'])->name('credits.upload');

View File

@ -35,6 +35,71 @@ class UpdateCompanyUserTest extends TestCase
$this->makeTestData(); $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() public function testUpdatingCompanyUserAsAdmin()
{ {
// User::unguard(); // User::unguard();
@ -67,4 +132,6 @@ class UpdateCompanyUserTest extends TestCase
$this->assertEquals('ninja', $arr['data']['settings']['invoice']); $this->assertEquals('ninja', $arr['data']['settings']['invoice']);
} }
} }