From 28c91e8476e66cf49dcff8a49ffba936d4ff9a4f Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Fri, 15 Feb 2019 07:03:29 +0800 Subject: [PATCH] Project deletion will also deletes related invoices --- app/Entities/Projects/Project.php | 7 +++++++ tests/Unit/Models/ProjectTest.php | 24 ++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/app/Entities/Projects/Project.php b/app/Entities/Projects/Project.php index e64abce..aa0c956 100755 --- a/app/Entities/Projects/Project.php +++ b/app/Entities/Projects/Project.php @@ -244,4 +244,11 @@ class Project extends Model return $workDuration.' Day(s)'; } + + public function delete() + { + $this->invoices()->delete(); + + return parent::delete(); + } } diff --git a/tests/Unit/Models/ProjectTest.php b/tests/Unit/Models/ProjectTest.php index 351c7d8..58438ab 100644 --- a/tests/Unit/Models/ProjectTest.php +++ b/tests/Unit/Models/ProjectTest.php @@ -5,6 +5,7 @@ namespace Tests\Unit\Models; use Tests\TestCase; use App\Entities\Projects\Job; use App\Entities\Projects\Task; +use App\Entities\Invoices\Invoice; use App\Entities\Payments\Payment; use App\Entities\Projects\Comment; use App\Entities\Projects\Project; @@ -234,4 +235,27 @@ class ProjectTest extends TestCase $this->assertEquals('2 Year(s) 3 Month(s)', $project->work_duration); } + + /** @test */ + public function a_project_has_many_invoices_relation() + { + $project = factory(Project::class)->create(); + $invoice = factory(Invoice::class)->create(['project_id' => $project->id]); + + $this->assertInstanceOf(Collection::class, $project->invoices); + $this->assertInstanceOf(Invoice::class, $project->invoices->first()); + } + + /** @test */ + public function project_deletion_also_deletes_related_invoices() + { + $project = factory(Project::class)->create(); + $invoice = factory(Invoice::class)->create(['project_id' => $project->id]); + + $project->delete(); + + $this->dontSeeInDatabase('invoices', [ + 'project_id' => $project->id, + ]); + } }