diff --git a/resources/js/store/modules/fileFunctions.js b/resources/js/store/modules/fileFunctions.js index f4896638..9ad6f808 100644 --- a/resources/js/store/modules/fileFunctions.js +++ b/resources/js/store/modules/fileFunctions.js @@ -120,12 +120,14 @@ const actions = { }, renameItem: ({ commit, getters, dispatch }, data) => { // Updated name in favourites panel - if (getters.permission === 'master' && data.type === 'folder') commit('UPDATE_NAME_IN_FAVOURITES', data) + if (getters.permission === 'master' && data.type === 'folder') + commit('UPDATE_NAME_IN_FAVOURITES', data) // Get route - let route = getters.sharedDetail - ? `/api/editor/rename/${data.id}/${router.currentRoute.params.token}` - : `/api/rename/${data.id}` + let route = { + RequestUpload: `/api/upload-request/${router.currentRoute.params.token}/rename/${data.id}`, + Public: `/api/editor/rename/${data.id}/${router.currentRoute.params.token}`, + }[router.currentRoute.name] || `/api/rename/${data.id}` axios .post(route, { @@ -135,9 +137,9 @@ const actions = { .then((response) => { commit('CHANGE_ITEM_NAME', response.data) - if (data.type === 'folder' && !Vue.prototype.$isThisRoute(router.currentRoute, ['Public'])) + if (data.type === 'folder' && router.currentRoute.name !== 'Public') dispatch('getAppData') - if (data.type === 'folder' && Vue.prototype.$isThisRoute(router.currentRoute, ['Public'])) + if (data.type === 'folder' && router.currentRoute.name === 'Public') dispatch('getFolderTree') }) .catch(() => Vue.prototype.$isSomethingWrong()) diff --git a/routes/upload-request.php b/routes/upload-request.php index 91cec0b5..f1e1b750 100644 --- a/routes/upload-request.php +++ b/routes/upload-request.php @@ -1,5 +1,6 @@ ['auth:sanctum']], function () { Route::post('/', CreateUploadRequestController::class); }); diff --git a/tests/Domain/UploadRequest/RenameFileOrFolderController.php b/tests/Domain/UploadRequest/RenameFileOrFolderController.php new file mode 100644 index 00000000..e149edfb --- /dev/null +++ b/tests/Domain/UploadRequest/RenameFileOrFolderController.php @@ -0,0 +1,59 @@ +status !== 'active') { + return response('Gone', 410); + } + + // Get item + $item = get_item($request->input('type'), $id); + + // Get folders within upload request + $folderWithinIds = Folder::with('folders:id,parent_id') + ->where('parent_id', $uploadRequest->id) + ->get(['id']); + + // Then get all accessible folders within + $accessibleParentIds = Arr::flatten([filter_folders_ids($folderWithinIds), $uploadRequest->id]); + + // Check privileges + if (! in_array($item->parent_id, $accessibleParentIds)) { + return response('Access Denied', 403); + } + + // If request contain icon or color, then change it + if ($request->input('type') === 'folder' && $request->hasAny(['emoji', 'color'])) { + ($this->updateFolderProperty)($request, $id); + } + + // Update item + $item->update(['name' => $request->input('name')]); + + if ($request->input('type') === 'folder') { + return new FolderResource($item); + } + + return new FileResource($item); + } +} diff --git a/tests/Domain/UploadRequest/UploadRequestEditingTest.php b/tests/Domain/UploadRequest/UploadRequestEditingTest.php new file mode 100644 index 00000000..1d3926fd --- /dev/null +++ b/tests/Domain/UploadRequest/UploadRequestEditingTest.php @@ -0,0 +1,84 @@ +hasSettings() + ->create(); + + $uploadRequest = UploadRequest::factory() + ->create([ + 'status' => 'active', + 'user_id' => $user->id, + ]); + + $folder = Folder::factory() + ->create([ + 'parent_id' => $uploadRequest->id, + 'user_id' => $user->id, + ]); + + $this + ->actingAs($user) + ->postJson("/api/upload-request/$uploadRequest->id/rename/$folder->id", [ + 'name' => 'Renamed Folder', + 'type' => 'folder', + ]) + ->assertStatus(200) + ->assertJsonFragment([ + 'name' => 'Renamed Folder', + ]); + + $this->assertDatabaseHas('folders', [ + 'name' => 'Renamed Folder', + ]); + } + /** + * @test + */ + public function it_rename_file_item() + { + $user = User::factory() + ->hasSettings() + ->create(); + + $uploadRequest = UploadRequest::factory() + ->create([ + 'status' => 'active', + 'user_id' => $user->id, + ]); + + $file = File::factory() + ->create([ + 'parent_id' => $uploadRequest->id, + 'user_id' => $user->id, + ]); + + $this + ->actingAs($user) + ->postJson("/api/upload-request/$uploadRequest->id/rename/$file->id", [ + 'name' => 'Renamed File', + 'type' => 'file', + ]) + ->assertStatus(200) + ->assertJsonFragment([ + 'name' => 'Renamed File', + ]); + + $this->assertDatabaseHas('files', [ + 'name' => 'Renamed File', + ]); + } +} diff --git a/tests/Domain/UploadRequest/UploadRequestTest.php b/tests/Domain/UploadRequest/UploadRequestTest.php index cef6c7ac..982a7204 100644 --- a/tests/Domain/UploadRequest/UploadRequestTest.php +++ b/tests/Domain/UploadRequest/UploadRequestTest.php @@ -1,5 +1,4 @@