Perforce Chronicle 2012.2/486814
API Documentation

Setup_Test_SiteFormTest Class Reference

Test the SiteForm and its validation. More...

List of all members.

Public Member Functions

 testFormCreation ()
 Test form instantiation.
 testFormValidation ()
 Test form validation.
 testTitleFieldDefault ()
 Test default value for the site title field.
 testTitleValidation ()
 Test title validation.
 testUrlFieldDefaults ()
 Test _getDefaultUrls helper method.
 testUrlValidation ()
 Test URL validation.

Detailed Description

Test the SiteForm and its validation.

Copyright:
2011-2012 Perforce Software. All rights reserved
License:
Please see LICENSE.txt in top-level folder of this distribution.
Version:
2012.2/486814

Member Function Documentation

Setup_Test_SiteFormTest::testFormCreation ( )

Test form instantiation.

    {
        $form = new Setup_Form_Site;
        $this->assertTrue($form instanceof Zend_Form);
        $this->assertTrue($form->getElement('title') instanceof Zend_Form_Element);
        $this->assertTrue($form->getElement('urls') instanceof Zend_Form_Element);
        $this->assertTrue($form->getElement('description') instanceof Zend_Form_Element);
        $this->assertTrue($form->getElement('create') instanceof Zend_Form_Element);
    }
Setup_Test_SiteFormTest::testFormValidation ( )

Test form validation.

    {
        $urls  = P4Cms_Site::fetchActive()->getConfig()->getUrls();
        $tests = array(
            // valid cases
            array(
                'label'     => __LINE__ . ': valid values',
                'values'    => array(
                    'title' => 'example.com',
                    'urls'  => 'example.com',
                ),
                'valid'     => true
            ),

            // invalid cases
            array(
                'label'     => __LINE__ . ': no values',
                'values'    => array(),
                'valid'     => false,
                'errors'    => array(
                    'title' => array('isEmpty' => "Value is required and can't be empty"),
                    'urls'  => array('isEmpty' => "Value is required and can't be empty"),
                )
            ),
            array(
                'label'     => __LINE__ . ': site already exists',
                'values'    => array(
                    'title' => 'test',
                    'urls'  => 'example.com',
                ),
                'valid'     => false,
                'errors'    => array(
                    'title' => array(
                        "The site title you provided appears to be taken. Please choose a different title."
                    ),
                )
            ),
            array(
                'label'     => __LINE__ . ': site address already exists',
                'values'    => array(
                    'title' => 'example.com',
                    'urls'  => $urls[0],
                ),
                'valid'     => false,
                'errors'    => array(
                    'urls' => array("The site address '$urls[0]' you provided appears to be taken. "
                         . "Please choose a different address."),
                )
            ),
        );

        foreach ($tests as $test) {
            $form = new Setup_Form_Site;
            $form->setConnection($this->p4);
            $form->setCsrfProtection(false);

            $this->assertEquals(
                $test['valid'],
                $form->isValid($test['values']),
                $test['label'] .': expected status'
            );

            $expectedErrors = $test['valid']
                ? array()
                : $test['errors'];
            $this->assertEquals(
                $expectedErrors,
                $form->getMessages(),
                $test['label'] . ': expected error messages'
            );
        }

        // verify that site cannot be created if there is a depot with name
        // matching the site title/id
        $depot = new P4_Depot($this->p4);
        $depot->setValues(
            array(
                'Depot'     => P4Cms_Site::SITE_PREFIX . 'mysite',
                'Type'      => 'local',
                'Map'       => 'mysite/...'
            )
        )->save();

        $form = new Setup_Form_Site;
        $form->setConnection($this->p4);
        $form->setCsrfProtection(false);

        $test = array(
            'title' => 'mysite',
            'urls'  => 'mysite'
        );

        $this->assertFalse(
            $form->isValid($test),
            "Expected form is invalid if there is an existing depot with the site title."
        );
    }
Setup_Test_SiteFormTest::testTitleFieldDefault ( )

Test default value for the site title field.

    {
        $tests = array(
            array(
                'label'     => __LINE__ . ': non-http request',
                'type'      => 'nonhttp',
                'uri'       => '',
                'host'      => 'example.com',
                'expected'  => false
            ),
            array(
                'label'     => __LINE__ . ': http request',
                'type'      => 'http',
                'uri'       => 'http://example.com/',
                'host'      => 'example.com',
                'expected'  => 'example.com'
            ),
            array(
                'label'     => __LINE__ . ': http+port request',
                'type'      => 'http',
                'uri'       => 'http://example.com:8080/',
                'host'      => 'example.com:8080',
                'expected'  => 'example.com'
            ),
        );

        // prep for test execution
        $front = Zend_Controller_Front::getInstance();
        $originalRequest = $front->getRequest();
        $originalHost = $_SERVER['HTTP_HOST'];

        foreach ($tests as $test) {
            // setup a request object for the front controller
            if ($test['type'] == 'http') {
                $request = new Zend_Controller_Request_Http($test['uri']);
            } else {
                $request = new Zend_Controller_Request_Simple;
            }
            $front->setRequest($request);
            // override the notion of the current host.
            $_SERVER['HTTP_HOST'] = $test['host'];

            $form = new Setup_Form_Site;
            $this->assertEquals(
                $test['expected'],
                $form->getValue('title'),
                $test['label'] .":Expected hostname given '". $test['host'] ."'"
            );
        }

        // cleanup after test execution
        $_SERVER['HTTP_HOST'] = $originalHost;
        if ($originalRequest) {
            $front->setRequest($originalRequest);
        }
    }
