221 lines
8.2 KiB
PHP
221 lines
8.2 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace KupShop\AdminBundle\Tests;
|
|
|
|
use KupShop\AdminBundle\Util\AdminTestTrait;
|
|
|
|
require 'engine/admin/class/class.AdminBarMenu.php';
|
|
require 'engine/admin/class/class.UserRights.php';
|
|
require 'engine/admin/class/class.Base.php';
|
|
require 'engine/admin/class/class.Frame.php';
|
|
require 'engine/admin/main.php';
|
|
|
|
class AdminRightsTest extends \DatabaseTestCase
|
|
{
|
|
use AdminTestTrait;
|
|
|
|
public function testIfRight()
|
|
{
|
|
$this->adminLogin(1);
|
|
$smarty = createSmarty(true, true);
|
|
$smarty->setForceCompile(true);
|
|
$template = $smarty->fetch($this->getTemplatePath('ifrightTest.tpl'));
|
|
|
|
$this->assertContains('<div id="PosApp"></div>', $template);
|
|
$this->assertContains('<div id="POS_API"></div>', $template);
|
|
$this->assertNotContains('<div id="telfa"></div>', $template);
|
|
$this->adminLogout();
|
|
}
|
|
|
|
/**
|
|
* @dataProvider emptyMenuDataProvider
|
|
*/
|
|
public function testEmptyMenu($expected)
|
|
{
|
|
$this->adminLogin(2);
|
|
$menuCls = new \AdminBarMenu();
|
|
$menu = $menuCls->getMenu();
|
|
$mainCls = new \Main();
|
|
$mainCls->getMenu($menu);
|
|
|
|
$actual = $this->walkRecursiveRemove($menu);
|
|
$this->adminLogout();
|
|
|
|
$this->assertEquals($expected, $actual, '"Vole zapomněl jsi přidat check na práva v menu" - Joe, léta páně 2024 - nebo to pridej do emptyMenuDataProvider() pokud to zadny prava mit nemusi');
|
|
}
|
|
|
|
public function emptyMenuDataProvider()
|
|
{
|
|
return [
|
|
[[
|
|
0 => [
|
|
'name' => 'administration',
|
|
'submenu' => [
|
|
0 => [
|
|
'name' => 'leadpage',
|
|
'left' => 'blank',
|
|
'right' => 's=board.php',
|
|
'visible' => true,
|
|
'superadmin' => false,
|
|
],
|
|
2 => [
|
|
'name' => 'newWindow',
|
|
'script' => 'newWindow();',
|
|
'visible' => true,
|
|
'superadmin' => false,
|
|
],
|
|
3 => [
|
|
'name' => 'logout',
|
|
'script' => 'logout(0)',
|
|
'visible' => true,
|
|
'superadmin' => false,
|
|
],
|
|
4 => [
|
|
'name' => 'adminEdit',
|
|
'script' => 'nw(\'adminEdit\')',
|
|
'visible' => true,
|
|
'superadmin' => false,
|
|
],
|
|
6 => [
|
|
'name' => 'chooseLanguage',
|
|
'submenu' => [
|
|
0 => [
|
|
'name' => 'czech',
|
|
'href' => 'admin-change-language/czech',
|
|
'visible' => true,
|
|
'superadmin' => false,
|
|
],
|
|
1 => [
|
|
'name' => 'english',
|
|
'href' => 'admin-change-language/english',
|
|
'visible' => true,
|
|
'superadmin' => false,
|
|
],
|
|
'visible' => true,
|
|
],
|
|
'level' => 1,
|
|
'superadmin' => false,
|
|
'visible' => true,
|
|
],
|
|
7 => [
|
|
'name' => 'userInterfaceLinks',
|
|
'title' => 'Rozcestník rozhraní',
|
|
'submenu' => [
|
|
0 => [
|
|
'title' => 'Rozestník aplikací',
|
|
'name' => 'appMenu',
|
|
'href' => 'menu/',
|
|
'visible' => true,
|
|
'superadmin' => false,
|
|
],
|
|
4 => [
|
|
'name' => 'checkout-print-label',
|
|
'title' => 'Balící stanoviště',
|
|
'href' => 'checkout-print-label/',
|
|
'visible' => true,
|
|
'superadmin' => false,
|
|
],
|
|
5 => [
|
|
'name' => 'store-app',
|
|
'title' => 'Sklad - mobilní aplikace',
|
|
'href' => '/_warehouse/store-app/',
|
|
'visible' => true,
|
|
'superadmin' => false,
|
|
],
|
|
'visible' => true,
|
|
],
|
|
'level' => 1,
|
|
'superadmin' => false,
|
|
'visible' => true,
|
|
],
|
|
8 => [
|
|
'name' => 'Status',
|
|
'left' => 'blank',
|
|
'right' => 's=board.php&type=Status',
|
|
'visible' => true,
|
|
'title' => 'Sites:status',
|
|
'superadmin' => false,
|
|
],
|
|
'visible' => true,
|
|
],
|
|
'level' => 0,
|
|
'superadmin' => false,
|
|
'visible' => true,
|
|
],
|
|
1 => [
|
|
'name' => 'productsMenu',
|
|
'left' => 's=menu.php&type=products',
|
|
'right' => 's=list.php&type=products',
|
|
'submenu' => [],
|
|
'level' => 0,
|
|
'superadmin' => false,
|
|
],
|
|
2 => [
|
|
'name' => 'ordersMenu',
|
|
'left' => 's=menu.php&type=orders',
|
|
'right' => 's=list.php&type=orders',
|
|
'submenu' => [],
|
|
'level' => 0,
|
|
'superadmin' => false,
|
|
],
|
|
]],
|
|
];
|
|
}
|
|
|
|
private function walkRecursiveRemove($menu)
|
|
{
|
|
// Check if the current item is visible
|
|
if (isset($menu['visible']) && !$menu['visible']) {
|
|
return null;
|
|
}
|
|
|
|
// If the current item has a submenu, process its items
|
|
if (isset($menu['submenu'])) {
|
|
foreach ($menu['submenu'] as $key => $submenu) {
|
|
$submenu = $this->walkRecursiveRemove($submenu);
|
|
if ($submenu === null) {
|
|
unset($menu['submenu'][$key]);
|
|
} else {
|
|
$menu['submenu'][$key] = $submenu;
|
|
}
|
|
}
|
|
|
|
// Remove the entire item if its submenu is empty and it doesn't have 'left' or 'right'
|
|
if (empty($menu['submenu']) && !isset($menu['left']) && !isset($menu['right'])) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
// If the current item is an array of items, process each one
|
|
if (is_array($menu) && array_keys($menu) === range(0, count($menu) - 1)) {
|
|
foreach ($menu as $key => $submenu) {
|
|
$submenu = $this->walkRecursiveRemove($submenu);
|
|
if ($submenu === null) {
|
|
unset($menu[$key]);
|
|
} else {
|
|
$menu[$key] = $submenu;
|
|
}
|
|
}
|
|
}
|
|
|
|
return $menu;
|
|
}
|
|
|
|
protected function getTemplatePath($file)
|
|
{
|
|
if (!file_exists($file)) {
|
|
$classFile = (new \ReflectionClass($this))->getFileName();
|
|
$file = dirname($classFile).'/'.$file;
|
|
}
|
|
|
|
return $file;
|
|
}
|
|
|
|
protected function getDataSet()
|
|
{
|
|
return $this->getJsonDataSetFromFile();
|
|
}
|
|
}
|