2011-03-23 10:51:00 +01:00
|
|
|
<?php
|
2016-08-11 01:14:02 +02:00
|
|
|
|
|
|
|
use SilverStripe\Admin\CMSMenu;
|
2016-08-11 01:40:23 +02:00
|
|
|
use SilverStripe\Admin\CMSMenuItem;
|
2016-08-11 01:14:02 +02:00
|
|
|
use SilverStripe\Admin\LeftAndMain;
|
2016-08-11 01:40:23 +02:00
|
|
|
use SilverStripe\Admin\SecurityAdmin;
|
2016-08-19 00:51:35 +02:00
|
|
|
use SilverStripe\Dev\SapphireTest;
|
|
|
|
use SilverStripe\Dev\TestOnly;
|
2016-08-11 01:40:23 +02:00
|
|
|
|
2011-03-23 10:51:00 +01:00
|
|
|
/**
|
2013-10-02 08:06:54 +02:00
|
|
|
* @package framework
|
2011-03-23 10:51:00 +01:00
|
|
|
* @subpackage tests
|
|
|
|
*/
|
|
|
|
class CMSMenuTest extends SapphireTest implements TestOnly {
|
|
|
|
|
|
|
|
public function testBasicMenuHandling() {
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2011-03-23 10:51:00 +01:00
|
|
|
// Clear existing menu
|
|
|
|
CMSMenu::clear_menu();
|
|
|
|
$menuItems = CMSMenu::get_menu_items();
|
|
|
|
$this->assertTrue((empty($menuItems)), 'Menu can be cleared');
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2011-03-23 10:51:00 +01:00
|
|
|
// Add a controller to the menu and check it is as expected
|
2011-03-29 06:54:08 +02:00
|
|
|
CMSMenu::add_controller('CMSMenuTest_LeftAndMainController');
|
2011-03-23 10:51:00 +01:00
|
|
|
$menuItems = CMSMenu::get_menu_items();
|
2011-03-29 06:54:08 +02:00
|
|
|
$menuItem = $menuItems['CMSMenuTest_LeftAndMainController'];
|
2016-08-11 01:14:02 +02:00
|
|
|
$this->assertInstanceOf('SilverStripe\\Admin\\CMSMenuItem', $menuItem, 'Controller menu item is of class CMSMenuItem');
|
2014-01-17 01:48:46 +01:00
|
|
|
$this->assertContains($menuItem->url, singleton('CMSMenuTest_LeftAndMainController')->Link(),
|
2012-09-26 23:34:00 +02:00
|
|
|
'Controller menu item has the correct link');
|
|
|
|
$this->assertEquals($menuItem->controller, 'CMSMenuTest_LeftAndMainController',
|
|
|
|
'Controller menu item has the correct controller class');
|
|
|
|
$this->assertEquals($menuItem->priority, singleton('CMSMenuTest_LeftAndMainController')->stat('menu_priority'),
|
2014-08-15 08:53:05 +02:00
|
|
|
'Controller menu item has the correct priority');
|
2011-03-23 10:51:00 +01:00
|
|
|
CMSMenu::clear_menu();
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2016-05-02 10:57:43 +02:00
|
|
|
// Add another controller
|
|
|
|
CMSMenu::add_controller('CMSMenuTest_CustomTitle');
|
|
|
|
$menuItems = CMSMenu::get_menu_items();
|
|
|
|
$menuItem = $menuItems['CMSMenuTest_CustomTitle'];
|
2016-08-11 01:14:02 +02:00
|
|
|
$this->assertInstanceOf('SilverStripe\\Admin\\CMSMenuItem', $menuItem, 'Controller menu item is of class CMSMenuItem');
|
2016-05-02 10:57:43 +02:00
|
|
|
$this->assertEquals('CMSMenuTest_CustomTitle (localised)', $menuItem->title);
|
|
|
|
CMSMenu::clear_menu();
|
|
|
|
|
2011-03-23 10:51:00 +01:00
|
|
|
// Add a link to the menu
|
|
|
|
CMSMenu::add_link('LinkCode', 'link title', 'http://www.example.com');
|
|
|
|
$menuItems = CMSMenu::get_menu_items();
|
|
|
|
$menuItem = $menuItems['LinkCode'];
|
2016-08-11 01:14:02 +02:00
|
|
|
$this->assertInstanceOf('SilverStripe\\Admin\\CMSMenuItem', $menuItem, 'Link menu item is of class CMSMenuItem');
|
2011-03-23 10:51:00 +01:00
|
|
|
$this->assertEquals($menuItem->title, 'link title', 'Link menu item has the correct title');
|
|
|
|
$this->assertEquals($menuItem->url,'http://www.example.com', 'Link menu item has the correct link');
|
|
|
|
$this->assertNull($menuItem->controller, 'Link menu item has no controller class');
|
2014-08-15 08:53:05 +02:00
|
|
|
$this->assertEquals($menuItem->priority, -1, 'Link menu item has the correct priority');
|
2011-03-23 10:51:00 +01:00
|
|
|
CMSMenu::clear_menu();
|
2013-10-02 08:06:54 +02:00
|
|
|
}
|
|
|
|
|
2016-08-11 01:18:44 +02:00
|
|
|
public function testRemove() {
|
|
|
|
CMSMenu::clear_menu();
|
|
|
|
CMSMenu::add_menu_item('custom', 'Custom Title', 'custom');
|
|
|
|
CMSMenu::add_menu_item('other', 'Other Section', 'other', 'CMSMenuTest_LeftAndMainController');
|
|
|
|
$this->assertNotEmpty(CMSMenu::get_menu_items());
|
|
|
|
|
|
|
|
CMSMenu::remove_menu_class('CMSMenuTest_LeftAndMainController');
|
|
|
|
CMSMenu::remove_menu_item('custom');
|
|
|
|
|
|
|
|
$this->assertEmpty(CMSMenu::get_menu_items());
|
|
|
|
}
|
|
|
|
|
2013-10-02 08:06:54 +02:00
|
|
|
public function testLinkWithExternalAttributes() {
|
|
|
|
CMSMenu::clear_menu();
|
|
|
|
|
|
|
|
CMSMenu::add_link('LinkCode', 'link title', 'http://www.example.com', -2, array(
|
|
|
|
'target' => '_blank'
|
|
|
|
));
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2013-10-02 08:06:54 +02:00
|
|
|
$menuItems = CMSMenu::get_menu_items();
|
2016-08-11 01:40:23 +02:00
|
|
|
/** @var CMSMenuItem $menuItem */
|
2013-10-02 08:06:54 +02:00
|
|
|
$menuItem = $menuItems['LinkCode'];
|
|
|
|
|
|
|
|
$this->assertEquals('target="_blank"', $menuItem->getAttributesHTML());
|
|
|
|
|
|
|
|
CMSMenu::clear_menu();
|
2011-03-23 10:51:00 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function testCmsClassDetection() {
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2011-03-23 10:51:00 +01:00
|
|
|
// Get CMS classes and check that:
|
2011-03-29 06:54:08 +02:00
|
|
|
// 1.) SecurityAdmin is included
|
2011-03-23 10:51:00 +01:00
|
|
|
// 2.) LeftAndMain & ModelAdmin are excluded
|
|
|
|
$cmsClasses = CMSMenu::get_cms_classes();
|
2016-08-11 01:14:02 +02:00
|
|
|
$this->assertContains('SilverStripe\\Admin\\SecurityAdmin', $cmsClasses, 'SecurityAdmin included in valid CMS Classes');
|
|
|
|
$this->assertNotContains('SilverStripe\\Admin\\LeftAndMain', $cmsClasses, 'LeftAndMain not included in valid CMS Classes');
|
|
|
|
$this->assertNotContains('SilverStripe\\Admin\\ModelAdmin', $cmsClasses, 'LeftAndMain not included in valid CMS Classes');
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2011-03-23 10:51:00 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function testAdvancedMenuHandling() {
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2011-03-29 06:54:08 +02:00
|
|
|
// Populate from CMS Classes, check for existance of SecurityAdmin
|
2011-03-23 10:51:00 +01:00
|
|
|
CMSMenu::clear_menu();
|
|
|
|
CMSMenu::populate_menu();
|
2016-08-11 01:40:23 +02:00
|
|
|
$menuItem = CMSMenu::get_menu_item('SilverStripe-Admin-SecurityAdmin');
|
2016-08-11 01:14:02 +02:00
|
|
|
$this->assertInstanceOf('SilverStripe\\Admin\\CMSMenuItem', $menuItem, 'SecurityAdmin menu item exists');
|
2016-08-11 01:40:23 +02:00
|
|
|
$this->assertContains($menuItem->url, SecurityAdmin::singleton()->Link(), 'Menu item has the correct link');
|
2016-08-11 01:14:02 +02:00
|
|
|
$this->assertEquals($menuItem->controller, 'SilverStripe\\Admin\\SecurityAdmin', 'Menu item has the correct controller class');
|
2011-03-23 10:51:00 +01:00
|
|
|
$this->assertEquals(
|
2014-08-15 08:53:05 +02:00
|
|
|
$menuItem->priority,
|
2016-08-11 01:40:23 +02:00
|
|
|
SecurityAdmin::singleton()->stat('menu_priority'),
|
2011-03-23 10:51:00 +01:00
|
|
|
'Menu item has the correct priority'
|
2014-08-15 08:53:05 +02:00
|
|
|
);
|
|
|
|
|
2011-03-23 10:51:00 +01:00
|
|
|
// Check that menu order is correct by priority
|
|
|
|
// Note this will break if populate_menu includes normal links (ie, as not controller)
|
|
|
|
$menuItems = CMSMenu::get_menu_items();
|
|
|
|
$priority = 9999; // ok, *could* be set larger, but shouldn't need to be!
|
|
|
|
foreach($menuItems as $menuItem) {
|
|
|
|
$this->assertEquals(
|
2014-08-15 08:53:05 +02:00
|
|
|
$menuItem->priority,
|
|
|
|
singleton($menuItem->controller)->stat('menu_priority'),
|
2011-03-23 10:51:00 +01:00
|
|
|
"Menu item $menuItem->title has the correct priority"
|
2014-08-15 08:53:05 +02:00
|
|
|
);
|
2011-03-23 10:51:00 +01:00
|
|
|
$this->assertLessThanOrEqual($priority, $menuItem->priority, 'Menu item is of lower or equal priority');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-03-29 06:54:08 +02:00
|
|
|
}
|
|
|
|
|
2013-10-02 08:06:54 +02:00
|
|
|
/**
|
|
|
|
* @package framework
|
|
|
|
* @subpackage tests
|
|
|
|
*/
|
2011-03-29 06:54:08 +02:00
|
|
|
class CMSMenuTest_LeftAndMainController extends LeftAndMain implements TestOnly {
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2013-03-21 19:48:54 +01:00
|
|
|
private static $url_segment = 'CMSMenuTest_LeftAndMainController';
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2013-03-21 19:48:54 +01:00
|
|
|
private static $menu_title = 'CMSMenuTest_LeftAndMainController';
|
2014-08-15 08:53:05 +02:00
|
|
|
|
2013-03-21 19:48:54 +01:00
|
|
|
private static $menu_priority = 50;
|
2012-03-24 04:04:52 +01:00
|
|
|
}
|
2016-05-02 10:57:43 +02:00
|
|
|
|
|
|
|
class CMSMenuTest_CustomTitle extends LeftAndMain implements TestOnly {
|
|
|
|
|
|
|
|
private static $url_segment = 'CMSMenuTest_CustomTitle';
|
|
|
|
|
|
|
|
private static $menu_priority = 50;
|
|
|
|
|
|
|
|
public static function menu_title($class = null, $localised = false) {
|
|
|
|
if($localised) {
|
|
|
|
return __CLASS__ . ' (localised)';
|
|
|
|
} else {
|
|
|
|
return __CLASS__ . ' (unlocalised)';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|