bad builder method tests
This commit is contained in:
parent
037669c63e
commit
1f1f3eac96
@ -294,3 +294,6 @@ class ComicPress {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class ComicPressException extends Exception {}
|
||||||
|
|
||||||
|
@ -35,16 +35,20 @@ class ComicPressTagBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function __call($method, $arguments) {
|
public function __call($method, $arguments) {
|
||||||
|
$ok = false;
|
||||||
|
|
||||||
switch ($method) {
|
switch ($method) {
|
||||||
case 'next':
|
case 'next':
|
||||||
case 'previous':
|
case 'previous':
|
||||||
case 'first':
|
case 'first':
|
||||||
case 'last':
|
case 'last':
|
||||||
$this->post = call_user_func(array($this->dbi, "get_${method}_post"), $this->storyline->build_from_restrictions($this->restrictions), $this->parent_post);
|
$this->post = call_user_func(array($this->dbi, "get_${method}_post"), $this->storyline->build_from_restrictions($this->restrictions), $this->parent_post);
|
||||||
|
$ok = true;
|
||||||
break;
|
break;
|
||||||
case 'in':
|
case 'in':
|
||||||
if (!isset($arguments[0])) { throw new Exception('Need to specify a category'); }
|
if (!isset($arguments[0])) { throw new Exception('Need to specify a category'); }
|
||||||
$this->restrictions[] = array('child_of', $arguments[0]);
|
$this->restrictions[] = array('child_of', $arguments[0]);
|
||||||
|
$ok = true;
|
||||||
break;
|
break;
|
||||||
case 'id':
|
case 'id':
|
||||||
return $this->post->ID;
|
return $this->post->ID;
|
||||||
@ -52,6 +56,11 @@ class ComicPressTagBuilder {
|
|||||||
return $this->post->post_title;
|
return $this->post->post_title;
|
||||||
case 'timestamp':
|
case 'timestamp':
|
||||||
return strtotime($this->post->post_date);
|
return strtotime($this->post->post_date);
|
||||||
|
case 'date':
|
||||||
|
if (isset($arguments[0])) {
|
||||||
|
return date($arguments[0], strtotime($this->post->post_date));
|
||||||
|
}
|
||||||
|
break;
|
||||||
case 'permalink':
|
case 'permalink':
|
||||||
return get_permalink($this->post->ID);
|
return get_permalink($this->post->ID);
|
||||||
case 'post':
|
case 'post':
|
||||||
@ -63,11 +72,16 @@ class ComicPressTagBuilder {
|
|||||||
$new_method = array_shift($method_info);
|
$new_method = array_shift($method_info);
|
||||||
call_user_func_array(array($this, $new_method), $method_info);
|
call_user_func_array(array($this, $new_method), $method_info);
|
||||||
}
|
}
|
||||||
|
$ok = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($ok) {
|
||||||
return $this;
|
return $this;
|
||||||
|
} else {
|
||||||
|
throw new ComicPressException("${method} isn't allowed at this point");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function parse_method($method_name) {
|
public function parse_method($method_name) {
|
||||||
|
@ -102,7 +102,8 @@ class ComicPressTagBuilderTest extends PHPUnit_Framework_TestCase {
|
|||||||
'post_title' => 'Post title',
|
'post_title' => 'Post title',
|
||||||
'post_date' => '2010-01-01',
|
'post_date' => '2010-01-01',
|
||||||
'guid' => 'the-slug',
|
'guid' => 'the-slug',
|
||||||
))
|
)),
|
||||||
|
array(array('date', 'Ymd'), '20100101'),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -128,8 +129,53 @@ class ComicPressTagBuilderTest extends PHPUnit_Framework_TestCase {
|
|||||||
$core = new ComicPressTagBuilderFactory($dbi);
|
$core = new ComicPressTagBuilderFactory($dbi);
|
||||||
$core = $core->first_in_1();
|
$core = $core->first_in_1();
|
||||||
|
|
||||||
|
if (is_array($info_method)) {
|
||||||
|
$method = array_shift($info_method);
|
||||||
|
$this->assertEquals($expected_result, call_user_func_array(array($core, $method), $info_method));
|
||||||
|
} else {
|
||||||
$this->assertEquals($expected_result, $core->{$info_method}());
|
$this->assertEquals($expected_result, $core->{$info_method}());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function providerTestStorylineBuilderExceptions() {
|
||||||
|
return array(
|
||||||
|
array(array('bad')),
|
||||||
|
array(array(array('in', 1), 'bad')),
|
||||||
|
array(array(array('in', 1), 'date')),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @expectedException ComicPressException
|
||||||
|
* @dataProvider providerTestStorylineBuilderExceptions
|
||||||
|
*/
|
||||||
|
function testStorylineBuilderExceptions($calls) {
|
||||||
|
$target_post = (object)array(
|
||||||
|
'ID' => 1,
|
||||||
|
'post_title' => 'Post title',
|
||||||
|
'post_date' => '2010-01-01',
|
||||||
|
'guid' => 'the-slug',
|
||||||
|
);
|
||||||
|
|
||||||
|
wp_insert_post($target_post);
|
||||||
|
|
||||||
|
$dbi = $this->getMock('ComicPressDBInterface', array('get_first_post'));
|
||||||
|
$dbi->expects($this->any())->method('get_first_post')->will($this->returnValue($target_post));
|
||||||
|
|
||||||
|
$storyline = new ComicPressStoryline();
|
||||||
|
$storyline->set_flattened_storyline('0/1');
|
||||||
|
|
||||||
|
$core = new ComicPressTagBuilderFactory($dbi);
|
||||||
|
|
||||||
|
foreach ($calls as $call) {
|
||||||
|
if (is_array($call)) {
|
||||||
|
$method = array_shift($call);
|
||||||
|
$core = call_user_func_array(array($core, $method), $call);
|
||||||
|
} else {
|
||||||
|
$core = $core->{$call}();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function providerTestMethodParser() {
|
function providerTestMethodParser() {
|
||||||
return array(
|
return array(
|
||||||
|
Loading…
Reference in New Issue
Block a user