Transfer Content Ownership To Team Folder Owner after member was deleted by author of team folder

This commit is contained in:
Čarodej
2021-11-05 07:01:44 +01:00
parent 02582f2ae3
commit 8b5e5fecfb
3 changed files with 39 additions and 8 deletions

View File

@@ -10,11 +10,11 @@ use Domain\Teams\Controllers\ConvertFolderIntoTeamFolderController;
Route::apiResource('/invitations', InvitationsController::class);
Route::group(['middleware' => ['auth:sanctum']], function () {
Route::get('/shared-with-me/{id}', BrowseSharedWithMeController::class);
Route::apiResource('/folders', TeamFoldersController::class);
Route::post('/folders/{folder}/convert', ConvertFolderIntoTeamFolderController::class);
Route::delete('/folders/{folder}/leave', LeaveTeamFolderController::class);
Route::get('/folders/{folder}/tree', NavigationTreeController::class);
Route::get('/shared-with-me/{id}', BrowseSharedWithMeController::class);
});

View File

@@ -6,7 +6,10 @@ use Domain\Folders\Models\Folder;
class UpdateMembersAction
{
// TODO: after removing user from team folder from administrator, set file owner
public function __construct(
public TransferContentOwnershipToTeamFolderOwnerAction $transferContentOwnership,
) {}
public function __invoke(Folder $folder, $members): void
{
$existingMembers = $folder
@@ -24,6 +27,9 @@ class UpdateMembersAction
->where('parent_id', $folder->id)
->whereIn('user_id', $deletedMembers->toArray())
->delete();
// Transfer files/folders ownership to team folder owner
$deletedMembers->each(fn ($memberId) => ($this->transferContentOwnership)($folder, $memberId));
}
// Update privileges

View File

@@ -296,8 +296,10 @@ class TeamManagementTest extends TestCase
$user = User::factory()
->create();
$members = User::factory()
->count(2)
$member = User::factory()
->create();
$deletedMember = User::factory()
->create();
$folder = Folder::factory()
@@ -306,26 +308,45 @@ class TeamManagementTest extends TestCase
'team_folder' => 1,
]);
// Create fake file record
File::factory()
->create([
'name' => 'Member File',
'basename' => 'fake-file.zip',
'parent_id' => $folder->id,
'user_id' => $deletedMember->id,
'type' => 'file',
]);
// Create fake file
$fakeFile = UploadedFile::fake()
->create('fake-file.zip', 2000, 'application/zip');
// Put fake file into correct directory
Storage::putFileAs("files/{$deletedMember->id}", $fakeFile, 'fake-file.zip');
// Attach members to the team folder
DB::table('team_folder_members')
->insert([
[
'parent_id' => $folder->id,
'user_id' => $members[0]->id,
'user_id' => $member->id,
'permission' => 'can-edit',
],
[
'parent_id' => $folder->id,
'user_id' => $members[1]->id,
'user_id' => $deletedMember->id,
'permission' => 'can-edit',
],
]);
// Update team folder members
$this
->actingAs($user)
->patchJson("/api/teams/folders/{$folder->id}", [
'members' => [
[
'id' => $members[0]->id,
'id' => $member->id,
'permission' => 'can-edit',
],
],
@@ -333,10 +354,14 @@ class TeamManagementTest extends TestCase
])
->assertCreated();
// Check if file was moved from member directory to owner directory
Storage::assertMissing("files/{$deletedMember->id}/fake-file.zip");
Storage::assertExists("files/{$user->id}/fake-file.zip");
$this
->assertDatabaseCount('team_folder_members', 1)
->assertDatabaseMissing('team_folder_members', [
'user_id' => $members[1]->id,
'user_id' => $deletedMember->id,
]);
}