Browse Source

Agency can add and remove many workers

pull/1/head
Nafies Luthfi 8 years ago
parent
commit
529edf42c7
  1. 16
      app/Entities/Agencies/Agency.php
  2. 37
      database/migrations/2017_11_02_175711_create_agency_workers_table.php
  3. 36
      tests/Unit/Models/AgencyTest.php

16
app/Entities/Agencies/Agency.php

@ -3,6 +3,7 @@
namespace App\Entities\Agencies;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Collection;
class Agency extends Model
{
@ -17,4 +18,19 @@ class Agency extends Model
{
return $this->hasMany('App\Entities\Projects\Project', 'owner_id');
}
public function workers()
{
return $this->belongsToMany('App\Entities\Users\User', 'agency_workers', 'agency_id', 'worker_id');
}
public function addWorkers(Collection $workers)
{
$this->workers()->attach($workers);
}
public function removeWorkers(Collection $workers)
{
$this->workers()->detach($workers);
}
}

37
database/migrations/2017_11_02_175711_create_agency_workers_table.php

@ -0,0 +1,37 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateAgencyWorkersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('agency_workers', function (Blueprint $table) {
$table->increments('id');
$table->unsignedInteger('agency_id');
$table->unsignedInteger('worker_id');
$table->timestamps();
$table->unique(['agency_id', 'worker_id'], 'agency_worker_unique');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('agency_workers', function (Blueprint $table) {
//
});
}
}

36
tests/Unit/Models/AgencyTest.php

@ -14,7 +14,7 @@ class AgencyTest extends TestCase
public function agency_has_an_owner()
{
$agency = factory(Agency::class)->create();
$this->assertTrue($agency->owner instanceof User);
$this->assertInstanceOf(User::class, $agency->owner);
}
/** @test */
@ -23,7 +23,37 @@ class AgencyTest extends TestCase
$agency = factory(Agency::class)->create();
$project = factory(Project::class)->create(['owner_id' => $agency->id]);
$this->assertTrue($agency->projects instanceof Collection);
$this->assertTrue($agency->projects->first() instanceof Project);
$this->assertInstanceOf(Collection::class, $agency->projects);
$this->assertInstanceOf(Project::class, $agency->projects->first());
}
/** @test */
public function agency_can_has_many_workers()
{
$agency = factory(Agency::class)->create();
$workers = factory(User::class, 2)->create();
$agency->addWorkers($workers);
$this->assertCount(2, $agency->workers);
$this->assertInstanceOf(Collection::class, $agency->workers);
$this->assertInstanceOf(User::class, $agency->workers->first());
}
/** @test */
public function agency_can_remove_some_workers()
{
$agency = factory(Agency::class)->create();
$workers = factory(User::class, 2)->create();
$agency->addWorkers($workers);
$this->assertCount(2, $agency->workers);
$agency->removeWorkers($workers->take(1));
$agency = $agency->fresh();
$this->assertCount(1, $agency->workers);
$this->assertEquals($workers[1]->id, $agency->workers->first()->id);
}
}
Loading…
Cancel
Save