ThemeTest.php #1

  • //
  • guest/
  • perforce_software/
  • chronicle/
  • main/
  • tests/
  • phpunit/
  • P4Cms/
  • ThemeTest.php
  • View
  • Commits
  • Open Download .zip Download (7 KB)
<?php
/**
 * Test the site model.
 *
 * @copyright   2011 Perforce Software. All rights reserved.
 * @license     Please see LICENSE.txt in top-level folder of this distribution.
 * @version     <release>/<patch>
 */
class P4Cms_ThemeTest extends TestCase
{
    /**
     * Test setup.
     */
    public function setUp()
    {
        parent::setUp();
        P4Cms_Theme::addPackagesPath(SITES_PATH . '/all/themes');
        P4Cms_PackageAbstract::setDocumentRoot(SITES_PATH);
    }

    /**
     * Test teardown.
     */
    public function tearDown()
    {
        P4Cms_PackageAbstract::setDocumentRoot(null);
        parent::tearDown();
    }

    /**
     * Ensure changes to path influences the baseUrl.
     */
    public function testPaths()
    {
        $theme = new P4Cms_Theme;
        $theme->setPath(SITES_PATH .'/all/themes/default');
        $this->assertSame('/all/themes/default', $theme->getBaseUrl(), 'Expected base URL.');
        $this->assertSame(
            TEST_SITES_PATH .'/all/themes/default/views',
            $theme->getViewsPath(),
            'Expected views path.'
        );

        // ensure that invalid path throws.
        try {
            $theme->setPath(SITES_PATH .'/non-existant-site/themes/default');
            $this->fail("Expected exception setting non-existant theme path.");
        } catch (P4Cms_Package_Exception $e) {
            $this->assertTrue(true);
        }

        // ensure path must be under public path.
        try {
            P4Cms_PackageAbstract::setDocumentRoot(SITES_PATH . '/invalid');
            $theme->setPath(SITES_PATH .'/all/themes/default');
            $theme->getBaseUrl();
            $this->fail("Expected exception getting base url of theme outside of public path.");
        } catch (P4Cms_Package_Exception $e) {
            $this->assertTrue(true);
        }
    }

    /**
     * Ensure we can fetch themes.
     */
    public function testFetch()
    {
        // valid key.
        try {
            $theme = P4Cms_Theme::fetch('default');
            $this->assertTrue(true);
        } catch (P4Cms_Model_NotFoundException $e) {
            $this->fail();
        }

        // ensure it's populated.
        $this->assertTrue((bool)$theme->getName());
        $this->assertTrue((bool)$theme->getPath());
        $this->assertTrue((bool)count($theme->getMaintainerInfo()));
        $this->assertTrue((bool)$theme->getDescription());

        // invalid key.
        try {
            $theme = P4Cms_Theme::fetch('alskdjfaskldfjsdlk');
            $this->fail();
        } catch (P4Cms_Model_NotFoundException $e) {
            $this->assertTrue(true);
        }
    }

    /**
     * Ensure we can fetch a list of themes.
     */
    public function testFetchAll()
    {
        try {
            $themes = P4Cms_Theme::fetchAll();
            $this->assertTrue(true);
            $this->assertTrue($themes instanceof P4Cms_Model_Iterator);
        } catch (P4Cms_Model_NotFoundException $e) {
            $this->fail();
        }
    }

    /**
     * Ensure themes load properly.
     */
    public function testLoad()
    {
        // load theme.
        $theme = P4Cms_Theme::fetch('alternative');
        $theme->load();

        $view = P4Cms_Theme::getView();

        // ensure stylesheets added.
        foreach ($theme->getStylesheets() as $stylesheet) {
            $this->assertTrue(strpos($view->headLink()->toString(), $stylesheet['href']) !== false);
        }

        // ensure scripts added.
        foreach ($theme->getScripts() as $script) {
            $this->assertTrue(strpos($view->headScript()->toString(), $script['src']) !== false);
        }
    }

