diff --git a/database/factories/FolderFactory.php b/database/factories/FolderFactory.php index bd634b99..41e849b8 100644 --- a/database/factories/FolderFactory.php +++ b/database/factories/FolderFactory.php @@ -1,4 +1,5 @@ $this->faker->uuid, - 'user_id' => $this->faker->uuid, - 'name' => $this->faker->word, - 'author' => $this->faker->randomElement( + 'id' => $this->faker->uuid, + 'user_id' => $this->faker->uuid, + 'name' => $this->faker->word, + 'team_folder' => $this->faker->boolean(), + 'author' => $this->faker->randomElement( ['user', 'member', 'visitor'] ), - 'created_at' => $this->faker->dateTimeBetween( + 'created_at' => $this->faker->dateTimeBetween( $startDate = '-36 months', $endDate = 'now', $timezone = null diff --git a/routes/teams.php b/routes/teams.php index 78f0b87f..1d98b7f7 100644 --- a/routes/teams.php +++ b/routes/teams.php @@ -8,5 +8,5 @@ use Domain\Teams\Controllers\TeamFoldersController; Route::apiResource('/invitations', InvitationsController::class) ->only('destroy', 'update'); -Route::post('/team-folders/convert/{folder}', ConvertFolderIntoTeamFolderController::class); -Route::apiResource('/team-folders', TeamFoldersController::class); +Route::post('/folders/convert/{folder}', ConvertFolderIntoTeamFolderController::class); +Route::apiResource('/folders', TeamFoldersController::class); diff --git a/src/Domain/Teams/Controllers/TeamFoldersController.php b/src/Domain/Teams/Controllers/TeamFoldersController.php index 77721eae..4514a1c4 100644 --- a/src/Domain/Teams/Controllers/TeamFoldersController.php +++ b/src/Domain/Teams/Controllers/TeamFoldersController.php @@ -2,6 +2,7 @@ namespace Domain\Teams\Controllers; +use DB; use Domain\Teams\Actions\InviteMembersIntoTeamFolderAction; use Illuminate\Http\Request; use Illuminate\Http\Response; @@ -31,4 +32,17 @@ class TeamFoldersController extends Controller return response($folder, 201); } + + public function destroy(Folder $folder): Response + { + $folder->update([ + 'team_folder' => 0, + ]); + + DB::table('team_folder_members') + ->where('folder_id', $folder->id) + ->delete(); + + return response('Done.', 204); + } } diff --git a/tests/Domain/Teams/TeamsTest.php b/tests/Domain/Teams/TeamsTest.php index 105259d1..72c9dfeb 100644 --- a/tests/Domain/Teams/TeamsTest.php +++ b/tests/Domain/Teams/TeamsTest.php @@ -4,6 +4,7 @@ namespace Tests\Domain\Teams; use Domain\Folders\Models\Folder; use Domain\Teams\Models\TeamFoldersInvitation; +use Illuminate\Support\Facades\DB; use Notification; use Tests\TestCase; use App\Users\Models\User; @@ -26,7 +27,7 @@ class TeamsTest extends TestCase $this ->actingAs($user) - ->post('/api/teams/team-folders', [ + ->post('/api/teams/folders', [ 'name' => 'Company Project', 'members' => [ [ @@ -74,7 +75,7 @@ class TeamsTest extends TestCase $this ->actingAs($user) - ->post("/api/teams/team-folders/convert/{$folder->id}", [ + ->post("/api/teams/folders/convert/{$folder->id}", [ 'members' => [ [ 'email' => 'john@internal.com', @@ -189,10 +190,43 @@ class TeamsTest extends TestCase } /** - * + * @test */ public function it_dissolve_team_folder() { + $user = User::factory(User::class) + ->create(); + + $members = User::factory(User::class) + ->count(2) + ->create(); + + $folder = Folder::factory() + ->create([ + 'user_id' => $user->id, + 'team_folder' => 1, + ]); + + DB::table('team_folder_members') + ->insert([ + [ + 'folder_id' => $folder->id, + 'member_id' => $members[0]->id, + 'permission' => 'can-edit', + ], + [ + 'folder_id' => $folder->id, + 'member_id' => $members[1]->id, + 'permission' => 'can-edit', + ], + ]); + + $this + ->actingAs($user) + ->deleteJson("/api/teams/folders/{$folder->id}") + ->assertNoContent(); + + $this->assertDatabaseCount('team_folder_members', 0); } /**