Skip to content

lbhurtado/acme

Repository files navigation

Acme

Introduction

The quick brown fox...

Code Samples

class UserTest extends TestCase
{
    use RefreshDatabase;

    protected $classes = [
        Models\Admin::class,
        Models\Operator::class,
        Models\Staff::class,
        Models\Subscriber::class,
        Models\Worker::class,
    ];

    /** @test */
    public function user_has_required_mobile_attribute()
    {
        $this->expectException(\Illuminate\Validation\ValidationException::class);

        $mobile = null;
        factory(User::class)->create(compact('mobile'));
    }

    /** @test */
    public function user_has_unique_mobile_attribute()
    {
        $this->expectException(\Exception::class);

        $mobile = config('acme.test.user1.mobile');
        factory(User::class)->create(compact('mobile'));
        factory(User::class)->create(compact('mobile'));
    }

    /** @test */
    public function user_has_persistent_mobile_attribute()
    {
        $mobile = config('acme.test.user1.mobile');
        factory(User::class)->create(compact('mobile'));

        $this->assertDatabaseHas('users', compact('mobile'));
    }

    // /** @test */
    // public function user_mobile_field_has_phone_validation()
    // {
    //  $this->expectException(\Illuminate\Validation\ValidationException::class);      
    //  $mobile = '1234';

    //  factory(User::class)->create(compact('mobile'));
    // }

    /** @test */
    public function user_can_have_uplines_and_downlines()
    {
        $user1 = factory(User::class)->create();
        $user2 = factory(User::class)->create();

        $user1->appendNode($user2);

        $this->assertEquals($user1->descendants[0]->id, $user2->id);
        $this->assertEquals($user2->ancestors[0]->id, $user1->id);
    }   

    /** @test */
    public function user_has_roles()
    {
        $user = factory(User::class)->create();
 
        $role1 = Role::create(['name' => 'actor']);
        $role2 = Role::create(['name' => 'writer']);

        $user->assignRole($role1, $role2);

        $this->assertEquals($user->roles->count(), 2);
        $this->assertTrue($user->hasRole('actor'));
        $this->assertTrue($user->hasRole('writer'));
    }

    /** @test */
    function user_model_has_inherits_permissions_from_roles()
    {
        $user = factory(User::class)->create();

        Permission::create(['name' => 'edit articles']);
        Permission::create(['name' => 'delete articles']);
 
        Role::create(['name' => 'writer'])
            ->givePermissionTo('edit articles')
            ->givePermissionTo('delete articles');

        $user->assignRole('writer');

        $this->assertTrue($user->hasPermissionTo('edit articles'));
        $this->assertTrue($user->hasPermissionTo('delete articles'));
    }

    /** @test */
    function child_model_is_essentially_a_user_with_a_type()
    {
        foreach ($this->classes as $class) {
            $descendant = factory($class)->create();
            $user = User::find($descendant->id);

            $this->assertEquals($user->id, $descendant->id);
            $this->assertEquals($user->type, $class);
            $this->assertInstanceOf($class, $user);
        }
    }

    /** @test */
    function child_model_has_a_child_role()
    {   
        foreach ($this->classes as $class) {
            $descendant = factory($class)->create();

            $this->assertDatabaseHas('roles', [
                'name'       => $descendant::$role, 
                'guard_name' => $descendant->getGuardName()
            ]);
            $this->assertTrue($descendant->hasRole($descendant::$role)); 
        }
    }
}

Installation

git clone https://github.com/lbhurtado/acme

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published