From 2d32a4d0266a4e0d638d4c08fea19ab24a0ca019 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Sat, 28 Oct 2017 19:06:09 +0800 Subject: [PATCH] Add project owner relation --- app/Entities/Projects/Project.php | 6 ++++++ database/factories/ModelFactory.php | 24 ------------------------ database/factories/ProjectFactory.php | 30 ++++++++++++++++++++++++++++++ tests/Unit/Models/ProjectTest.php | 16 +++++++++++++++- 4 files changed, 51 insertions(+), 25 deletions(-) create mode 100644 database/factories/ProjectFactory.php diff --git a/app/Entities/Projects/Project.php b/app/Entities/Projects/Project.php index fc63637..3ea0548 100755 --- a/app/Entities/Projects/Project.php +++ b/app/Entities/Projects/Project.php @@ -2,6 +2,7 @@ namespace App\Entities\Projects; +use App\Entities\Agencies\Agency; use App\Entities\Invoices\Invoice; use App\Entities\Partners\Partner; use App\Entities\Payments\Payment; @@ -65,6 +66,11 @@ class Project extends Model return $this->belongsTo(Partner::class); } + public function owner() + { + return $this->belongsTo(Agency::class); + } + public function cashInTotal() { return $this->payments->sum(function ($payment) { diff --git a/database/factories/ModelFactory.php b/database/factories/ModelFactory.php index ae8f2fb..14ac19c 100644 --- a/database/factories/ModelFactory.php +++ b/database/factories/ModelFactory.php @@ -19,30 +19,6 @@ $factory->define(User::class, function (Faker\Generator $faker) { ]; }); -$factory->define(Project::class, function (Faker\Generator $faker) { - - $proposalDate = $faker->dateTimeBetween('-1 year', '-1 month')->format('Y-m-d'); - $startDate = Carbon::parse($proposalDate)->addDays(10); - $endDate = $startDate->addDays(rand(1, 13) * 7); - - return [ - 'name' => $faker->sentence(3), - 'description' => $faker->paragraph, - 'proposal_date' => $proposalDate, - 'start_date' => $startDate->format('Y-m-d'), - 'end_date' => $endDate->format('Y-m-d'), - 'project_value' => $projectValue = rand(1, 10) * 500000, - 'proposal_value' => $projectValue, - 'status_id' => rand(1, 6), - 'owner_id' => function () { - return factory(User::class)->create()->id; - }, - 'customer_id' => function () { - return factory(Partner::class)->create()->id; - }, - ]; -}); - $factory->define(Subscription::class, function (Faker\Generator $faker) { $startDate = Carbon::parse($faker->dateTimeBetween('-1 year', '-1 month')->format('Y-m-d')); diff --git a/database/factories/ProjectFactory.php b/database/factories/ProjectFactory.php new file mode 100644 index 0000000..a289003 --- /dev/null +++ b/database/factories/ProjectFactory.php @@ -0,0 +1,30 @@ +define(Project::class, function (Faker $faker) { + + $proposalDate = $faker->dateTimeBetween('-1 year', '-1 month')->format('Y-m-d'); + $startDate = Carbon::parse($proposalDate)->addDays(10); + $endDate = $startDate->addDays(rand(1, 13) * 7); + + return [ + 'name' => $faker->sentence(3), + 'description' => $faker->paragraph, + 'proposal_date' => $proposalDate, + 'start_date' => $startDate->format('Y-m-d'), + 'end_date' => $endDate->format('Y-m-d'), + 'project_value' => $projectValue = rand(1, 10) * 500000, + 'proposal_value' => $projectValue, + 'status_id' => rand(1, 6), + 'owner_id' => function () { + return factory(Agency::class)->create()->id; + }, + 'customer_id' => function () { + return factory(Partner::class)->create()->id; + }, + ]; +}); diff --git a/tests/Unit/Models/ProjectTest.php b/tests/Unit/Models/ProjectTest.php index 73f76c1..bb6f7e3 100644 --- a/tests/Unit/Models/ProjectTest.php +++ b/tests/Unit/Models/ProjectTest.php @@ -2,6 +2,7 @@ namespace Tests\Unit\Models; +use App\Entities\Agencies\Agency; use App\Entities\Partners\Partner; use App\Entities\Payments\Payment; use App\Entities\Projects\Feature; @@ -71,8 +72,21 @@ class ProjectTest extends TestCase /** @test */ public function a_project_belongs_to_a_customer() { - $project = factory(Project::class)->create(); + $customer = factory(Partner::class)->create(); + $project = factory(Project::class)->create(['customer_id' => $customer->id]); + $this->assertTrue($project->customer instanceof Partner); + $this->assertEquals($project->customer_id, $customer->id); + } + + /** @test */ + public function a_project_belongs_to_an_agency() + { + $agency = factory(Agency::class)->create(); + $project = factory(Project::class)->create(['owner_id' => $agency->id]); + + $this->assertTrue($project->owner instanceof Agency); + $this->assertEquals($project->owner_id, $agency->id); } /** @test */