diff --git a/app/Entities/Projects/Job.php b/app/Entities/Projects/Job.php index 9987fc4..de2287e 100755 --- a/app/Entities/Projects/Job.php +++ b/app/Entities/Projects/Job.php @@ -109,4 +109,11 @@ class Job extends Model { return $this->price * ($this->progress / 100); } + + public function delete() + { + $this->tasks()->delete(); + + return parent::delete(); + } } diff --git a/app/Entities/Projects/Project.php b/app/Entities/Projects/Project.php index aa0c956..a07b229 100755 --- a/app/Entities/Projects/Project.php +++ b/app/Entities/Projects/Project.php @@ -247,7 +247,9 @@ class Project extends Model public function delete() { + $this->jobs->each->delete(); $this->invoices()->delete(); + $this->payments()->delete(); return parent::delete(); } diff --git a/tests/Unit/Models/JobTest.php b/tests/Unit/Models/JobTest.php index c2e96c0..b2b342e 100644 --- a/tests/Unit/Models/JobTest.php +++ b/tests/Unit/Models/JobTest.php @@ -55,6 +55,19 @@ class JobTest extends TestCase } /** @test */ + public function job_deletion_also_deletes_related_tasks() + { + $job = factory(Job::class)->create(); + $tasks = factory(Task::class)->create(['job_id' => $job->id]); + + $job->delete(); + + $this->dontSeeInDatabase('tasks', [ + 'job_id' => $job->id, + ]); + } + + /** @test */ public function a_job_has_progress_attribute() { $job = factory(Job::class)->create(); diff --git a/tests/Unit/Models/ProjectTest.php b/tests/Unit/Models/ProjectTest.php index 58438ab..733dbdd 100644 --- a/tests/Unit/Models/ProjectTest.php +++ b/tests/Unit/Models/ProjectTest.php @@ -42,6 +42,19 @@ class ProjectTest extends TestCase } /** @test */ + public function project_deletion_also_deletes_related_jobs() + { + $project = factory(Project::class)->create(); + $job = factory(Job::class)->create(['project_id' => $project->id]); + + $project->delete(); + + $this->dontSeeInDatabase('jobs', [ + 'project_id' => $project->id, + ]); + } + + /** @test */ public function a_project_has_many_main_jobs() { $project = factory(Project::class)->create(); @@ -70,15 +83,43 @@ class ProjectTest extends TestCase } /** @test */ - public function a_project_has_many_payments() + public function project_deletion_also_deletes_related_job_tasks() + { + $project = factory(Project::class)->create(); + $job = factory(Job::class)->create(['project_id' => $project->id, 'type_id' => 2]); + $tasks = factory(Task::class, 2)->create(['job_id' => $job->id]); + + $project->delete(); + + $this->dontSeeInDatabase('tasks', [ + 'job_id' => $job->id, + ]); + } + + /** @test */ + public function a_project_has_many_payments_relation() { $project = factory(Project::class)->create(); $payment = factory(Payment::class)->create(['project_id' => $project->id]); + $this->assertInstanceOf(Collection::class, $project->payments); $this->assertInstanceOf(Payment::class, $project->payments->first()); } /** @test */ + public function project_deletion_also_deletes_related_payments() + { + $project = factory(Project::class)->create(); + $payment = factory(Payment::class)->create(['project_id' => $project->id]); + + $project->delete(); + + $this->dontSeeInDatabase('payments', [ + 'project_id' => $project->id, + ]); + } + + /** @test */ public function a_project_has_many_subscriptions() { $project = factory(Project::class)->create();