    /**
     * Test that stylesheets can be retrieved correctly.
     */
    public function testStylesheets()
    {
        $theme = new P4Cms_Theme;
        $theme->setPath(SITES_PATH . '/all/themes/default');
        $stylesheets = $theme->getStylesheets();
        $this->assertTrue(count($stylesheets) == 4);
        $this->assertTrue($stylesheets[0]['href']           == $theme->getBaseUrl() . '/test1.css');
        $this->assertTrue($stylesheets[0]['media']          == 'all');
        $this->assertTrue($stylesheets[0]['conditional']    == false);
        $this->assertTrue($stylesheets[1]['href']           == $theme->getBaseUrl() . '/test2.css');
        $this->assertTrue($stylesheets[1]['media']          == 'all');
        $this->assertTrue($stylesheets[1]['conditional']    == false);
        $this->assertTrue($stylesheets[2]['href']           == 'http://foo.com/bar.css');
        $this->assertTrue($stylesheets[2]['media']          == 'screen');
        $this->assertTrue($stylesheets[2]['conditional']    == false);
        $this->assertTrue($stylesheets[3]['href']           == $theme->getBaseUrl() . '/print.css');
        $this->assertTrue($stylesheets[3]['media']          == 'print');
        $this->assertTrue($stylesheets[3]['conditional']    == false);
    }

    /**
     * Test that scripts can be retrieved correctly.
     */
    public function testScripts()
    {
        $theme = new P4Cms_Theme;
        $theme->setPath(SITES_PATH . '/all/themes/default');
        $scripts = $theme->getScripts();
        $this->assertTrue(count($scripts) == 3);
        $this->assertTrue($scripts[0]['src']    == $theme->getBaseUrl() . '/test1.js');
        $this->assertTrue($scripts[0]['type']   == 'text/javascript');
        $this->assertTrue($scripts[0]['attrs']  == array());
        $this->assertTrue($scripts[1]['src']    == $theme->getBaseUrl() . '/test2.js');
        $this->assertTrue($scripts[1]['type']   == 'text/javascript');
        $this->assertTrue($scripts[1]['attrs']  == array());
        $this->assertTrue($scripts[2]['src']    == $theme->getBaseUrl() . '/test.vbs');
        $this->assertTrue($scripts[2]['type']   == 'text/vbscript');
        $this->assertTrue($scripts[2]['attrs']  == array());
    }

    /**
     * Test the behaviour of getWidgetConfig.
     */
    public function testGetWidgetConfig()
    {
        $theme = P4Cms_Theme::fetch('default');
        $theme->load();

        $widgetConfig = $theme->getWidgetConfig();
        $this->assertSame(array('test'), array_keys($widgetConfig), 'Expected region names in widget config.');
        $this->assertSame(
            array(
                'title' => 'Test',
                'type'  => 'widget/text',
            ),
            current($widgetConfig['test']),
            'Expected widget config for test region.'
        );
    }

    /**
     * Test behaviour of getLabel.
     */
    public function testGetLabel()
    {
        $theme = P4Cms_Theme::fetch('default');
        $theme->load();

        $this->assertSame('Default Theme', $theme->getLabel(), 'Expected title.');
    }

    /**
     * Test behaviour of hasActive.
     */
    public function testHasActive()
    {
        $this->assertFalse(P4Cms_Theme::hasActive(), 'Expect false without theme load.');

        $theme = P4Cms_Theme::fetch('default');
        $theme->load();
        $this->assertTrue(P4Cms_Theme::hasActive(), 'Expect true with theme load.');
    }
}
# Change User Description Committed
#1 16170 perforce_software Move Chronicle files to follow new path scheme for branching.
//guest/perforce_software/chronicle/tests/phpunit/P4Cms/ThemeTest.php
#1 8972 Matt Attaway Initial add of the Chronicle source code