96 lines
2.7 KiB
PHP
96 lines
2.7 KiB
PHP
<?php
|
|
|
|
use App\Models\User;
|
|
use App\Support\Sidebar\Item;
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
|
|
uses(RefreshDatabase::class);
|
|
|
|
beforeEach(function () {
|
|
$this->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));
|
|
});
|