artisan('db:seed'); }); test('create builds item with title', function () { $item = Item::create('Users'); $this->assertSame('Users', $item->getTitle()); }); test('href takes priority over route', function () { $item = Item::create('Foo') ->href('https://example.com/bar'); $this->assertSame('https://example.com/bar', $item->getHref()); }); test('get href resolves named route', function () { $item = Item::create('Foo')->route('dashboard'); $this->assertSame(route('dashboard'), $item->getHref()); }); test('get href returns null when neither set', function () { $this->assertNull(Item::create('Foo')->getHref()); }); test('icon setter and getter', function () { $item = Item::create('Foo')->icon('bi-people'); $this->assertSame('bi-people', $item->getIcon()); }); test('active path setter and getter', function () { $item = Item::create('Foo')->active('users*'); $this->assertSame('users*', $item->getActivePath()); }); test('dropdown returns false without children', function () { $this->assertFalse(Item::create('Foo')->isDropdown()); }); test('add children makes item a dropdown', function () { $item = Item::create('Foo')->addChildren([ Item::create('Child 1'), Item::create('Child 2'), ]); $this->assertTrue($item->isDropdown()); $this->assertCount(2, $item->children()); }); test('expanded path collects children active paths', function () { $item = Item::create('Foo')->addChildren([ Item::create('Child 1')->active('users*'), Item::create('Child 2')->active('roles*'), ]); $this->assertSame(['users*', 'roles*'], $item->getExpandedPath()); }); test('authorize returns true when no permissions set', function () { $user = User::factory()->create(); $this->assertTrue(Item::create('Foo')->authorize($user)); }); test('authorize calls closure when closure provided', function () { $user = User::factory()->create(); $item = Item::create('Foo')->permissions(fn ($u) => $u->id === $user->id); $this->assertTrue($item->authorize($user)); }); test('authorize checks user has permission', function () { $user = Mockery::mock(User::class)->makePartial(); $user->shouldReceive('hasPermission')->with('users.manage')->andReturn(true); $user->shouldReceive('hasPermission')->with('roles.manage')->andReturn(false); $allowed = Item::create('A')->permissions(['users.manage']); $denied = Item::create('B')->permissions(['users.manage', 'roles.manage']); $this->assertTrue($allowed->authorize($user)); $this->assertFalse($denied->authorize($user)); });