mirror of
https://github.com/10h30/Test-Laravel-File-Upload.git
synced 2026-06-05 15:07:47 +09:00
Task 3 - update and delete old file
This commit is contained in:
@@ -40,3 +40,11 @@ In `app/Http/Controllers/ProjectController.php` file, in the `store()` method, p
|
||||
Test method `test_file_size_validation()`.
|
||||
|
||||
---
|
||||
|
||||
## Task 3. Update: Delete Old File
|
||||
|
||||
In `app/Http/Controllers/HouseController.php` file, in the `update()` method, we upload the new file but don't delete the old one. Help to clean up the disk and delete the old file.
|
||||
|
||||
Test method `test_update_file_remove_old_one()`.
|
||||
|
||||
---
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\House;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
|
||||
class HouseController extends Controller
|
||||
{
|
||||
public function store(Request $request)
|
||||
{
|
||||
$filename = $request->file('photo')->store('houses');
|
||||
|
||||
House::create([
|
||||
'name' => $request->name,
|
||||
'photo' => $filename,
|
||||
]);
|
||||
|
||||
return 'Success';
|
||||
}
|
||||
|
||||
public function update(Request $request, House $house)
|
||||
{
|
||||
$filename = $request->file('photo')->store('houses');
|
||||
|
||||
// TASK: Delete the old file from the storage
|
||||
|
||||
$house->update([
|
||||
'name' => $request->name,
|
||||
'photo' => $filename,
|
||||
]);
|
||||
|
||||
return 'Success';
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class House extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
|
||||
protected $fillable = ['name', 'photo'];
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateHousesTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create('houses', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('name');
|
||||
$table->string('photo');
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists('houses');
|
||||
}
|
||||
}
|
||||
@@ -18,3 +18,4 @@ Route::get('/', function () {
|
||||
});
|
||||
|
||||
Route::post('projects', [\App\Http\Controllers\ProjectController::class, 'store']);
|
||||
Route::resource('houses', \App\Http\Controllers\HouseController::class);
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace Tests\Feature;
|
||||
|
||||
use App\Models\House;
|
||||
use App\Models\Project;
|
||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||
use Illuminate\Http\UploadedFile;
|
||||
@@ -14,7 +15,6 @@ class FileUploadTest extends TestCase
|
||||
|
||||
public function test_original_filename_upload()
|
||||
{
|
||||
Storage::fake('logos');
|
||||
$filename = 'logo.jpg';
|
||||
|
||||
$response = $this->post('projects', [
|
||||
@@ -31,8 +31,6 @@ class FileUploadTest extends TestCase
|
||||
|
||||
public function test_file_size_validation()
|
||||
{
|
||||
Storage::fake('logos');
|
||||
|
||||
$response = $this->post('projects', [
|
||||
'name' => 'Some name',
|
||||
'logo' => UploadedFile::fake()->create('logo.jpg', 2000)
|
||||
@@ -45,4 +43,22 @@ class FileUploadTest extends TestCase
|
||||
]);
|
||||
$response->assertValid();
|
||||
}
|
||||
|
||||
public function test_update_file_remove_old_one()
|
||||
{
|
||||
$response = $this->post('houses', [
|
||||
'name' => 'Some name',
|
||||
'photo' => UploadedFile::fake()->image('photo.jpg')
|
||||
]);
|
||||
$response->assertStatus(200);
|
||||
$house = House::first();
|
||||
$this->assertTrue(Storage::exists($house->photo));
|
||||
|
||||
$response = $this->put('houses/1', [
|
||||
'name' => 'Some name',
|
||||
'photo' => UploadedFile::fake()->image('photo2.jpg')
|
||||
]);
|
||||
$response->assertStatus(200);
|
||||
$this->assertFalse(Storage::exists($house->photo));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user