Browse Source

Project deletion will also deletes project files

Move file delete action to File model
pull/37/head
Nafies Luthfi 7 years ago
parent
commit
5cbf55e70f
  1. 8
      app/Entities/Projects/File.php
  2. 1
      app/Entities/Projects/Project.php
  3. 3
      app/Http/Controllers/Projects/FilesController.php
  4. 21
      tests/Unit/Models/ProjectTest.php

8
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();
}
}

1
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();

3
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);

21
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)

Loading…
Cancel
Save