Setup_Test_SiteFormTest::testTitleValidation ( )

Test title validation.

    {
        $tests = array(
            // valid cases
            array('label' => __LINE__, 'title' => 'example.com', 'valid' => true),
            array('label' => __LINE__, 'title' => 'foobar',      'valid' => true),
            array('label' => __LINE__, 'title' => '..',          'valid' => true),
            array('label' => __LINE__, 'title' => '"',           'valid' => true),
            array('label' => __LINE__, 'title' => "'",           'valid' => true),
            array('label' => __LINE__, 'title' => 'a b',         'valid' => true),
            array('label' => __LINE__, 'title' => '/',           'valid' => true),
            array('label' => __LINE__, 'title' => '\\',          'valid' => true),
            array('label' => __LINE__, 'title' => '@',           'valid' => true),
            array('label' => __LINE__, 'title' => '#',           'valid' => true),
            array('label' => __LINE__, 'title' => '*',           'valid' => true),
            array('label' => __LINE__, 'title' => '...',         'valid' => true),
            array('label' => __LINE__, 'title' => '%%1',         'valid' => true),

            // invalid cases
            array('label' => __LINE__, 'title' => '',  'valid' => false, 'errors' => array('isEmpty')),
            array('label' => __LINE__, 'title' => ' ', 'valid' => false, 'errors' => array('isEmpty')),
        );

        foreach ($tests as $test) {
            $form = new Setup_Form_Site;
            $this->assertEquals(
                $test['valid'],
                $form->getElement('title')->isValid($test['title']),
                'Unexpected status for '. $test['label'] .': "'. $test['title'] .'"'
            );

            $expectedErrors = $test['valid']
                ? array()
                : $test['errors'];
            $this->assertEquals(
                $expectedErrors,
                $form->getElement('title')->getErrors(),
                'Expected errors for '. $test['label'] .': "'. $test['title'] .'"'
            );
        }
    }
Setup_Test_SiteFormTest::testUrlFieldDefaults ( )

Test _getDefaultUrls helper method.

    {
        $tests = array(
            array(
                'label'     => __LINE__ . ': non-http request',
                'type'      => 'nonhttp',
                'uri'       => '',
                'host'      => 'example.com',
                'expected'  => false
            ),
            array(
                'label'     => __LINE__ . ': http request',
                'type'      => 'http',
                'uri'       => 'http://example.com/',
                'host'      => 'example.com',
                'expected'  => "example.com\nwww.example.com"
            ),
            array(
                'label'     => __LINE__ . ': http www request',
                'type'      => 'http',
                'uri'       => 'http://www.example.com/',
                'host'      => 'www.example.com',
                'expected'  => "www.example.com\nexample.com"
            ),
            array(
                'label'     => __LINE__ . ': http+port request',
                'type'      => 'http',
                'uri'       => 'http://example.com:8080/',
                'host'      => 'example.com:8080',
                'expected'  => "example.com:8080\nwww.example.com:8080"
            ),
        );

        // prep for test execution
        $front = Zend_Controller_Front::getInstance();
        $originalRequest = $front->getRequest();
        $originalHost = $_SERVER['HTTP_HOST'];

        foreach ($tests as $test) {
            // setup a request object for the front controller
            if ($test['type'] == 'http') {
                $request = new Zend_Controller_Request_Http($test['uri']);
            } else {
                $request = new Zend_Controller_Request_Simple;
            }
            $front->setRequest($request);
            // override the notion of the current host.
            $_SERVER['HTTP_HOST'] = $test['host'];

            $form = new Setup_Form_Site;
            $this->assertEquals(
                $test['expected'],
                $form->getValue('urls'),
                $test['label'] .": Expected sites given '". $test['host'] ."'"
            );
        }

        // cleanup after test execution
        $_SERVER['HTTP_HOST'] = $originalHost;
        if ($originalRequest) {
            $front->setRequest($originalRequest);
        }
    }
Setup_Test_SiteFormTest::testUrlValidation ( )

Test URL validation.

    {
        $tests = array(
            // valid cases
            array('urls' => 'example.com',                  'valid' => true),
            array('urls' => "example.com\nwww.example.com", 'valid' => true),
            array('urls' => ' example.com',                 'valid' => true),

            // invalid cases
            array('urls' => '', 'valid' => false, 'errors' => array('isEmpty')),
        );

        foreach ($tests as $test) {
            $form = new Setup_Form_Site;
            $this->assertEquals(
                $test['valid'],
                $form->getElement('urls')->isValid($test['urls'])
            );
            $expectedErrors = $test['valid']
                ? array()
                : $test['errors'];
            $this->assertEquals(
                $expectedErrors,
                $form->getElement('urls')->getErrors(),
                'Expected errors for urls "' . $test['urls'] .'"'
            );
        }
    }

The documentation for this class was generated from the following file: