diff --git a/classes/DailyImageWidget.php b/classes/DailyImageWidget.php
index c4f237e..ea89e4c 100644
--- a/classes/DailyImageWidget.php
+++ b/classes/DailyImageWidget.php
@@ -1,8 +1,66 @@
default_display_options = array(
+ 'title',
+ 'image',
+ 'styles'
+ );
+ }
+
+ function get_display_options() {
+ $display_options = get_option('hubblesite-daily-image-options');
+ $this->display_options = array();
+ if (!empty($display_options)) {
+ $this->display_options = array_intersect(
+ explode(",", $display_options),
+ array("title", "image", "styles", "caption", "credits")
+ );
+ }
+
+ if (empty($this->display_options)) {
+ $this->display_options = $this->default_display_options;
+ }
+
+ return $this->display_options;
+ }
+
function render() {
- if (!empty($this->data)) {
+ if (!empty($this->data) && is_array($this->data)) {
+ $options = $this->get_display_options();
+
+ echo '
';
+ if (in_array("image", $options)) {
+ echo '
';
+ echo '';
+ echo '';
+ }
+
+ if (in_array("title", $options)) {
+ echo '
';
+ echo $this->data['title'];
+ echo '';
+ }
+
+ if (in_array("caption", $options)) {
+ echo '
';
+ echo $this->data['caption'];
+ echo '
';
+ }
+
+ if (in_array("credits", $options)) {
+ echo '
';
+ echo $this->data['credits'];
+ echo '
';
+ }
+ echo '
';
+
+ if (in_array("styles", $options)) {
+ echo '';
+ }
}
}
}
diff --git a/test/DailyImageWidgetTest.php b/test/DailyImageWidgetTest.php
index 1dee143..06f6b17 100644
--- a/test/DailyImageWidgetTest.php
+++ b/test/DailyImageWidgetTest.php
@@ -2,21 +2,122 @@
require_once('PHPUnit/Framework.php');
require_once(dirname(__FILE__) . '/../classes/DailyImageWidget.php');
+require_once(dirname(__FILE__) . '/../../wordpress-phpunit-mocks/wordpress-phpunit-mocks.php');
class DailyImageWidgetTest extends PHPUnit_Framework_TestCase {
function setUp() {
$this->diw = new DailyImageWidget();
+
+ $this->diw->data = array(
+ 'title' => 'title',
+ 'caption' => 'caption',
+ 'date' => '12345',
+ 'image_url' => 'image_url',
+ 'gallery_url' => 'gallery_url',
+ 'credits' => 'credits'
+ );
+
+ _reset_wp();
}
- function testRetrieveDataFailure() {
- $this->diw->data = false;
-
+ function providerTestRetrieveJunkData() {
+ return array(
+ array(0),
+ array(null),
+ array(false),
+ array(true),
+ array(array()),
+ array((object)array())
+ );
+ }
+
+ /**
+ * @dataProvider providerTestRetrieveJunkData
+ */
+ function testRetrieveJunkData($bad_data) {
+ $this->diw->data = $bad_data;
+
ob_start();
$this->diw->render();
$result = ob_get_clean();
$this->assertTrue(empty($result));
}
+
+
+ function providerTestTemplateOptions() {
+ return array(
+ array(
+ "image",
+ array(
+ '//div[@id="hubblesite-daily-image"]' => true,
+ '//div/a[@href="gallery_url" and @title="title"]' => true,
+ '//div/a/img[@src="image_url" and @alt="title"]' => true,
+ )
+ ),
+ array(
+ "title",
+ array(
+ '//div/a[@href="gallery_url" and @id="hubblesite-daily-image-title"]' => "title"
+ )
+ ),
+ array(
+ "styles",
+ array(
+ '//style[@type="text/css"]' => true
+ )
+ ),
+ array(
+ "caption",
+ array(
+ '//div/div[@id="hubblesite-daily-image-caption"]' => 'caption'
+ )
+ ),
+ array(
+ "credits",
+ array(
+ '//div/div[@id="hubblesite-daily-image-credits"]' => 'credits'
+ )
+ )
+ );
+ }
+
+ /**
+ * @dataProvider providerTestTemplateOptions
+ */
+ function testTemplateOptions($option_string, $xpath_tests) {
+ update_option('hubblesite-daily-image-options', $option_string);
+
+ ob_start();
+ $this->diw->render();
+ $result = ob_get_clean();
+
+ $this->assertTrue(!empty($result));
+
+ $this->assertTrue(($xml = _to_xml($result)) !== false);
+ foreach ($xpath_tests as $xpath => $result) {
+ $this->assertTrue(_xpath_test($xml, $xpath, $result), $xpath);
+ }
+ }
+
+ function providerTestGetDisplayOptions() {
+ return array(
+ array("", array("title", "image", "styles")),
+ array("meow", array("title", "image", "styles")),
+ array("title", array("title")),
+ array("title,image", array("title", "image")),
+ array("title,meow", array("title"))
+ );
+ }
+
+ /**
+ * @dataProvider providerTestGetDisplayOptions
+ */
+ function testGetDisplayOptions($options, $result) {
+ update_option('hubblesite-daily-image-options', $options);
+
+ $this->assertEquals($result, $this->diw->get_display_options());
+ }
}
?>
\ No newline at end of file