added it_zip_folder_with_content_within_and_download test

This commit is contained in:
Peter Papp
2021-03-02 16:43:32 +01:00
parent 4ab716bf9c
commit 33d6d1cd60
5 changed files with 71 additions and 27 deletions
@@ -333,7 +333,7 @@ class EditItemsController extends Controller
* @param $id * @param $id
* @return string * @return string
*/ */
public function user_zip_folder(Request $request,$id) public function user_zip_folder(Request $request, $id)
{ {
// Get user id // Get user id
$user_id = Auth::id(); $user_id = Auth::id();
@@ -365,7 +365,7 @@ class EditItemsController extends Controller
return response([ return response([
'url' => route('zip', $zip->id), 'url' => route('zip', $zip->id),
'name' => $zip->basename, 'name' => $zip->basename,
], 200); ], 201);
} }
/** /**
+19 -16
View File
@@ -66,16 +66,16 @@ class Editor
/** /**
* Zip requested folder * Zip requested folder
* *
* @param $unique_id * @param $id
* @param $shared * @param $shared
* @return mixed * @return mixed
* @throws \Illuminate\Contracts\Filesystem\FileNotFoundException * @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
*/ */
public static function zip_folder($unique_id, $shared = null) public static function zip_folder($id, $shared = null)
{ {
// Get folder // Get folder
$requested_folder = Folder::with(['folders.files', 'files']) $requested_folder = Folder::with(['folders.files', 'files'])
->where('unique_id', $unique_id) ->where('id', $id)
->where('user_id', Auth::id() ?? $shared->user_id) ->where('user_id', Auth::id() ?? $shared->user_id)
->with('folders') ->with('folders')
->first(); ->first();
@@ -85,31 +85,34 @@ class Editor
// Local storage instance // Local storage instance
$disk_local = Storage::disk('local'); $disk_local = Storage::disk('local');
// Move file to local storage // Move file to local storage from external storage service
if (!is_storage_driver('local')) { if (!is_storage_driver('local')) {
$files->each(function ($file) use ($disk_local) {
foreach ($files as $file) {
try { try {
$disk_local->put('temp/' . $file['basename'], Storage::get('files/' . $file['basename'])); $disk_local->put("temp/$file->basename", Storage::get("files/$file->user_id/$file->basename"));
} catch (FileNotFoundException $e) { } catch (FileNotFoundException $e) {
throw new HttpException(404, 'File not found'); throw new HttpException(404, 'File not found');
} }
} });
} }
// Get zip path // Get zip path
$zip_name = Str::random(16) . '-' . Str::slug($requested_folder->name) . '.zip'; $zip_name = Str::random(16) . '-' . Str::slug($requested_folder->name) . '.zip';
$zip_path = 'zip/' . $zip_name;
// Create zip // Create zip
$zip = Madzipper::make(storage_path() . '/app/' . $zip_path); $zip = Madzipper::make($disk_local->path("zip/$zip_name"));
// Get files folder on local storage drive // Get files folder on local storage drive
$files_folder = is_storage_driver('local') ? 'file-manager' : 'temp'; $directory = is_storage_driver('local') ? 'files' : 'temp';
// Add files to zip // Add files to zip
foreach ($files as $file) { foreach ($files as $file) {
$zip->folder($file['folder_path'])->addString($file['name'], File::get(storage_path() . '/app/' . $files_folder . '/' . $file['basename'])); $zip
->folder($file['folder_path'])
->addString(
$file['name'],
File::get($disk_local->path("/$directory/$requested_folder->user_id/{$file['basename']}"))
);
} }
// Close zip // Close zip
@@ -224,18 +227,18 @@ class Editor
* Rename item name * Rename item name
* *
* @param RenameItemRequest $request * @param RenameItemRequest $request
* @param $unique_id * @param $id
* @param null $shared * @param null $shared
* @return \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model * @return \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Model
* @throws \Exception * @throws \Exception
*/ */
public static function rename_item($request, $unique_id, $shared = null) public static function rename_item($request, $id, $shared = null)
{ {
// Get user id // Get user id
$user_id = is_null($shared) ? Auth::id() : $shared->user_id; $user_id = is_null($shared) ? Auth::id() : $shared->user_id;
// Get item // Get item
$item = get_item($request->type, $unique_id, $user_id); $item = get_item($request->type, $id, $user_id);
// Rename item // Rename item
$item->update([ $item->update([
@@ -280,7 +283,7 @@ class Editor
->delete(); ->delete();
// Soft delete items // Soft delete items
if (! $item['force_delete']) { if (!$item['force_delete']) {
// Soft delete folder record // Soft delete folder record
$folder->delete(); $folder->delete();
+5 -2
View File
@@ -94,11 +94,14 @@ Route::group(['middleware' => ['auth:sanctum']], function () {
Route::patch('/rename/{id}', [EditItemsController::class, 'user_rename_item']); Route::patch('/rename/{id}', [EditItemsController::class, 'user_rename_item']);
Route::post('/create-folder', [EditItemsController::class, 'user_create_folder']); Route::post('/create-folder', [EditItemsController::class, 'user_create_folder']);
Route::post('/remove', [EditItemsController::class, 'user_delete_item']); Route::post('/remove', [EditItemsController::class, 'user_delete_item']);
Route::post('/zip', [EditItemsController::class, 'user_zip_multiple_files']);
Route::get('/zip-folder/{unique_id}', [EditItemsController::class, 'user_zip_folder']);
Route::post('/upload', [EditItemsController::class, 'user_upload']); Route::post('/upload', [EditItemsController::class, 'user_upload']);
Route::post('/move', [EditItemsController::class, 'user_move']); Route::post('/move', [EditItemsController::class, 'user_move']);
Route::group(['prefix' => 'zip'], function () {
Route::post('/files', [EditItemsController::class, 'user_zip_multiple_files']);
Route::get('/folder/{unique_id}', [EditItemsController::class, 'user_zip_folder']);
});
//Get Emojis List //Get Emojis List
Route::get('/emojis-list', [AppFunctionsController::class, 'get_emojis_list']); Route::get('/emojis-list', [AppFunctionsController::class, 'get_emojis_list']);
}); });
+3 -6
View File
@@ -257,14 +257,11 @@ class FileTest extends TestCase
])->assertStatus(204); ])->assertStatus(204);
$file_ids $file_ids
->each(function ($id) { ->each(function ($id, $index) use ($user) {
$this->assertDatabaseMissing('files', [ $this->assertDatabaseMissing('files', [
'id' => $id, 'id' => $id,
]); ]);
});
collect([0, 1])
->each(function ($index) use ($user) {
Storage::disk('local') Storage::disk('local')
->assertMissing( ->assertMissing(
@@ -302,7 +299,7 @@ class FileTest extends TestCase
$file_ids = File::all()->pluck('id'); $file_ids = File::all()->pluck('id');
$this->postJson("/api/zip", [ $this->postJson("/api/zip/files", [
'items' => $file_ids, 'items' => $file_ids,
])->assertStatus(201); ])->assertStatus(201);
+42 -1
View File
@@ -5,6 +5,7 @@ namespace Tests\Feature;
use App\Models\File; use App\Models\File;
use App\Models\Folder; use App\Models\Folder;
use App\Models\User; use App\Models\User;
use App\Models\Zip;
use App\Services\SetupService; use App\Services\SetupService;
use Illuminate\Foundation\Testing\DatabaseMigrations; use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Http\UploadedFile; use Illuminate\Http\UploadedFile;
@@ -456,8 +457,48 @@ class FolderTest extends TestCase
}); });
} }
public function it_zip_and_download_folder_with_content_within() /**
* @test
*/
public function it_zip_folder_with_content_within_and_download()
{ {
Storage::fake('local');
$this->setup->create_directories();
$user = User::factory(User::class)
->create();
Sanctum::actingAs($user);
$folder = Folder::factory(Folder::class)
->create([
'user_id' => $user->id
]);
collect([0, 1])
->each(function ($index) use ($folder) {
$file = UploadedFile::fake()
->create("fake-file-$index.pdf", 1200, 'application/pdf');
$this->postJson('/api/upload', [
'file' => $file,
'folder_id' => $folder->id,
'is_last' => true,
])->assertStatus(201);
});
$this->getJson("/api/zip/folder/$folder->id")
->assertStatus(201);
$this->assertDatabaseHas('zips', [
'user_id' => $user->id
]);
Storage::disk('local')
->assertExists(
'zip/' . Zip::first()->basename
);
} }
} }