diff --git a/api/app/Http/Controllers/WorkspaceController.php b/api/app/Http/Controllers/WorkspaceController.php index 3a1df476..9d0ac694 100644 --- a/api/app/Http/Controllers/WorkspaceController.php +++ b/api/app/Http/Controllers/WorkspaceController.php @@ -66,7 +66,7 @@ class WorkspaceController extends Controller public function create(Request $request) { - $user = $request->user(); + $user = $request->user(); $this->validate($request, [ 'name' => 'required', @@ -91,4 +91,24 @@ class WorkspaceController extends Controller 'workspace' => new WorkspaceResource($workspace), ]); } + + public function update(Request $request, $id) + { + $workspace = Auth::user()->workspaces()->findOrFail($id); + $this->authorize('update', $workspace); + + $this->validate($request, [ + 'name' => 'required', + ]); + + $workspace->update([ + 'name' => $request->name, + 'icon' => $request->emoji ?? '', + ]); + + return $this->success([ + 'message' => 'Workspace updated.', + 'workspace' => new WorkspaceResource($workspace), + ]); + } } diff --git a/api/app/Policies/WorkspacePolicy.php b/api/app/Policies/WorkspacePolicy.php index 49d8ce56..2863e4b8 100644 --- a/api/app/Policies/WorkspacePolicy.php +++ b/api/app/Policies/WorkspacePolicy.php @@ -50,7 +50,7 @@ class WorkspacePolicy */ public function update(User $user, Workspace $workspace) { - return false; + return $user->ownsWorkspace($workspace); } /** diff --git a/api/routes/api.php b/api/routes/api.php index e0a49ec3..6a362df7 100644 --- a/api/routes/api.php +++ b/api/routes/api.php @@ -143,6 +143,7 @@ Route::group(['middleware' => 'auth:api'], function () { )->name('forms.index'); Route::put('/custom-domains', [WorkspaceController::class, 'saveCustomDomain'])->name('save-custom-domains'); Route::put('/email-settings', [WorkspaceController::class, 'saveEmailSettings'])->name('save-email-settings'); + Route::put('/', [WorkspaceController::class, 'update'])->name('update'); Route::delete('/', [WorkspaceController::class, 'delete'])->name('delete'); Route::middleware('pro-form')->group(function () { diff --git a/api/tests/Feature/WorkspaceTest.php b/api/tests/Feature/WorkspaceTest.php index 63054f88..9a79c146 100644 --- a/api/tests/Feature/WorkspaceTest.php +++ b/api/tests/Feature/WorkspaceTest.php @@ -5,7 +5,7 @@ it('can create and delete Workspace', function () { for ($i = 1; $i <= 3; $i++) { $this->postJson(route('open.workspaces.create'), [ - 'name' => 'Workspace Test - '.$i, + 'name' => 'Workspace Test - ' . $i, 'icon' => '🧪', ]) ->assertSuccessful() @@ -34,3 +34,30 @@ it('can create and delete Workspace', function () { } } }); + +it('can update workspace', function () { + $user = $this->actingAsUser(); + + $this->postJson(route('open.workspaces.create'), [ + 'name' => 'Workspace Test', + 'icon' => '🧪', + ]) + ->assertSuccessful() + ->assertJson([ + 'type' => 'success', + 'message' => 'Workspace created.', + ]); + + expect($user->workspaces()->count())->toBe(1); + + $workspace = $user->workspaces()->first(); + $this->putJson(route('open.workspaces.update', $workspace->id), [ + 'name' => 'Workspace Test Updated', + 'icon' => '🔬', + ]) + ->assertSuccessful() + ->assertJson([ + 'type' => 'success', + 'message' => 'Workspace updated.', + ]); +}); diff --git a/client/pages/settings/workspace.vue b/client/pages/settings/workspace.vue index 3aefbc10..133a508f 100644 --- a/client/pages/settings/workspace.vue +++ b/client/pages/settings/workspace.vue @@ -2,9 +2,20 @@