ConfigureControllerTest.php #1

  • //
  • guest/
  • perforce_software/
  • chronicle/
  • main/
  • sites/
  • all/
  • modules/
  • disqus/
  • tests/
  • ConfigureControllerTest.php
  • View
  • Commits
  • Open Download .zip Download (6 KB)
<?php
/**
 * Test the Disqus module config controller.
 *
 * @copyright   2012 Perforce Software. All rights reserved.
 * @license     Please see LICENSE.txt in top-level folder of this distribution.
 * @version     <release>/<patch>
 */
class Disqus_Test_ConfigureControllerTest extends ModuleControllerTest
{
    /**
     *  Message passed to markTestSkipped() in tests that are skipped
     *  due to undefined parameters needed for full module functionality.
     */
    const TEST_SKIP_MESSAGE = 'The variable DISQUS_SHORT_NAME is not defined.
        Any tests against a Disqus widget will therefore be skipped.';

    protected $_disqusModule;

    /**
     * Perform setup
     */
    public function setUp()
    {
        parent::setUp();

        // install default content types
        P4Cms_Content_Type::installDefaultTypes();

        $this->_disqusModule = P4Cms_Module::fetch('Disqus');
        $this->_disqusModule->enable()->load();

        // If DISQUS_SHORT_NAME not explicitly defined, defer to environment.
        if (!defined('DISQUS_SHORT_NAME') && getenv('DISQUS_SHORT_NAME')) {
            define('DISQUS_SHORT_NAME', getenv('DISQUS_SHORT_NAME'));
        }
    }

    /**
     * Ensure that this module has not broken the modules list when dispached to manage modules.
     */
    public function testManageModules()
    {
        $this->utility->impersonate('administrator');

        // test that this module has not broken the list
        $this->dispatch('/site/module');

        $this->assertModule('site',         'Expected "site" module');
        $this->assertController('module',   'Expected "module" controller');
        $this->assertAction('index',        'Expected "index" action');

        $this->assertQuery("div.module-grid");
        $this->assertQuery("div.module-grid table");
        $this->assertQuery("div.module-grid thead");

        // dispatch again to get the module inventory
        $this->resetRequest()->resetResponse();
        $this->dispatch('/site/module/format/json');
        $this->assertModule('site',         'Expected "site" module');
        $this->assertController('module',   'Expected "module" controller');
        $this->assertAction('index',        'Expected "index" action');

        // ensure that the module can be configured
        $body               = $this->response->getBody();
        $values             = Zend_Json::decode($body);
        $configRouteParams  = $this->_disqusModule->getConfigRouteParams();
        $this->assertTrue(
            array_key_exists('items', $values),
            'Expect an items entry in JSON output.'
        );

        foreach ($values['items'] as $item) {
            if ($item['name'] === $this->_disqusModule->name) {
                $this->assertEquals(
                    $configRouteParams,
                    $item['configRouteParams'],
                    'Expected Disqus module config route params.'
                );
            }
        }
    }

    /**
     * Test that the configuration form works properly.
     */
    public function testConfigure()
    {
        $this->utility->impersonate('editor');

        // test that module controller correctly forwards to module's configure action
        $configUri = $this->_disqusModule->getConfigUri();
        $this->dispatch($configUri);

        $this->assertModule('disqus', 'Expected module.');
        $this->assertController('configure', 'Expected controller');
        $this->assertAction('index', 'Expected action');

        $this->assertQueryContentContains("h1", "Configure Disqus");
        $this->assertQuery("body[class*='manage-layout']", "Expected manage layout.");

        // verify form content
        $this->assertQuery("form", "Expected configuration form.");
        $this->assertQuery(
            "input[name='". Disqus_Form_Configure::SHORT_NAME ."']",
            "Expected 'shortName' element."
        );
        $this->assertQuery("input[name='contentTypes[]']", "Expected 'contentTypes' element.");
    }

    /**
     * Test good post to save valid data.
     */
    public function testGoodConfigure()
    {
        $this->utility->impersonate('editor');

        $data = array(
            Disqus_Form_Configure::SHORT_NAME   => 'test-short-name',
            'contentTypes'                      => array('basic-page', 'blog-post')
        );
        $this->request->setMethod('POST');
        $this->request->setPost($data);

        $this->dispatch('/disqus/configure/index');

        $this->assertModule('disqus', 'Expected module.');
        $this->assertController('configure', 'Expected controller');
        $this->assertAction('index', 'Expected action');

        // check for saved values
        $module = P4Cms_Module::fetch('Disqus');
        $values = $module->getConfig()->toArray();

        $this->assertSame(
            $data,
            $values,
            "Expected config values."
        );
    }

    /**
     * Test bad post data.
     */
    public function testBadConfigure()
    {
        $this->utility->impersonate('editor');

        // form request without required fields
        $this->request->setMethod('POST');
        $this->request->setPost(array(Disqus_Form_Configure::SHORT_NAME => ''));

        $this->dispatch('/disqus/configure/index');
        $responseBody = $this->response->getBody();

        $this->assertModule('disqus', 'Expected module.');
        $this->assertController('configure', 'Expected controller');
        $this->assertAction('index', 'Expected action');

        $this->assertQueryContentContains(
            'ul.errors',
            "Value is required and can't be empty",
            $responseBody
        );
    }
}
# Change User Description Committed
#1 16170 perforce_software Move Chronicle files to follow new path scheme for branching.
//guest/perforce_software/chronicle/sites/all/modules/disqus/tests/ConfigureControllerTest.php
#1 8972 Matt Attaway Initial add of the Chronicle source code