Merge pull request #13660 from seamuslee001/5.11
[civicrm-core.git] / tests / phpunit / CRM / Core / MenuTest.php
index b48a5f5cd42abdc5de1c4cc0b97db37c9eb859ca..1b6a7d311ae6eddbbf17c5dd84cffc2dfa95f812 100644 (file)
@@ -6,6 +6,84 @@
  */
 class CRM_Core_MenuTest extends CiviUnitTestCase {
 
+  public function testReadXML() {
+    $xmlString = '<?xml version="1.0" encoding="iso-8859-1" ?>
+    <menu>
+      <item>
+         <path>civicrm/foo/bar</path>
+         <title>Foo Bar</title>
+         <desc>The foo is one with the bar.</desc>
+         <page_callback>CRM_Foo_Page_Bar</page_callback>
+         <adminGroup>Customize Data and Screens</adminGroup>
+         <icon>admin/small/foo.png</icon>
+         <weight>10</weight>
+      </item>
+    </menu>
+    ';
+    $xml = simplexml_load_string($xmlString);
+    $menu = array();
+    CRM_Core_Menu::readXML($xml, $menu);
+    $this->assertTrue(isset($menu['civicrm/foo/bar']));
+    $this->assertEquals('Foo Bar', $menu['civicrm/foo/bar']['title']);
+    $this->assertEquals('The foo is one with the bar.', $menu['civicrm/foo/bar']['desc']);
+    $this->assertEquals('CRM_Foo_Page_Bar', $menu['civicrm/foo/bar']['page_callback']);
+    $this->assertEquals('Customize Data and Screens', $menu['civicrm/foo/bar']['adminGroup']);
+    $this->assertEquals('admin/small/foo.png', $menu['civicrm/foo/bar']['icon']);
+    $this->assertEquals('10', $menu['civicrm/foo/bar']['weight']);
+    $this->assertTrue(!isset($menu['civicrm/foo/bar']['ids_arguments']));
+  }
+
+  public function testReadXML_IDS() {
+    $xmlString = '<?xml version="1.0" encoding="iso-8859-1" ?>
+    <menu>
+      <item>
+         <path>civicrm/foo/bar</path>
+         <title>Foo Bar</title>
+         <ids_arguments>
+          <json>alpha</json>
+          <json>beta</json>
+          <exception>gamma</exception>
+        </ids_arguments>
+      </item>
+    </menu>
+    ';
+    $xml = simplexml_load_string($xmlString);
+    $menu = array();
+    CRM_Core_Menu::readXML($xml, $menu);
+    $this->assertTrue(isset($menu['civicrm/foo/bar']));
+    $this->assertEquals('Foo Bar', $menu['civicrm/foo/bar']['title']);
+    $this->assertEquals(array('alpha', 'beta'), $menu['civicrm/foo/bar']['ids_arguments']['json']);
+    $this->assertEquals(array('gamma'), $menu['civicrm/foo/bar']['ids_arguments']['exceptions']);
+    $this->assertEquals(array(), $menu['civicrm/foo/bar']['ids_arguments']['html']);
+
+    $idsConfig = CRM_Core_IDS::createRouteConfig($menu['civicrm/foo/bar']);
+    $this->assertTrue(in_array('alpha', $idsConfig['General']['json'])); // XML
+    $this->assertTrue(in_array('beta', $idsConfig['General']['json'])); // XML
+    $this->assertTrue(in_array('gamma', $idsConfig['General']['exceptions'])); // XML
+    $this->assertTrue(in_array('thankyou_text', $idsConfig['General']['exceptions'])); // Inherited
+  }
+
+  /**
+   * Check that novel data elements in the menu are correctly
+   * stored and loaded.
+   */
+  public function testModuleData() {
+    CRM_Core_Menu::store(TRUE);
+    $item = CRM_Core_Menu::get('civicrm/case');
+    $this->assertFalse(isset($item['ids_arguments']['exceptions']));
+    $this->assertFalse(isset($item['whimsy']));
+
+    CRM_Utils_Hook::singleton()->setHook('civicrm_alterMenu', function(&$items){
+      $items['civicrm/case']['ids_arguments']['exceptions'][] = 'foobar';
+      $items['civicrm/case']['whimsy'] = 'godliness';
+    });
+
+    CRM_Core_Menu::store(TRUE);
+    $item = CRM_Core_Menu::get('civicrm/case');
+    $this->assertTrue(in_array('foobar', $item['ids_arguments']['exceptions']));
+    $this->assertEquals('godliness', $item['whimsy']);
+  }
+
   /**
    * @return array
    */