IndexControllerTest.php #1

  • //
  • guest/
  • perforce_software/
  • chronicle/
  • main/
  • application/
  • menu/
  • tests/
  • IndexControllerTest.php
  • View
  • Commits
  • Open Download .zip Download (4 KB)
<?php
/**
 * Test the menu index controller.
 *
 * @copyright   2011 Perforce Software. All rights reserved.
 * @license     Please see LICENSE.txt in top-level folder of this distribution.
 * @version     <release>/<patch>
 */
class Menu_Test_IndexControllerTest extends ModuleControllerTest
{
    /**
     * Impersonate the administrator for all manage tests.
     */
    public function setUp()
    {   
        parent::setUp();

        $this->utility->impersonate('administrator');
    }
    
    /**
     * Test the sitemap action.
     */
    public function testSitemap()
    {
        // ensure controller provides blank menu if sitemap menu doesn't exist
        if (P4Cms_Menu::exists('sitemap')) {
            P4Cms_Menu::fetch('sitemap')->delete();
        }

        // html
        $this->dispatch('/menu/sitemap');
        $this->assertQueryContentContains("div#content h1", "Sitemap");

        // xml
        $this->resetRequest()->resetResponse();
        $this->dispatch('/menu/sitemap/format/xml');

        $xml = $this->getResponse()->getBody();
        $this->assertSelectCount("urlset", 1, $xml);

        // create sitemap menu and verify generated structure
        $sitemap = P4Cms_Menu::create(
            array(
                'id'    => 'sitemap',
                'label' => 'site map'
            )
        );

        // add few links
        $sitemap->addPage(
            array(
                'id'    => 'link1',
                'label' => 'link 1',
                'type'  => 'Zend_Navigation_Page_Uri',
                'uri'   => '/link/1'
            )
        );
        $sitemap->addPage(
            array(
                'id'    => 'link2',
                'label' => 'link 2',
                'type'  => 'Zend_Navigation_Page_Uri',
                'uri'   => '/link/2'
            )
        );

        // add heading
        $sitemap->addPage(
            array(
                'id'    => 'heading1',
                'label' => 'Head 123',
                'type'  => 'P4Cms_Navigation_Page_Heading'
            )
        );

        // add content link
        P4Cms_Content::store(
            array(
                'contentType'   => 'basic-page',
                'title'         => 'Info',
                'id'            => 'inf'
            )
        );
        $sitemap->addPage(
            array(
                'id'        => 'content',
                'type'      => 'P4Cms_Navigation_Page_Content',
                'contentId' => 'inf'
            )
        );
        
        // save sitemap menu and dispatch to test
        $sitemap->save();

        // html
        $this->resetRequest()->resetResponse();
        $this->dispatch('/menu/sitemap');

        $this->assertQueryCount("ul.sitemap li", 4);
        $this->assertQueryContentContains("ul.sitemap li a[href='/link/1']", "link 1");
        $this->assertQueryContentContains("ul.sitemap li a[href='/link/2']", "link 2");
        $this->assertQueryContentContains("ul.sitemap li a[href='/view/id/inf']", "Info");
        $this->assertQueryContentContains("ul.sitemap li span", "Head 123");

        // xml
        $this->resetRequest()->resetResponse();
        $this->dispatch('/menu/sitemap/format/xml');

        // in xml output, heading is not rendered as its not a link
        $xml = $this->getResponse()->getBody();
        $this->assertSelectCount("urlset url loc", 3, $xml);
        $expectedUrls = array(
            'regexp:/link\/1\s*$/',
            'regexp:/link\/2\s*$/',
            'regexp:/view\/id\/inf\s*$/'
        );
        foreach ($expectedUrls as $url) {
            $this->assertTag(
                array(
                    'tag'       => 'loc',
                    'content'   => $url,
                ),
                $xml,
                '',
                false
            );
        }

        // ensure that /sitemap.xml is routed via /menu/sitemap
        $this->resetRequest()->resetResponse();
        $this->dispatch('/sitemap.xml');

        $this->assertModule('menu', "Expected module for /sitemap.xml request.");
        $this->assertController('index', "Expected controller for /sitemap.xml request.");
        $this->assertAction('sitemap', "Expected action for /sitemap.xml request.");

        $this->assertXmlStringEqualsXmlString($xml, $this->getResponse()->getBody());
    }
}
# Change User Description Committed
#1 16170 perforce_software Move Chronicle files to follow new path scheme for branching.
//guest/perforce_software/chronicle/application/menu/tests/IndexControllerTest.php
#1 8972 Matt Attaway Initial add of the Chronicle source code