Perforce Chronicle 2012.2/486814
API Documentation

History_Test_IndexControllerTest Class Reference

Test the history index controller. More...

List of all members.

Public Member Functions

 _createTestTypeAndEntry ($includeId=false)
 Create a type and a entry for testing.
 setUp ()
 Perform setup.
 testIndexAction ()
 Tests the index action of the history index controller.
 testToolbarAction ()
 Tests the toolbar generation.

Detailed Description

Test the history index controller.

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

History_Test_IndexControllerTest::_createTestTypeAndEntry ( includeId = false)

Create a type and a entry for testing.

Parameters:
integer$includeIdFlag whether to include id
    {
        $elements = array(
            'title' => array(
                'type'      => 'text',
                'options'   => array('label' => 'Title', 'required' => true),
            ),
            'body'  => array(
                'type'      => 'textarea',
                'options'   => array('label' => 'Body'),
            ),
            'abstract'  => array(
                'type'      => 'textarea',
                'options'   => array('label' => 'Abstract'),
            ),
        );
        if ($includeId) {
            $elements['id'] = array(
                'type'      => 'text',
                'options'   => array('label' => 'ID', 'required' => true)
            );
        }
        $type = new P4Cms_Content_Type;
        $type->setId("test-type")
             ->setLabel("Test Type")
             ->setElements($elements)
             ->setValue('icon', file_get_contents(TEST_ASSETS_PATH . '/images/content-type-icon.png'))
             ->setFieldMetadata('icon', array("mimeType" => "image/png"))
             ->save();

        $entry = new P4Cms_Content;
        $entry->setContentType($type)
             ->setValue('title', 'Test Title')
             ->setValue('body', 'The body of the test')
             ->setValue('abstract', 'abstract this');
        if ($includeId) {
            $entry->setId('theId');
        } else {
            $entry->setId(1);
        }
        $entry->save('a test entry');

        return array($type, $entry);
    }
History_Test_IndexControllerTest::setUp ( )

Perform setup.

    {
        parent::setUp();
        $this->utility->impersonate('administrator');
    }
History_Test_IndexControllerTest::testIndexAction ( )

Tests the index action of the history index controller.

Gets history with no specified content id, expecting error. Gets history for newly created content, verifies data grid structure. Gets history information for newly created content, verifies json content. Gets history information for revised content, verifies json content.

    {
        $this->dispatch('/history/index/index');

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

        list($type, $entry) = $this->_createTestTypeAndEntry();

        P4Cms_Record_RegisteredType::create()
                    ->setId('content')
                    ->setRecordClass('P4Cms_Content')
                    ->setUriCallback(
                        function($id, $action, $params)
                        {
                            return call_user_func(
                                P4Cms_Content::getUriCallback(),
                                P4Cms_Content::fetch($id, array('includeDeleted' => true)),
                                $action,
                                $params
                            );
                        }
                    );

        $this->dispatch('/history/index/index/format/partial/type/content/id/' . $entry->getId());

        $body = $this->getResponse()->getBody();

        $this->assertModule('history', 'Expected module, dispatch #1. '. $body);
        $this->assertController('index', 'Expected controller, dispatch #1 '. $body);
        $this->assertAction('index', 'Expected action, dispatch #1 '. $body);

        // ensure table and dojo data elements exist
        $this->assertXpath('//div[@dojotype="dojox.data.QueryReadStore"]', 'Expected dojo.data div');
        $this->assertXpath('//table[@dojotype="p4cms.ui.grid.DataGrid"]', 'Expected dojox.grid table');

        // check initial JSON output
        $this->resetRequest()->resetResponse();

        $this->dispatch('/history/format/json/type/content/id/' . $entry->getId() . '?start=0&count=100');

        $body = $this->response->getBody();
        $this->assertModule('history', 'Expected module, dispatch #2. '. $body);
        $this->assertController('index', 'Expected controller, dispatch #2 '. $body);
        $this->assertAction('index', 'Expected action, dispatch #2 '. $body);

        $data = Zend_Json::decode($body);

        $this->assertSame(1, count($data['items']), 'Expected one item');

        $this->assertSame($data['items'][0]['version'], '1', 'Expected version to match');
        $this->assertSame($data['items'][0]['user'], 'tester', 'Expected user to match');
        $this->assertSame($data['items'][0]['date'], 'just now', 'Expected date to match');
        $this->assertSame($data['items'][0]['description'], "a test entry\n", 'Expected description to match');

        // revise, save, and verify
        $entry->setValue('title', 'Revised Test Title')
             ->setValue('body', 'A different test body')
             ->setValue('abstract', 'Abstractification.');
        $entry->save('modified test entry');

        $this->resetRequest()->resetResponse();
        $this->dispatch('/history/format/json/type/content/id/' . $entry->getId() . '?start=0&count=100');

        $body = $this->response->getBody();
        $this->assertModule('history', 'Expected module, dispatch #2. '. $body);
        $this->assertController('index', 'Expected controller, dispatch #2 '. $body);
        $this->assertAction('index', 'Expected action, dispatch #2 '. $body);

        $data = Zend_Json::decode($body);

        $this->assertSame(2, count($data['items']), 'Expected two items');

        $this->assertSame($data['items'][0]['version'], '2', 'Expected version to match');
        $this->assertSame($data['items'][0]['user'], 'tester', 'Expected user to match');
        $this->assertSame($data['items'][0]['date'], 'just now', 'Expected date to match');
        $this->assertSame(
            $data['items'][0]['description'],
            "modified test entry\n",
            'Expected description to match'
        );
    }
History_Test_IndexControllerTest::testToolbarAction ( )

Tests the toolbar generation.

Returns:
void
    {
        $this->dispatch('/history/index/toolbar/');

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

        list($type, $entry) = $this->_createTestTypeAndEntry();

        P4Cms_Record_RegisteredType::create()
                    ->setId('content')
                    ->setRecordClass('P4Cms_Content')
                    ->setUriCallback(
                        function($id, $action, $params)
                        {
                            return call_user_func(
                                P4Cms_Content::getUriCallback(),
                                P4Cms_Content::fetch($id, array('includeDeleted' => true)),
                                $action,
                                $params
                            );
                        }
                    );

        $this->resetRequest()->resetResponse();

        $this->dispatch('/history/index/toolbar/format/partial/type/content/id/' . $entry->getId());

        $body = $this->getResponse()->getBody();

        $this->assertModule('history', 'Expected module, dispatch #1. '. $body);
        $this->assertController('index', 'Expected controller, dispatch #1 '. $body);
        $this->assertAction('toolbar', 'Expected action, dispatch #1 '. $body);

        $this->assertXpathContentContains(
            '//div[@dojotype="dijit.MenuItem"]',
            'Version 1 by tester just now',
            'Expected dijit menu item with version and user information.'
        );
        $this->assertQueryContentContains(
            'div.middle > span.change > span.action',
            'added',
            'Expected action.'
        );
        $this->assertQueryContentContains(
            'div.middle > span.change > span.user',
            'tester',
            'Expected user.'
        );
        $this->assertQueryContentContains(
            'div.middle > span.change > span.date',
            'just now',
            'Expected date.'
        );
        $this->assertQueryContentContains(
            'div.middle > span.change > span.description',
            'a test entry',
            'Expected entry.'
        );

        $this->assertQueryContentContains(
            'div',
            "p4cms.history.view('content', '1');",
            'Expected history list button javascript.'
        );
    }

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