From 15e154176da72fcce0ea5944f472aac83a3b5ae2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=8Carodej?= Date: Tue, 26 Oct 2021 09:05:08 +0200 Subject: [PATCH] - ability leave team folder - refactoring --- public/mix-manifest.json | 43 +++++++++-- .../components/FilesView/DesktopToolbar.vue | 5 ++ .../js/components/FilesView/FolderIcon.vue | 6 -- resources/js/components/FilesView/Option.vue | 3 + .../Others/Notifications/ToasterItem.vue | 4 +- .../Teams/CreateTeamFolderPopup.vue | 2 +- resources/js/helpers/itemHelpers.js | 11 +++ resources/js/store/modules/teams.js | 2 +- resources/js/views/Auth/SignIn.vue | 15 +++- resources/js/views/FileView/SharedWithMe.vue | 16 ++++ routes/teams.php | 8 +- .../Console/Commands/SetupDevEnvironment.php | 63 ++++++++++++---- .../BrowseSharedWithMeController.php | 9 ++- .../Controllers/LeaveTeamFolderController.php | 25 +++++++ .../Controllers/NavigationTreeController.php | 4 +- tests/Domain/Teams/TeamManagementTest.php | 75 ++++++++++++++----- tests/Domain/Teams/TeamsTest.php | 2 +- 17 files changed, 235 insertions(+), 58 deletions(-) create mode 100644 src/Domain/Teams/Controllers/LeaveTeamFolderController.php diff --git a/public/mix-manifest.json b/public/mix-manifest.json index 49049fba..106c6eb7 100644 --- a/public/mix-manifest.json +++ b/public/mix-manifest.json @@ -8,8 +8,8 @@ "/chunks/admin-account~chunks/app-setup~chunks/billings-detail~chunks/create-new-password~chunks/datab~39825672.js": "/chunks/admin-account~chunks/app-setup~chunks/billings-detail~chunks/create-new-password~chunks/datab~39825672.js?id=66fa2c4863d93c8af4a8", "/chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/~3e4fdd8b.js": "/chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/~3e4fdd8b.js?id=1d731f1c4a9daecb2a99", "/chunks/admin~chunks/app-language~chunks/dashboard~chunks/files~chunks/invoices~chunks/my-shared-item~9b68162c.js": "/chunks/admin~chunks/app-language~chunks/dashboard~chunks/files~chunks/invoices~chunks/my-shared-item~9b68162c.js?id=5841d65172536a8a9bdc", - "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~673d1ac3.js": "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~673d1ac3.js?id=a99755060794dbdfba72", - "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~97130d1f.js": "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~97130d1f.js?id=0babe59e69f432ce0d03", + "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~673d1ac3.js": "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~673d1ac3.js?id=6085eaa6037408097b4a", + "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~97130d1f.js": "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~97130d1f.js?id=314e422e80bd946227c6", "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/shared~1bec6fe4.js": "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/shared~1bec6fe4.js?id=575db2908a16fbd98d57", "/chunks/admin~chunks/platform.js": "/chunks/admin~chunks/platform.js?id=90270d0c5aeb5c50dacf", "/chunks/admin~chunks/platform~chunks/settings.js": "/chunks/admin~chunks/platform~chunks/settings.js?id=2ceec639f8de0a9a9966", @@ -59,8 +59,8 @@ "/chunks/plan-settings.js": "/chunks/plan-settings.js?id=4b3d3d91faa908b876ac", "/chunks/plan-subscribers.js": "/chunks/plan-subscribers.js?id=b5017d712135057283c9", "/chunks/plans.js": "/chunks/plans.js?id=7c1b78c2301824c517ed", - "/chunks/platform.js": "/chunks/platform.js?id=984941e8fbad48c84c31", - "/chunks/platform~chunks/shared.js": "/chunks/platform~chunks/shared.js?id=6eab13949e690d85a716", + "/chunks/platform.js": "/chunks/platform.js?id=1b7f64fc2bc8a29a5252", + "/chunks/platform~chunks/shared.js": "/chunks/platform~chunks/shared.js?id=8848a34b4da18ab940a2", "/chunks/profile.js": "/chunks/profile.js?id=0638997b77c6f1246062", "/chunks/profile~chunks/settings-password.js": "/chunks/profile~chunks/settings-password.js?id=58edfb3a35062e1ba4e0", "/chunks/purchase-code.js": "/chunks/purchase-code.js?id=3f4199493a8b878c7ece", @@ -75,11 +75,11 @@ "/chunks/settings~chunks/settings-password.js": "/chunks/settings~chunks/settings-password.js?id=e67e12955133c57194d1", "/chunks/setup-wizard.js": "/chunks/setup-wizard.js?id=651d5accf401908724c5", "/chunks/shared.js": "/chunks/shared.js?id=4efec0aaa7842ff85c36", - "/chunks/shared-with-me.js": "/chunks/shared-with-me.js?id=53c87f0ad28672f3f2ad", + "/chunks/shared-with-me.js": "/chunks/shared-with-me.js?id=d83f0d713c1936ada2b0", "/chunks/shared/authenticate.js": "/chunks/shared/authenticate.js?id=ec0ed66a1216eb60bc6a", "/chunks/shared/files.js": "/chunks/shared/files.js?id=f7d29daa21fc7df5fb8d", "/chunks/shared/single-file.js": "/chunks/shared/single-file.js?id=1f5ef0d9638037a6e659", - "/chunks/sign-in.js": "/chunks/sign-in.js?id=6ecc2ce22a17468f5976", + "/chunks/sign-in.js": "/chunks/sign-in.js?id=a26cf4decf44433d7f18", "/chunks/sign-up.js": "/chunks/sign-up.js?id=a5d30a11ec0114bcde59", "/chunks/status-check.js": "/chunks/status-check.js?id=b6805d5f5f5035b64fc8", "/chunks/stripe-credentials.js": "/chunks/stripe-credentials.js?id=c3a3069f686efe261a66", @@ -755,5 +755,34 @@ "/chunks/platform.40ca1af0128c29ddba55.hot-update.js": "/chunks/platform.40ca1af0128c29ddba55.hot-update.js", "/js/main.78489affcd9a63dcff1b.hot-update.js": "/js/main.78489affcd9a63dcff1b.hot-update.js", "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~97130d1f.1ee38cce08f672b31e42.hot-update.js": "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~97130d1f.1ee38cce08f672b31e42.hot-update.js", - "/chunks/invitation.1ee38cce08f672b31e42.hot-update.js": "/chunks/invitation.1ee38cce08f672b31e42.hot-update.js" + "/chunks/invitation.1ee38cce08f672b31e42.hot-update.js": "/chunks/invitation.1ee38cce08f672b31e42.hot-update.js", + "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~673d1ac3.bbd458abdd5efc3a56e8.hot-update.js": "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~673d1ac3.bbd458abdd5efc3a56e8.hot-update.js", + "/chunks/platform~chunks/shared.43129c61052cb57ec184.hot-update.js": "/chunks/platform~chunks/shared.43129c61052cb57ec184.hot-update.js", + "/chunks/platform~chunks/shared.8beb4072a64988bc6530.hot-update.js": "/chunks/platform~chunks/shared.8beb4072a64988bc6530.hot-update.js", + "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~97130d1f.b3e8713a2cf4c8b7974d.hot-update.js": "/chunks/admin~chunks/files~chunks/my-shared-items~chunks/platform~chunks/recent-uploads~chunks/settin~97130d1f.b3e8713a2cf4c8b7974d.hot-update.js", + "/js/main.c1c1d1b94d7e90fa32c8.hot-update.js": "/js/main.c1c1d1b94d7e90fa32c8.hot-update.js", + "/chunks/platform~chunks/shared.3de7bf70620ab893da94.hot-update.js": "/chunks/platform~chunks/shared.3de7bf70620ab893da94.hot-update.js", + "/js/main.5acd2019c6af2556e808.hot-update.js": "/js/main.5acd2019c6af2556e808.hot-update.js", + "/js/main.23e68d28bb4f265d39ad.hot-update.js": "/js/main.23e68d28bb4f265d39ad.hot-update.js", + "/chunks/shared-with-me.23e68d28bb4f265d39ad.hot-update.js": "/chunks/shared-with-me.23e68d28bb4f265d39ad.hot-update.js", + "/js/main.1f91d6de692fb7faf623.hot-update.js": "/js/main.1f91d6de692fb7faf623.hot-update.js", + "/chunks/platform.1f91d6de692fb7faf623.hot-update.js": "/chunks/platform.1f91d6de692fb7faf623.hot-update.js", + "/chunks/shared-with-me.247c86fdc1f3906ed64a.hot-update.js": "/chunks/shared-with-me.247c86fdc1f3906ed64a.hot-update.js", + "/chunks/shared-with-me.66566c9328191989f4de.hot-update.js": "/chunks/shared-with-me.66566c9328191989f4de.hot-update.js", + "/chunks/shared-with-me.cff971b7817fa2fd0819.hot-update.js": "/chunks/shared-with-me.cff971b7817fa2fd0819.hot-update.js", + "/chunks/shared-with-me.d64deac303a2b994950c.hot-update.js": "/chunks/shared-with-me.d64deac303a2b994950c.hot-update.js", + "/chunks/shared-with-me.70c2ef513ff17452f2f6.hot-update.js": "/chunks/shared-with-me.70c2ef513ff17452f2f6.hot-update.js", + "/chunks/platform~chunks/shared.6d9d004e095a93cb71c7.hot-update.js": "/chunks/platform~chunks/shared.6d9d004e095a93cb71c7.hot-update.js", + "/chunks/shared-with-me.b2fab8244cd334de1259.hot-update.js": "/chunks/shared-with-me.b2fab8244cd334de1259.hot-update.js", + "/js/main.99290ad8c825c32311f3.hot-update.js": "/js/main.99290ad8c825c32311f3.hot-update.js", + "/chunks/shared-with-me.ad44a5ef58d84c6cf522.hot-update.js": "/chunks/shared-with-me.ad44a5ef58d84c6cf522.hot-update.js", + "/chunks/shared-with-me.6973baa7013598a61155.hot-update.js": "/chunks/shared-with-me.6973baa7013598a61155.hot-update.js", + "/chunks/shared-with-me.2558a81e50a5fa0eadcd.hot-update.js": "/chunks/shared-with-me.2558a81e50a5fa0eadcd.hot-update.js", + "/chunks/shared-with-me.77d5a2f61c95dc901b02.hot-update.js": "/chunks/shared-with-me.77d5a2f61c95dc901b02.hot-update.js", + "/chunks/shared-with-me.40d3ead66da6931beb9b.hot-update.js": "/chunks/shared-with-me.40d3ead66da6931beb9b.hot-update.js", + "/chunks/sign-in.56b746c1fdb0a0688a72.hot-update.js": "/chunks/sign-in.56b746c1fdb0a0688a72.hot-update.js", + "/chunks/sign-in.fbddb013e9e1e82ab1cf.hot-update.js": "/chunks/sign-in.fbddb013e9e1e82ab1cf.hot-update.js", + "/chunks/sign-in.e4e7a0db85a46a67fff5.hot-update.js": "/chunks/sign-in.e4e7a0db85a46a67fff5.hot-update.js", + "/chunks/sign-in.2b90fded6e62db75027b.hot-update.js": "/chunks/sign-in.2b90fded6e62db75027b.hot-update.js", + "/chunks/sign-in.1c6cafebef4f2cadf32b.hot-update.js": "/chunks/sign-in.1c6cafebef4f2cadf32b.hot-update.js" } diff --git a/resources/js/components/FilesView/DesktopToolbar.vue b/resources/js/components/FilesView/DesktopToolbar.vue index 431ef367..ecc877e9 100644 --- a/resources/js/components/FilesView/DesktopToolbar.vue +++ b/resources/js/components/FilesView/DesktopToolbar.vue @@ -61,10 +61,15 @@ + + + + diff --git a/resources/js/components/FilesView/FolderIcon.vue b/resources/js/components/FilesView/FolderIcon.vue index 8d0532d1..d658a03a 100644 --- a/resources/js/components/FilesView/FolderIcon.vue +++ b/resources/js/components/FilesView/FolderIcon.vue @@ -16,12 +16,6 @@ :style="{fill: color}" style="width: 53px; height: 52px" /> - diff --git a/resources/js/components/FilesView/Option.vue b/resources/js/components/FilesView/Option.vue index d8399723..63fa51dd 100644 --- a/resources/js/components/FilesView/Option.vue +++ b/resources/js/components/FilesView/Option.vue @@ -23,6 +23,7 @@ + @@ -50,6 +51,7 @@ diff --git a/resources/js/views/FileView/SharedWithMe.vue b/resources/js/views/FileView/SharedWithMe.vue index d4d3f33a..f96b7bac 100644 --- a/resources/js/views/FileView/SharedWithMe.vue +++ b/resources/js/views/FileView/SharedWithMe.vue @@ -191,6 +191,22 @@ events.$on('context-menu:show', (event, item) => this.item = item) events.$on('mobile-context-menu:show', item => this.item = item) events.$on('context-menu:current-folder', folder => this.item = folder) + + events.$on('action:confirmed', data => { + + // Leave team folder after popup confirmation + if (data.operation === 'leave-team-folder') + axios.delete(`/api/teams/folders/${data.id}/leave`) + .then(() => { + this.$router.push({name: 'SharedWithMe'}) + + events.$emit('toaster', { + type: 'success', + message: this.$t('You have successfully left the team folder'), + }) + }) + .catch(() => this.$isSomethingWrong()) + }) } } diff --git a/routes/teams.php b/routes/teams.php index 5b599074..660f7464 100644 --- a/routes/teams.php +++ b/routes/teams.php @@ -1,6 +1,7 @@ ['auth:sanctum']], function () { Route::apiResource('/folders', TeamFoldersController::class); - Route::post('/convert/{folder}', ConvertFolderIntoTeamFolderController::class); - Route::get('/shared-with-me/{id}', BrowseSharedWithMeController::class); + Route::post('/folders/{folder}/convert', ConvertFolderIntoTeamFolderController::class); + Route::delete('/folders/{folder}/leave', LeaveTeamFolderController::class); + Route::get('/folders/{folder}/tree', NavigationTreeController::class); - Route::get('/tree/{id}', NavigationTreeController::class); + Route::get('/shared-with-me/{id}', BrowseSharedWithMeController::class); }); diff --git a/src/App/Console/Commands/SetupDevEnvironment.php b/src/App/Console/Commands/SetupDevEnvironment.php index 3f54d5a6..b845c256 100644 --- a/src/App/Console/Commands/SetupDevEnvironment.php +++ b/src/App/Console/Commands/SetupDevEnvironment.php @@ -132,7 +132,7 @@ class SetupDevEnvironment extends Command ], [ 'avatar' => 'avatar-03.png', - 'email' => $this->faker->email, + 'email' => 'johan@hi5ve.digital', ], [ 'avatar' => 'avatar-04.png', @@ -805,6 +805,9 @@ class SetupDevEnvironment extends Command $owner = User::whereEmail('alice@hi5ve.digital') ->first(); + $johan = User::whereEmail('johan@hi5ve.digital') + ->first(); + $folder = Folder::factory() ->create([ 'user_id' => $owner->id, @@ -828,25 +831,29 @@ class SetupDevEnvironment extends Command DB::table('team_folder_members') ->insert([ - 'parent_id' => $folder->id, - 'user_id' => $member->id, - 'permission' => 'can-edit', - ]); - - DB::table('team_folder_members') - ->insert([ - 'parent_id' => $folder->id, - 'user_id' => $owner->id, - 'permission' => 'owner', + [ + 'parent_id' => $folder->id, + 'user_id' => $member->id, + 'permission' => 'can-edit', + ], + [ + 'parent_id' => $folder->id, + 'user_id' => $owner->id, + 'permission' => 'owner', + ], + [ + 'parent_id' => $folder->id, + 'user_id' => $johan->id, + 'permission' => 'owner', + ] ]); // Get meme gallery collect([ 'Sofishticated.jpg', 'whaaaaat.jpg', - 'You Are My Sunshine.jpg', ]) - ->each(function ($file) use ($owner, $memes) { + ->each(function ($file) use ($owner, $folder) { $basename = Str::random(12) . '-' . $file; // Copy file into app storage @@ -855,7 +862,7 @@ class SetupDevEnvironment extends Command // Create file record File::create([ - 'parent_id' => $memes->id, + 'parent_id' => $folder->id, 'user_id' => $owner->id, 'name' => $file, 'basename' => $basename, @@ -867,6 +874,34 @@ class SetupDevEnvironment extends Command 'created_at' => now()->subMinutes(rand(1, 5)), ]); }); + + // Get meme gallery + collect([ + 'You Are My Sunshine.jpg', + ]) + ->each(function ($file) use ($johan, $folder) { + $basename = Str::random(12) . '-' . $file; + + // Copy file into app storage + Storage::putFileAs("files/$johan->id", storage_path("demo/images/memes/$file"), $basename, 'private'); + Storage::putFileAs("files/$johan->id", storage_path("demo/images/memes/thumbnail-$file"), "thumbnail-$basename", 'private'); + + // Create file record + File::create([ + 'parent_id' => $folder->id, + 'user_id' => $johan->id, + 'name' => $file, + 'basename' => $basename, + 'type' => 'image', + 'author' => 'user', + 'mimetype' => 'jpg', + 'filesize' => rand(1000000, 4000000), + 'thumbnail' => "thumbnail-$basename", + 'created_at' => now()->subMinutes(rand(1, 5)), + ]); + }); + + collect([ 'Eggcited bro.jpg', 'Get a Rest.jpg', diff --git a/src/Domain/Teams/Controllers/BrowseSharedWithMeController.php b/src/Domain/Teams/Controllers/BrowseSharedWithMeController.php index 68c537b4..103dba19 100644 --- a/src/Domain/Teams/Controllers/BrowseSharedWithMeController.php +++ b/src/Domain/Teams/Controllers/BrowseSharedWithMeController.php @@ -5,6 +5,7 @@ namespace Domain\Teams\Controllers; use Domain\Files\Resources\FilesCollection; use Domain\Folders\Resources\FolderCollection; use Domain\Folders\Resources\FolderResource; +use Gate; use Str; use Domain\Files\Models\File; use Domain\Folders\Models\Folder; @@ -18,6 +19,12 @@ class BrowseSharedWithMeController $id = Str::isUuid($id) ? $id : null; if ($id) { + $teamFolder = Folder::findOrFail($id)->getLatestParent(); + + if (! Gate::any(['can-edit', 'can-view'], [$teamFolder, null])) { + abort(403, 'Access Denied'); + } + $folders = Folder::with(['parent:id,name']) ->where('parent_id', $id) ->sortable() @@ -44,7 +51,7 @@ class BrowseSharedWithMeController 'root' => $id ? new FolderResource(Folder::findOrFail($id)) : null, 'folders' => new FolderCollection($folders), 'files' => isset($files) ? new FilesCollection($files) : new FilesCollection([]), - 'teamFolder' => $id ? new FolderResource(Folder::findOrFail($id)->getLatestParent()) : null, + 'teamFolder' => $id ? new FolderResource($teamFolder) : null, ]; } } diff --git a/src/Domain/Teams/Controllers/LeaveTeamFolderController.php b/src/Domain/Teams/Controllers/LeaveTeamFolderController.php new file mode 100644 index 00000000..f84d1162 --- /dev/null +++ b/src/Domain/Teams/Controllers/LeaveTeamFolderController.php @@ -0,0 +1,25 @@ +where('parent_id', $folder->id) + ->where('user_id', Auth::id()) + ->delete(); + + return response('Done.', 204); + } +} \ No newline at end of file diff --git a/src/Domain/Teams/Controllers/NavigationTreeController.php b/src/Domain/Teams/Controllers/NavigationTreeController.php index 7b940058..4181192a 100644 --- a/src/Domain/Teams/Controllers/NavigationTreeController.php +++ b/src/Domain/Teams/Controllers/NavigationTreeController.php @@ -6,9 +6,9 @@ use Gate; class NavigationTreeController { - public function __invoke(string $id): array + public function __invoke(Folder $folder): array { - $teamFolder = Folder::findOrFail($id)->getLatestParent(); + $teamFolder = $folder->getLatestParent(); if (! Gate::any(['can-edit', 'can-view'], [$teamFolder, null])) { abort(403, 'Access Denied'); diff --git a/tests/Domain/Teams/TeamManagementTest.php b/tests/Domain/Teams/TeamManagementTest.php index a5903cad..2587c1cc 100644 --- a/tests/Domain/Teams/TeamManagementTest.php +++ b/tests/Domain/Teams/TeamManagementTest.php @@ -45,7 +45,7 @@ class TeamManagementTest extends TestCase */ public function it_accept_team_folder_invite() { - $member = User::factory(User::class) + $member = User::factory() ->create([ 'email' => 'john@internal.com', ]); @@ -96,7 +96,7 @@ class TeamManagementTest extends TestCase */ public function it_reject_team_folder_invite() { - $member = User::factory(User::class) + $member = User::factory() ->create([ 'email' => 'john@internal.com', ]); @@ -133,10 +133,10 @@ class TeamManagementTest extends TestCase */ public function it_invite_member_into_team_folder() { - $user = User::factory(User::class) + $user = User::factory() ->create(); - $members = User::factory(User::class) + $members = User::factory() ->count(2) ->create(); @@ -212,10 +212,10 @@ class TeamManagementTest extends TestCase */ public function it_delete_invited_member_from_team_folder() { - $user = User::factory(User::class) + $user = User::factory() ->create(); - $members = User::factory(User::class) + $members = User::factory() ->count(2) ->create(); @@ -291,10 +291,10 @@ class TeamManagementTest extends TestCase */ public function it_remove_member_from_team_folder() { - $user = User::factory(User::class) + $user = User::factory() ->create(); - $members = User::factory(User::class) + $members = User::factory() ->count(2) ->create(); @@ -343,7 +343,7 @@ class TeamManagementTest extends TestCase */ public function it_update_invited_member_permission_in_team_folder() { - $user = User::factory(User::class) + $user = User::factory() ->create(); $folder = Folder::factory() @@ -390,10 +390,10 @@ class TeamManagementTest extends TestCase */ public function it_update_member_permission_in_team_folder() { - $user = User::factory(User::class) + $user = User::factory() ->create(); - $members = User::factory(User::class) + $members = User::factory() ->count(2) ->create(); @@ -445,10 +445,10 @@ class TeamManagementTest extends TestCase */ public function member_try_update_permission_in_team_folder() { - $user = User::factory(User::class) + $user = User::factory() ->create(); - $members = User::factory(User::class) + $members = User::factory() ->count(2) ->create(); @@ -502,10 +502,10 @@ class TeamManagementTest extends TestCase */ public function it_dissolve_team_folder() { - $user = User::factory(User::class) + $user = User::factory() ->create(); - $members = User::factory(User::class) + $members = User::factory() ->count(2) ->create(); @@ -549,12 +549,51 @@ class TeamManagementTest extends TestCase /** * @test */ - public function member_try_dissolve_team_folder() + public function it_leave_team_folder() { - $user = User::factory(User::class) + $user = User::factory() ->create(); - $members = User::factory(User::class) + $member = User::factory() + ->create(); + + $folder = Folder::factory() + ->create([ + 'user_id' => $user->id, + 'team_folder' => 1, + ]); + + DB::table('team_folder_members') + ->insert([ + [ + 'parent_id' => $folder->id, + 'user_id' => $member->id, + 'permission' => 'can-edit', + ], + ]); + + $this + ->actingAs($member) + ->deleteJson("/api/teams/folders/{$folder->id}/leave") + ->assertNoContent(); + + $this + ->assertDatabaseMissing('team_folder_members', [ + 'parent_id' => $folder->id, + 'user_id' => $member->id, + 'permission' => 'can-edit', + ]); + } + + /** + * @test + */ + public function member_try_dissolve_team_folder() + { + $user = User::factory() + ->create(); + + $members = User::factory() ->count(2) ->create(); diff --git a/tests/Domain/Teams/TeamsTest.php b/tests/Domain/Teams/TeamsTest.php index 010f423e..2e25044b 100644 --- a/tests/Domain/Teams/TeamsTest.php +++ b/tests/Domain/Teams/TeamsTest.php @@ -100,7 +100,7 @@ class TeamsTest extends TestCase $this ->actingAs($user) - ->post("/api/teams/convert/{$folder->id}", [ + ->post("/api/teams/folders/{$folder->id}/convert", [ 'invitations' => [ [ 'email' => 'john@internal.com',