/ */ class Content_Test_ActionCacheTest extends ModuleControllerTest { /** * Extend parent to pass in bootstrap options enabling the * page cache for this test. */ public function setUp() { parent::setUp('production'); } /** * Verify a page request is cached on initial request. */ public function testAnonymousCacheMiss() { $cacheKey = 'action_6666cd76f96956469e7be39d750cc7d9'; $this->assertSame( 0, count(P4Cms_Cache::getCache('page')->getIds()), 'Expected no IDs in page cache intially' ); $this->dispatch('/'); ob_end_flush(); $this->assertModule('content', 'Last module run should be content module.'); $this->assertController('index', 'Expected controller'); $this->assertAction('index', 'Expected action'); // check that output looks correct. $this->assertQueryContentContains( '#content p', 'This site does not contain any content.', 'Expect the correct title.' ); // verify we cached the output $this->assertTrue( P4Cms_Cache::load($cacheKey, 'page') !== false, 'Expected page cache to exist post dispatch' ); $this->assertSame( 2, count(P4Cms_Cache::getCache('page')->getIds()), 'Expected 2 entries in page cache post request' ); } /** * Verify a page request is not cached for authenticated user. */ public function testAuthenticatedCacheMiss() { $this->utility->impersonate('administrator'); P4Cms_Cache::getCache('page')->setUsername('administrator'); // a cookie must be present for caching to assume we have a // session active; add one. $_COOKIE['random'] = 'value'; // verify we have the right key by checking pre/post flush $this->assertSame( 0, count(P4Cms_Cache::getCache('page')->getIds()), 'Expected no IDs in page cache at start' ); $this->dispatch('/'); ob_end_flush(); $this->assertModule('content', 'Last module run should be content module.'); $this->assertController('index', 'Expected controller'); $this->assertAction('index', 'Expected action'); // check that output looks correct. $this->assertQueryContentContains( '#content p', 'This site does not contain any content.', 'Expect the correct title.' ); // verify no caching occured $this->assertSame( 0, count(P4Cms_Cache::getCache('page')->getIds()), 'Expected page cache to be empty post-authenticated dispatch' ); } /** * Verify an image request is cached for anonymous. */ public function testAuthenticatedCacheHit() { $this->utility->impersonate('administrator'); P4Cms_Cache::getCache('page')->setUsername('administrator'); // a cookie must be present for caching to assume we have a // session active; add one. $_COOKIE['random'] = 'value'; // end the current caching as it would die if it hits ob_end_flush(); $this->assertSame( 0, count(P4Cms_Cache::getCache('page')->getIds()), 'Expected page cache to be empty' ); // get an entry with an image setup $type = new P4Cms_Content_Type; $type->setId('test-type-w-file') ->setLabel('Test Type') ->setElements( array( "title" => array( "type" => "text", "options" => array("label" => "Title", "required" => true) ), "name" => array( "type" => "file", "options" => array("label" => "File") ) ) ) ->setValue('icon', file_get_contents(TEST_ASSETS_PATH . "/images/content-type-icon.png")) ->setFieldMetadata('icon', array("mimeType" => "image/png")) ->setValue('group', 'test2') ->save(); $entry = new P4Cms_Content; $entry->setId('test867-5309') ->setContentType('test-type-w-file') ->setValue('title', 'Test Image') ->setValue('file', 'test image content') ->setFieldMetadata( 'file', array('filename' => 'image.jpg', 'mimeType' => 'image/jpg') ) ->save(); // restart caching, pass doNotDie to allow us to actually test $_SERVER['REQUEST_URI'] = '/content/image/id/test867-5309'; $pageCache = P4Cms_Cache::getCache('page'); $pageCache->addIgnoredSessionVariable('Zend_Auth') ->addIgnoredSessionVariable('Forms[csrfToken]') ->start(null, true); $this->request->setParam('id', 'test867-5309'); $this->dispatch('/content/image/'); $this->assertModule('content', 'Expected module.'); $this->assertController('index', 'Expected controller'); $this->assertAction('image', 'Expected action'); // ensure content delivered. $this->assertSame( $this->response->getBody(), "test image content" ); ob_end_clean(); // verify caching occured $this->assertSame( 2, count(P4Cms_Cache::getCache('page')->getIds()), 'Expected page cache to be populated post-authenticated dispatch' ); } }