diff --git a/app/Entities/Projects/File.php b/app/Entities/Projects/File.php index b2ed936..90e62a7 100644 --- a/app/Entities/Projects/File.php +++ b/app/Entities/Projects/File.php @@ -2,6 +2,7 @@ namespace App\Entities\Projects; +use Storage; use Illuminate\Database\Eloquent\Model; class File extends Model @@ -37,4 +38,11 @@ class File extends Model { return \Storage::exists('public/files/'.$this->filename); } + + public function delete() + { + Storage::delete('public/files/'.$this->filename); + + return parent::delete(); + } } diff --git a/app/Entities/Projects/Project.php b/app/Entities/Projects/Project.php index d2ed10c..1607f58 100755 --- a/app/Entities/Projects/Project.php +++ b/app/Entities/Projects/Project.php @@ -255,6 +255,7 @@ class Project extends Model { DB::beginTransaction(); $this->jobs->each->delete(); + $this->files->each->delete(); $this->invoices()->delete(); $this->payments()->delete(); $this->subscriptions()->delete(); diff --git a/app/Http/Controllers/Projects/FilesController.php b/app/Http/Controllers/Projects/FilesController.php index 12f3baa..9779c51 100644 --- a/app/Http/Controllers/Projects/FilesController.php +++ b/app/Http/Controllers/Projects/FilesController.php @@ -2,7 +2,6 @@ namespace App\Http\Controllers\Projects; -use Storage; use File as FileSystem; use Illuminate\Http\Request; use App\Entities\Projects\File; @@ -93,9 +92,7 @@ class FilesController extends Controller public function destroy(Request $request, File $file) { - Storage::delete('public/files/'.$file->filename); $file->delete(); - flash(__('file.deleted'), 'warning'); return redirect()->route($file->fileable_type.'.files', $file->fileable_id); diff --git a/tests/Unit/Models/ProjectTest.php b/tests/Unit/Models/ProjectTest.php index c8233e2..ff9a2f7 100644 --- a/tests/Unit/Models/ProjectTest.php +++ b/tests/Unit/Models/ProjectTest.php @@ -4,6 +4,7 @@ namespace Tests\Unit\Models; use Tests\TestCase; use App\Entities\Projects\Job; +use App\Entities\Projects\File; use App\Entities\Projects\Task; use App\Entities\Invoices\Invoice; use App\Entities\Payments\Payment; @@ -223,10 +224,30 @@ class ProjectTest extends TestCase public function a_project_has_many_files() { $project = factory(Project::class)->create(); + $this->assertInstanceOf(Collection::class, $project->files); } /** @test */ + public function project_deletion_also_deletes_related_files() + { + $project = factory(Project::class)->create(); + $file = File::create([ + 'fileable_id' => $project->id, + 'fileable_type' => 'projects', + 'filename' => 'filename.jpg', + 'title' => 'filename.jpg', + ]); + + $project->delete(); + + $this->dontSeeInDatabase('files', [ + 'fileable_id' => $project->id, + 'fileable_type' => 'projects', + ]); + } + + /** @test */ public function a_project_has_collectible_earnings_method() { // Collectible earnings is total of (price * avg task progress of each job)