diff --git a/app/Entities/Users/User.php b/app/Entities/Users/User.php index 9ae7161..5472902 100644 --- a/app/Entities/Users/User.php +++ b/app/Entities/Users/User.php @@ -49,6 +49,19 @@ class User extends Authenticatable } /** + * Remove the given role from the user. + * + * @param string $role + * @return mixed + */ + public function removeRole($role) + { + return $this->roles()->detach( + Role::whereName($role)->firstOrFail() + ); + } + + /** * Determine if the user has the given role. * * @param mixed $role diff --git a/tests/Unit/Models/UserTest.php b/tests/Unit/Models/UserTest.php index 88752b3..f821ef4 100644 --- a/tests/Unit/Models/UserTest.php +++ b/tests/Unit/Models/UserTest.php @@ -16,4 +16,46 @@ class UserTest extends TestCase 'target' => '_blank' ]), $user->nameLink()); } + + /** @test */ + public function it_can_assigned_to_a_role() + { + $user = factory(User::class)->create(); + $user->assignRole('admin'); + + $this->assertTrue($user->hasRole('admin')); + } + + /** @test */ + public function it_has_many_roles() + { + $user = factory(User::class)->create(); + $user->assignRole('admin'); + $user->assignRole('worker'); + + $this->assertTrue($user->hasRoles(['admin', 'worker'])); + } + + /** @test */ + public function it_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 it_can_queried_by_roles() + { + $user = factory(User::class)->create(); + $user->assignRole('vendor'); + $user->assignRole('worker'); + + $this->assertCount(1, User::orderBy('name')->hasRoles(['vendor', 'worker'])->get()); + } }