diff --git a/app/Http/Controllers/FileFunctions/FavouriteController.php b/app/Http/Controllers/FileFunctions/FavouriteController.php index d0ba7c1a..c31cbf32 100644 --- a/app/Http/Controllers/FileFunctions/FavouriteController.php +++ b/app/Http/Controllers/FileFunctions/FavouriteController.php @@ -43,10 +43,10 @@ class FavouriteController extends Controller /** * Remove folder from user favourites * - * @param $unique_id + * @param $id * @return \Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\Response */ - public function destroy($unique_id) + public function destroy($id) { // Get user $user = Auth::user(); @@ -56,9 +56,9 @@ class FavouriteController extends Controller } // Remove folder from user favourites - $user->favourite_folders()->detach($unique_id); + $user->favourite_folders()->detach($id); // Return updated favourites - return $user->favourite_folders; + return response($user->favourite_folders, 204); } } diff --git a/app/Http/Tools/Editor.php b/app/Http/Tools/Editor.php index 1670a3cb..e092f212 100644 --- a/app/Http/Tools/Editor.php +++ b/app/Http/Tools/Editor.php @@ -5,7 +5,7 @@ namespace App\Http\Tools; use App; use App\Models\Folder; use App\Models\Share; -use App\File as UserFile; +use App\Models\File as UserFile; use App\Http\Requests\FileFunctions\RenameItemRequest; use App\Models\User; use App\Models\Zip; @@ -295,14 +295,14 @@ class Editor $shared->delete(); } + // Remove folder from user favourites + DB::table('favourite_folder') + ->where('folder_id', $folder->id) + ->delete(); + // Soft delete items if (! $item['force_delete']) { - // Remove folder from user favourites - DB::table('favourite_folder') - ->where('folder_id', $folder->id) - ->delete(); - // Soft delete folder record $folder->delete(); } @@ -311,12 +311,11 @@ class Editor if ($item['force_delete']) { // Get children folder ids - $child_folders = filter_folders_ids($folder->trashed_folders, 'unique_id'); + $child_folders = filter_folders_ids($folder->trashed_folders, 'id'); // Get children files $files = UserFile::onlyTrashed() - ->where('user_id', $user->id) - ->whereIn('folder_id', Arr::flatten([$unique_id, $child_folders])) + ->whereIn('folder_id', Arr::flatten([$id, $child_folders])) ->get(); // Remove all children files diff --git a/app/Models/User.php b/app/Models/User.php index 7614ba62..73c72f9f 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -243,7 +243,8 @@ class User extends Authenticatable */ public function favourite_folders() { - return $this->belongsToMany(Folder::class, 'favourite_folder', 'user_id', 'folder_id', 'id', 'id')->with('shared:token,id,item_id,permission,protected,expire_in'); + return $this->belongsToMany(Folder::class, 'favourite_folder', 'user_id', 'folder_id', 'id', 'id') + ->with('shared:token,id,item_id,permission,protected,expire_in'); } /** diff --git a/routes/api.php b/routes/api.php index 51d396d9..b41d8926 100644 --- a/routes/api.php +++ b/routes/api.php @@ -64,7 +64,7 @@ Route::group(['middleware' => ['auth:sanctum']], function () { // Favourites Route::group(['prefix' => 'folders'], function () { - Route::delete('/favourites/{unique_id}', [FavouriteController::class, 'destroy']); + Route::delete('/favourites/{id}', [FavouriteController::class, 'destroy']); Route::post('/favourites', [FavouriteController::class, 'store']); }); diff --git a/tests/Feature/FolderTest.php b/tests/Feature/FolderTest.php index 158ab325..1293f2f1 100644 --- a/tests/Feature/FolderTest.php +++ b/tests/Feature/FolderTest.php @@ -201,6 +201,32 @@ class FolderTest extends TestCase ]); } + /** + * @test + */ + public function it_remove_folder_from_favourites() + { + $folder = Folder::factory(Folder::class) + ->create(); + + $user = User::factory(User::class) + ->create(); + + Sanctum::actingAs($user); + + $user + ->favourite_folders() + ->attach($folder->id); + + $this->deleteJson("/api/folders/favourites/$folder->id") + ->assertStatus(204); + + $this->assertDatabaseMissing('favourite_folder', [ + 'user_id' => $user->id, + 'folder_id' => $folder->id, + ]); + } + /** * @test */ @@ -252,14 +278,44 @@ class FolderTest extends TestCase ]); } - public function it_delete_folder_softly() + /** + * @test + */ + public function it_delete_multiple_folder_hardly() { + $user = User::factory(User::class) + ->create(); - } + $folder_1 = Folder::factory(Folder::class) + ->create(); - public function it_delete_folder_hardly() - { + $folder_2 = Folder::factory(Folder::class) + ->create(); + Sanctum::actingAs($user); + + $this->postJson("/api/remove", [ + 'items' => [ + [ + 'id' => $folder_1->id, + 'type' => 'folder', + 'force_delete' => true, + ], + [ + 'id' => $folder_2->id, + 'type' => 'folder', + 'force_delete' => true, + ], + ], + ])->assertStatus(204); + + $this->assertDatabaseMissing('folders', [ + 'id' => $folder_1->id, + ]); + + $this->assertDatabaseMissing('folders', [ + 'id' => $folder_2->id, + ]); } public function it_delete_folder_with_their_content_within_softly()