Files
kupshop/bundles/KupShop/AdminBundle/Tests/AdminRightsTest.php
2025-08-02 16:30:27 +02:00

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();
}
}