<?php
/**
* Test the widget/image controller.
*
* @copyright 2011 Perforce Software. All rights reserved.
* @license Please see LICENSE.txt in top-level folder of this distribution.
* @version <release>/<patch>
*/
class Widget_Test_ImageWidgetControllerTest extends ModuleControllerTest
{
protected $_widget = null;
protected $_type = null;
protected $_entry = null;
/**
* Clear caches prior to start of each test.
*/
public function setUp()
{
parent::setUp();
P4Cms_Widget_Type::clearCache();
// install default widgets.
P4Cms_Widget::installDefaults();
// add an image widget
$this->_widget = P4Cms_Widget::factory('widget/image');
$this->_widget->setValue('region', 'test')
->save();
}
/**
* Test image widget partial output
*/
public function testPartial()
{
$id = $this->_widget->getId();
$this->dispatch('/widget/index/index/format/partial/region/test/widget/' . $id);
$responseBody = $this->response->getBody();
$this->assertModule('widget', 'Expected widget module.');
$this->assertController('index', 'Expected index controller.');
$this->assertAction('index', 'Expected index action.');
// an empty rotator should have no output
$this->assertRegExp("/id=\"widget-$id\"/", $responseBody, 'Expected widget id');
$this->assertRegExp(
'/widgetType="widget/image"/',
$responseBody,
'Expected widget type'
);
$this->assertRegExp(
"/<div id=\"widget-$id-content\" class=\"widget-content\">\s+No image to display\.\s+<\/div>/",
$responseBody,
'Expected widget content markup'
);
// configure image to use remote URL
$this->resetRequest()->resetResponse();
$widget = P4Cms_Widget::fetch($id);
$config = $widget->getConfigAsArray();
$config['imageSource'] = 'remote';
$config['imageUrl'] = 'http://www.perforce.com/sites/default/files/perforce_logo.gif';
$config['contentId'] = null;
$widget->setConfig(
array(
'imageSource' => 'remote',
'imageUrl' => 'http://www.perforce.com/sites/default/files/perforce_logo.gif',
'contentId' => null
)
)->save();
$this->dispatch('/widget/index/index/format/partial/region/test/widget/' . $id);
$responseBody = $this->response->getBody();
$this->assertModule('widget', 'Expected widget module.');
$this->assertController('index', 'Expected index controller.');
$this->assertAction('index', 'Expected index action.');
// an empty rotator should have no output
$this->assertRegExp(
"/id=\"widget-$id\"/",
$responseBody,
'Expected widget id for remote URL'
);
$this->assertRegExp(
'/widgetType="widget/image"/',
$responseBody,
'Expected widget type for remote URL'
);
$this->assertRegExp(
"/<div id=\"widget-$id-content\" class=\"widget-content\">/",
$responseBody,
'Expected widget content start for remote URL'
);
$this->assertRegExp(
'/<img.+src="http:\/\/www\.perforce\.com\/sites\/default\/files\/perforce_logo\.gif"'
. '.+title="Image Widget"/',
$responseBody,
'Expected widget content image for remote URL'
);
// configure image to use local content
$this->resetRequest()->resetResponse();
// ensure a content type with a file element exists
$this->_type = new P4Cms_Content_Type;
$this->_type->setId('test-type-w-file')
->setLabel('Test Type')
->setElements(
array(
"title" => array(
"type" => "text",
"options" => array("label" => "Title", "required" => true)
),
"file" => 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();
// create content entry using a real image (200x46 pixels)
$imageData = @file_get_contents(TEST_ASSETS_PATH . '/images/perforce-logo.jpg');
$this->_entry = new P4Cms_Content;
$this->_entry->setId('image-test')
->setContentType('test-type-w-file')
->setValue('title', 'Test Image')
->setValue('file', $imageData)
->setFieldMetadata(
'file',
array('filename' => 'image.jpg', 'mimeType' => 'image/jpg')
)
->save();
$widget = P4Cms_Widget::fetch($id);
$widget->setConfig(
array(
'imageSource' => 'content',
'imageUrl' => null,
'contentId' => 'image-test'
)
)->save();
$this->dispatch('/widget/index/index/format/partial/region/test/widget/' . $id);
$responseBody = $this->response->getBody();
$this->assertModule('widget', 'Expected widget module.');
$this->assertController('index', 'Expected index controller.');
$this->assertAction('index', 'Expected index action.');
// an empty rotator should have no output
$this->assertRegExp(
"/id=\"widget-$id\"/",
$responseBody,
'Expected widget id for local content'
);
$this->assertRegExp(
'/widgetType="widget/image"/',
$responseBody,
'Expected widget type for local content'
);
$this->assertRegExp(
"/<div id=\"widget-$id-content\" class=\"widget-content\">/",
$responseBody,
'Expected widget content start for local content'
);
$this->assertRegExp(
'/<img.+src="\/image\/id\/image-test" .+title="Image Widget"/',
$responseBody,
'Expected widget content image for local content'
);
}
/**
* Test the rotator's configuration structure.
*/
public function testConfigureRequest()
{
$this->utility->impersonate('editor');
$id = $this->_widget->getId();
$this->dispatch('/widget/index/configure/region/test/widget/' . $id);
$responseBody = $this->response->getBody();
$this->assertModule('widget', 'Last module run should be widget module; '. $responseBody);
$this->assertController('index', 'Expected controller; '. $responseBody);
$this->assertAction('configure', 'Expected action; '. $responseBody);
// verify form looks correct.
$this->assertQuery(
"input#widget-$id-config-imageSource-content",
'Expected image source -content- element in form'
);
$this->assertQuery(
"input#widget-$id-config-imageSource-remote",
'Expected image source -remote- element in form'
);
$this->assertQuery(
"input#widget-$id-config-contentTitle",
'Expected content title element in form'
);
$this->assertQuery(
"input#widget-$id-config-imageUrl",
'Expected image URL element in form'
);
$this->assertQuery(
"select#widget-$id-config-sizeType",
'Expected size type element in form'
);
$this->assertQuery(
"input#widget-$id-config-imageWidth",
'Expected imageWidth element in form'
);
$this->assertQuery(
"input#widget-$id-config-imageHeight",
'Expected imageHeight element in form'
);
$this->assertQuery(
"input#widget-$id-config-lockRatio",
'Expected lockRatio element in form'
);
$this->assertQuery(
"input#widget-$id-config-imageAlt",
'Expected imageAlt element in form'
);
$this->assertQuery(
"input#widget-$id-config-link",
'Expected link element in form'
);
$this->assertQuery(
"select#widget-$id-config-linkTarget",
'Expected linkTarget element in form'
);
$this->assertQuery(
"input#widget-$id-config-alignment-none",
'Expected alignment-none element in form'
);
$this->assertQuery(
"input#widget-$id-config-alignment-left",
'Expected alignment-left element in form'
);
$this->assertQuery(
"input#widget-$id-config-alignment-center",
'Expected alignment-center element in form'
);
$this->assertQuery(
"input#widget-$id-config-alignment-right",
'Expected alignment-right element in form'
);
}
}