From 27675d7f38727d0005b2eb8d5454afccfaf79276 Mon Sep 17 00:00:00 2001 From: Peter Papp Date: Sat, 27 Feb 2021 10:22:35 +0100 Subject: [PATCH] - refactored move method - refactored FavouriteController.php store method - added some tests methods --- .../FileFunctions/EditItemsController.php | 9 +- .../FileFunctions/FavouriteController.php | 34 +++--- .../FileFunctions/MoveItemRequest.php | 6 +- app/Http/Tools/Editor.php | 38 +++---- app/Models/User.php | 2 +- composer.json | 3 +- tests/Feature/FolderTest.php | 105 +++++++++++++++--- 7 files changed, 126 insertions(+), 71 deletions(-) diff --git a/app/Http/Controllers/FileFunctions/EditItemsController.php b/app/Http/Controllers/FileFunctions/EditItemsController.php index b34fe665..e4ceba0b 100644 --- a/app/Http/Controllers/FileFunctions/EditItemsController.php +++ b/app/Http/Controllers/FileFunctions/EditItemsController.php @@ -116,7 +116,7 @@ class EditItemsController extends Controller } // If request have a change folder icon values set the folder icon - if ($request->type === 'folder' && $request->filled('emoji')) { + if ($request->type === 'folder' && ($request->filled('emoji') || $request->filled('color'))) { Editor::set_folder_icon($request, $id); } @@ -499,10 +499,11 @@ class EditItemsController extends Controller return Demo::response_204(); } - $to_unique_id = $request->input('to_unique_id'); + $to_id = $request->input('to_id'); // Check permission to upload for authenticated editor if ($request->user()->tokenCan('editor')) { + // check if shared_token cookie exist if (!$request->hasCookie('shared_token')) abort('401'); @@ -510,11 +511,11 @@ class EditItemsController extends Controller $shared = get_shared($request->cookie('shared_token')); // Check access to requested directory - Guardian::check_item_access($to_unique_id, $shared); + Guardian::check_item_access($to_id, $shared); } // Move item - Editor::move($request, $to_unique_id); + Editor::move($request, $to_id); return response('Done!', 204); } diff --git a/app/Http/Controllers/FileFunctions/FavouriteController.php b/app/Http/Controllers/FileFunctions/FavouriteController.php index cf6ec4e4..d0ba7c1a 100644 --- a/app/Http/Controllers/FileFunctions/FavouriteController.php +++ b/app/Http/Controllers/FileFunctions/FavouriteController.php @@ -2,8 +2,8 @@ namespace App\Http\Controllers\FileFunctions; -use App\Folder; use App\Http\Tools\Demo; +use App\Models\Folder; use Illuminate\Support\Facades\Validator; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Auth; @@ -19,33 +19,25 @@ class FavouriteController extends Controller */ public function store(Request $request) { - // Validate request - $validator = Validator::make($request->input('folders'), [ - '*.unique_id' => 'required|integer', - ]); + // todo: pridat validator ako AddToFavouritesRequest - // Return error - if ($validator->fails()) abort(400, 'Bad input'); + foreach ($request->input('folders') as $id) { - foreach($request->input('folders') as $item) { + // Get user & folder + $user = Auth::user(); - // Get user & folder - $user = Auth::user(); - $folder = Folder::where('unique_id', $item['unique_id'])->first(); + if (is_demo($user->id)) { + return Demo::favourites($user); + } - if (is_demo($user->id)) { - return Demo::favourites($user); + // Add folder to user favourites + $user + ->favourite_folders() + ->syncWithoutDetaching($id); } - // Check ownership - if ($folder->user_id !== $user->id) abort(403); - - // Add folder to user favourites - $user->favourite_folders()->syncWithoutDetaching($item['unique_id']); - - } // Return updated favourites - return $user->favourite_folders; + return response($user->favourite_folders, 204); } /** diff --git a/app/Http/Requests/FileFunctions/MoveItemRequest.php b/app/Http/Requests/FileFunctions/MoveItemRequest.php index a0977e20..7c038026 100644 --- a/app/Http/Requests/FileFunctions/MoveItemRequest.php +++ b/app/Http/Requests/FileFunctions/MoveItemRequest.php @@ -25,9 +25,9 @@ class MoveItemRequest extends FormRequest public function rules() { return [ - 'to_unique_id' => 'required|integer', - 'items[*].type' => 'required|string', - 'items[*].unique_id' => 'required|integer', + 'to_id' => 'required|uuid', + 'items[*].type' => 'required|string', + 'items[*].id' => 'required|uuid', ]; } } diff --git a/app/Http/Tools/Editor.php b/app/Http/Tools/Editor.php index 0f8a9ea9..86bc2d50 100644 --- a/app/Http/Tools/Editor.php +++ b/app/Http/Tools/Editor.php @@ -386,38 +386,28 @@ class Editor * Move folder or file to new location * * @param $request - * @param $unique_id - * @param null $shared + * @param $to_id */ - public static function move($request, $to_unique_id, $shared = null) + public static function move($request, $to_id) { - // Get user id - $user_id = is_null($shared) ? Auth::id() : $shared->user_id; - foreach ($request->input('items') as $item) { - $unique_id = $item['unique_id']; + // Move folder if ($item['type'] === 'folder') { - // Move folder - $item = Folder::where('user_id', $user_id) - ->where('unique_id', $unique_id) - ->firstOrFail(); + Folder::find($item['id']) + ->update([ + 'parent_id' => $to_id + ]); - $item->update([ - 'parent_id' => $to_unique_id - ]); + } - } else { - - // Move file under new folder - $item = UserFile::where('user_id', $user_id) - ->where('unique_id', $unique_id) - ->firstOrFail(); - - $item->update([ - 'folder_id' => $to_unique_id - ]); + // Move file + if ($item['type'] === 'file') { + UserFile::find($item['id']) + ->update([ + 'folder_id' => $to_id + ]); } } } diff --git a/app/Models/User.php b/app/Models/User.php index d90d90c4..7614ba62 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -243,7 +243,7 @@ class User extends Authenticatable */ public function favourite_folders() { - return $this->belongsToMany(Folder::class, 'favourite_folder', 'user_id', 'folder_unique_id', 'id', 'unique_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/composer.json b/composer.json index a06b66b8..c9186775 100644 --- a/composer.json +++ b/composer.json @@ -35,7 +35,8 @@ "fzaninotto/faker": "^1.9.1", "mockery/mockery": "^1.3.1", "nunomaduro/collision": "^5.0", - "phpunit/phpunit": "^9.5.2" + "phpunit/phpunit": "^9.5.2", + "ext-json": "*" }, "config": { "optimize-autoloader": true, diff --git a/tests/Feature/FolderTest.php b/tests/Feature/FolderTest.php index 916c524d..aeff871f 100644 --- a/tests/Feature/FolderTest.php +++ b/tests/Feature/FolderTest.php @@ -8,6 +8,8 @@ use Illuminate\Foundation\Testing\DatabaseMigrations; use Laravel\Sanctum\Sanctum; use Tests\TestCase; +// TODO: pridat foldre do api skupiny + class FolderTest extends TestCase { use DatabaseMigrations; @@ -35,7 +37,6 @@ class FolderTest extends TestCase Sanctum::actingAs($user); - // TODO: pridat do api skupiny $this->postJson('/api/create-folder', [ 'name' => 'New Folder', 'parent_id' => null, @@ -63,7 +64,6 @@ class FolderTest extends TestCase Sanctum::actingAs($user); - // TODO: pridat do api skupiny $this->patchJson("/api/rename/{$folder->id}", [ 'name' => 'Renamed Folder', 'type' => 'folder', @@ -91,44 +91,115 @@ class FolderTest extends TestCase Sanctum::actingAs($user); - // TODO: pridat do api skupiny + $emoji_fragment = [ + 'category' => 'Smileys & Emotion (face-smiling)', + 'char' => '😁', + 'name' => 'beaming face with smiling eyes', + ]; + $this->patchJson("/api/rename/{$folder->id}", [ 'name' => 'Renamed Folder', 'type' => 'folder', - 'emoji' => [ - 'category' => 'Smileys & Emotion (face-smiling)', - 'char' => '😁', - 'name' => 'beaming face with smiling eyes', - ] + 'emoji' => $emoji_fragment ]) ->assertStatus(200) ->assertJsonFragment([ - 'name' => 'Renamed Folder', - 'emoji' => [ - 'category' => 'Smileys & Emotion (face-smiling)', - 'char' => '😁', - 'name' => 'beaming face with smiling eyes', - ] + 'name' => 'Renamed Folder', + 'emoji' => $emoji_fragment ]); - $this->assertDatabaseMissing('folders', [ - 'emoji' => null + $this->assertDatabaseHas('folders', [ + 'color' => null, + 'emoji' => json_encode($emoji_fragment) ]); } + /** + * @test + */ public function it_set_folder_color() { + $folder = Folder::factory(Folder::class) + ->create(); + $user = User::factory(User::class) + ->create(); + + Sanctum::actingAs($user); + + $this->patchJson("/api/rename/{$folder->id}", [ + 'name' => 'Folder Name', + 'type' => 'folder', + 'color' => '#AD6FFE' + ]) + ->assertStatus(200) + ->assertJsonFragment([ + 'name' => 'Folder Name', + 'emoji' => null, + 'color' => '#AD6FFE', + ]); + + $this->assertDatabaseHas('folders', [ + 'color' => '#AD6FFE', + 'emoji' => null, + ]); } + /** + * @test + */ public function it_move_folder_to_another_folder() { + $root = Folder::factory(Folder::class) + ->create(); + + $children = Folder::factory(Folder::class) + ->create(); + + $user = User::factory(User::class) + ->create(); + + Sanctum::actingAs($user); + + $this->postJson("/api/move", [ + 'to_id' => $root->id, + 'items' => [ + [ + 'type' => 'folder', + 'id' => $children->id, + ] + ], + ])->assertStatus(204); + + $this->assertEquals( + $root->id, Folder::find($children->id)->parent_id + ); } - public function it_add_to_favourites_folder() + /** + * @test + */ + public function it_add_folder_to_favourites() { + $folder = Folder::factory(Folder::class) + ->create(); + $user = User::factory(User::class) + ->create(); + + Sanctum::actingAs($user); + + $this->postJson("/api/folders/favourites", [ + 'folders' => [ + $folder->id + ], + ])->assertStatus(204); + + $this->assertDatabaseHas('favourite_folder', [ + 'user_id' => $user->id, + 'folder_id' => $folder->id, + ]); } public function it_zip_and_download_folder_with_content_within()