*/
class UserTest extends TestCase
{
/** @test */
public function user_has_name_link_method()
{
$user = factory(User::class)->create();
$this->assertEquals(link_to_route('users.show', $user->name, [$user]), $user->nameLink());
}
/** @test */
public function user_can_assigned_to_a_role()
{
$user = factory(User::class)->create();
$user->assignRole('admin');
$this->assertTrue($user->hasRole('admin'));
}
/** @test */
public function user_has_many_roles()
{
$user = factory(User::class)->create();
$user->assignRole('admin');
$user->assignRole('worker');
$this->assertTrue($user->hasRoles(['admin', 'worker']));
$this->assertEquals([
[
'user_id' => $user->id,
'role_id' => 1,
'name' => trans('user.roles.admin'),
],
[
'user_id' => $user->id,
'role_id' => 2,
'name' => trans('user.roles.worker'),
],
], $user->roles->toArray());
}
/** @test */
public function user_can_be_removed_from_a_role()
{
$user = factory(User::class)->create();
$user->assignRole('admin');
$user->assignRole('worker');
$this->assertTrue($user->hasRoles(['admin', 'worker']));
$user->removeRole('worker');
$this->assertFalse($user->fresh()->hasRole('worker'));
}
/** @test */
public function user_can_queried_by_roles()
{
$user = factory(User::class)->create();
$user->assignRole('worker');
$this->assertCount(1, User::orderBy('name')->hasRoles(['worker'])->get());
}
/** @test */
public function user_has_role_list_method()
{
$user = factory(User::class)->create();
$user->assignRole('admin');
$user->assignRole('worker');
$roleList = '
';
$roleList .= '- '.trans('user.roles.admin').'
';
$roleList .= '- '.trans('user.roles.worker').'
';
$roleList .= '
';
$this->assertEquals($roleList, $user->roleList());
}
/** @test */
public function a_user_has_many_jobs_relation()
{
$user = factory(User::class)->create();
$job = factory(Job::class)->create(['worker_id' => $user->id]);
$this->assertInstanceOf(Collection::class, $user->jobs);
$this->assertInstanceOf(Job::class, $user->jobs->first());
}
/** @test */
public function a_user_belongs_many_projects()
{
$user = factory(User::class)->create();
$project = factory(Project::class)->create();
$job = factory(Job::class)->create(['worker_id' => $user->id, 'project_id' => $project->id]);
$this->assertInstanceOf(Collection::class, $user->projects);
$this->assertInstanceOf(Project::class, $user->projects->first());
}
/** @test */
public function user_project_relation_has_has_unique_project_list()
{
$user = factory(User::class)->create();
$project = factory(Project::class)->create();
$job = factory(Job::class)->create(['worker_id' => $user->id, 'project_id' => $project->id]);
$job = factory(Job::class)->create(['worker_id' => $user->id, 'project_id' => $project->id]);
$this->assertInstanceOf(Collection::class, $user->projects);
$this->assertInstanceOf(Project::class, $user->projects->first());
$this->assertCount(1, $user->projects);
}
/** @test */
public function a_user_has_many_payments_with_morph_relation()
{
$user = factory(User::class)->create();
$payment = factory(Payment::class)->create([
'partner_type' => 'App\Entities\Users\User',
'partner_id' => $user->id,
]);
$this->assertInstanceOf(Collection::class, $user->payments);
$this->assertInstanceOf(Payment::class, $user->payments->first());
$this->assertCount(1, $user->payments);
}
}